101 const stdair::ProgressStatus& iProgressStatus,
102 const double& iEventMeasure) {
104 const stdair::Count_T lNbOfActualEventsOfSuchType =
105 iProgressStatus.getActualNb();
106 const stdair::Count_T lNbOfCurrentEventsOfSuchType =
107 iProgressStatus.getCurrentNb();
108 const stdair::Count_T lNbOfRemainingEventsOfSuchType =
109 lNbOfActualEventsOfSuchType - lNbOfCurrentEventsOfSuchType;
110 stdair::Count_T lPreviousNbOfActualEventsOfSuchType = 0;
111 stdair::Count_T lPreviousNbOfCurrentEventsOfSuchType = 0;
115 SEVMGR::ProgressStatusMap_T::iterator itProgressStatus =
116 _progressStatusMap.find (iType);
117 if (itProgressStatus == _progressStatusMap.end()) {
118 const bool hasInsertBeenSuccessful =
119 _progressStatusMap.insert (SEVMGR::ProgressStatusMap_T::
120 value_type (iType, iProgressStatus)).second;
122 if (hasInsertBeenSuccessful ==
false) {
123 STDAIR_LOG_ERROR (
"No progress_status can be inserted "
124 <<
"for the following event type: "
125 << stdair::EventType::getLabel(iType) <<
".");
126 throw stdair::EventException (
"No progress_status can be inserted "
127 "for the following event type: "
128 + stdair::EventType::getLabel(iType));
131 stdair::ProgressStatus& lProgressStatus = itProgressStatus->second;
132 lPreviousNbOfActualEventsOfSuchType = lProgressStatus.getActualNb();
133 lPreviousNbOfCurrentEventsOfSuchType = lProgressStatus.getCurrentNb();
134 lProgressStatus = iProgressStatus;
138 _currentElapsedTime += iEventMeasure;
142 ChronometerMap_T::iterator itChronometer =
143 _chronometerMap.find (iType);
144 if (itChronometer == _chronometerMap.end()) {
145 const bool hasInsertBeenSuccessful =
147 value_type (iType, iEventMeasure)).second;
149 if (hasInsertBeenSuccessful ==
false) {
150 STDAIR_LOG_ERROR (
"No chronometer can be inserted "
151 <<
"for the following event type: "
152 << stdair::EventType::getLabel(iType) <<
".");
153 throw stdair::EventException (
"No chronometer can be inserted for the "
154 "following event type: "
155 + stdair::EventType::getLabel(iType));
157 _currentEstimatedRemainingTime +=
158 lNbOfRemainingEventsOfSuchType*iEventMeasure;
161 double& lChronometer = itChronometer->second;
162 const stdair::Count_T lPreviousNbOfRemainingEventsOfSuchType =
163 lPreviousNbOfActualEventsOfSuchType -
164 lPreviousNbOfCurrentEventsOfSuchType;
165 if (lPreviousNbOfCurrentEventsOfSuchType > 0) {
166 _currentEstimatedRemainingTime -=
167 lPreviousNbOfRemainingEventsOfSuchType*
168 lChronometer/lPreviousNbOfCurrentEventsOfSuchType;
170 if (lNbOfCurrentEventsOfSuchType > 0) {
171 lChronometer += iEventMeasure;
172 _currentEstimatedRemainingTime += lNbOfRemainingEventsOfSuchType*
173 lChronometer/lNbOfCurrentEventsOfSuchType;
175 _currentEstimatedRemainingTime =
176 std::max(_currentEstimatedRemainingTime, 0.0);
180 _totalElapsedTime = _currentElapsedTime
182 *(_currentElapsedTime + _currentEstimatedRemainingTime);
183 _estimatedRemainingTime = _currentEstimatedRemainingTime
184 + (_totalNumberOfRuns - _currentRun)
185 *(_currentElapsedTime + _currentEstimatedRemainingTime);
309 std::ostringstream oStr;
314 if (_totalNumberOfRuns > 1) {
318 oStr <<
"Simulation composed of " << _totalNumberOfRuns <<
" runs."
320 oStr <<
"\nTotal number of bookings: " << _totalNbOfBookings
321 <<
"\n\nElapsed time: "
322 << std::setprecision (2) << std::fixed << _totalElapsedTime <<
" s"
323 <<
"\nEstimated remaining time: "
324 << _estimatedRemainingTime <<
" s"
333 if (lRunNumberToDisplay > _totalNumberOfRuns) {
334 lRunNumberToDisplay--;
336 oStr <<
"Current Run (" << lRunNumberToDisplay
337 <<
"/" << _totalNumberOfRuns <<
")"
343 oStr <<
"\nStart Date ---- Current Date ---- End Date\n"
344 << _startDate <<
" " << _currentDate
345 <<
" " << _endDate << std::endl;
350 std::string lEventTypeStr =
"All";
351 describeHelper(lEventTypeStr);
352 oStr <<
"\n\n----------------- Progress statuses ----------------"
353 <<
"\n " << lEventTypeStr << _currentProgressStatus.toString()
354 <<
"\n----------------------------------------------------";
359 std::string lOptionalStr;
360 SEVMGR::ProgressStatusMap_T::const_iterator itPS =
361 _progressStatusMap.begin();
362 while (itPS != _progressStatusMap.end()) {
363 const stdair::EventType::EN_EventType& lType = itPS->first;
364 const stdair::ProgressStatus& lProgressStatus = itPS->second;
365 lEventTypeStr = stdair::EventType::getLabel(lType);
366 describeHelper(lEventTypeStr);
367 oStr <<
"\n " << lEventTypeStr << lProgressStatus.toString();
369 lOptionalStr =
"\n----------------------------------------------------";
371 oStr << lOptionalStr << std::endl;
376 oStr <<
"\nTotal number of bookings: "
377 << _currentNbOfBookings
378 <<
"\n\nElapsed time: "
379 << std::setprecision (2) << std::fixed << _currentElapsedTime <<
" s"
380 <<
"\nEstimated remaining time: "
381 << _currentEstimatedRemainingTime <<
" s"