17 #include <vlutil/vlFedTarget.h>
18 #include <vlutil/vlList.h>
30 class DtRegulationEnabledMsg;
31 class DtConstrainedEnabledMsg;
34 class DtSyncConstrainedMsg;
35 class DtResumeConstrainedMsg;
50 typedef DtTimeMgr* (*DtTimeMgrCreator)(
DtFederateMgr* fedMgr);
65 DtTimeMgr(DtTimeMgr
const& );
68 DtTimeMgr& operator= (DtTimeMgr
const& );
73 virtual void preTick();
76 virtual void postTick();
79 virtual void postJoinInit();
82 virtual bool isPostJoined()
const;
109 virtual bool galtIsValid()
const;
116 virtual void setRequestedTime(
DtRtiApiTime const & theTime);
120 virtual void setRequestedLookahead(
132 virtual void setPendingGrant(
DtRtiApiTime const & theTime);
136 virtual void setEventTime(
DtRtiApiTime const & theTime);
141 virtual bool getSaveTime(
DtRtiApiTime & saveTimeValue )
const;
145 virtual void resetSaveTime(
bool completedSuccessfully);
149 virtual bool getLastSaveTime(
DtRtiApiTime & saveTime )
const;
150 virtual void setLastSaveTime(
DtRtiApiTime const & time);
158 #if defined(DtIFSPEC1516) || defined(DtIFSPEC1516E)
198 bool testForExceptions=
true);
202 bool testForExceptions=
true);
206 bool testForExceptions=
true);
214 bool testForExceptions=
true);
225 virtual void prepareToRestore();
231 virtual void saveFinished();
235 virtual void postSaveFinished();
238 virtual void processSaveInitiate();
241 virtual bool timeAdvancing()
const;
260 virtual unsigned long nextSerialNumber();
263 virtual bool isTimeRegulating()
const;
264 virtual bool isTimeConstrained()
const;
267 virtual bool tsoEventWasServiced()
const;
268 virtual void setTsoEventWasServiced(
bool eventServiced);
271 virtual bool timeAvailable()
const;
272 virtual void setTimeAvailable(
bool isTimeAvailable);
283 static void setCreatorFunction(DtTimeMgrCreator creator);
292 virtual void sendEnableTimeRegulationMsg(
DtRtiApiTime const & theTime,
296 virtual void sendEnableTimeConstrainedMsg(
DtRtiApiTime const & theTime,
300 virtual void sendTimeAdvanceRequestMsg(
DtRtiApiTime const & theTime,
304 virtual void sendConstrainedSyncMsg(
DtRtiApiTime const & theTime,
308 virtual void sendNextEventRequestMsg(
DtRtiApiTime const & nerTime,
310 unsigned long nerCycle);
313 virtual void sendDisableMsg(DtTimeServiceType type);
316 virtual void sendRetractMsg(
const unsigned long serialNumberVal);
319 virtual void sendSaveTimeAdvanceMsg();
322 virtual void sendInitiatedSaveMsg();
336 virtual void setTimeAdvancing(
bool isAdvancing);
342 virtual void adjustZeroLookahead(
bool forceAdjust=
false);
347 virtual void resetZeroLookahead();
356 void commitLookaheadModifcation();
359 virtual bool canGrantImmediately(
DtRtiApiTime const & theTime);
362 virtual bool timeForSave(
DtRtiApiTime const & requestTime);
371 bool canDeliverImmediately(
DtRtiApiTime const & timeVal,
375 virtual void checkGalt(
bool sendLbtsMsg);
378 virtual void checkTimedSave();
384 virtual bool checkMsgQueue(
DtRtiApiTime const & timeUpperBound,
391 virtual bool checkMsgQueue(
DtRtiApiTime const & timeUpperBound);
399 virtual void processNextTsoEvents(
405 virtual void flushMsgQueue(
DtRtiApiTime const & requestTime);
408 virtual void checkTimeAdvanceRequest();
415 virtual void checkNextEventRequest(
DtRtiApiTime const & galtVal,
424 virtual void processRegulationEnabled(
const DtRegulationEnabledMsg& msg);
427 virtual void processConstrainedEnabled(
const DtConstrainedEnabledMsg& msg);
430 virtual void processLbts(
const DtLbtsMsg& msg);
433 virtual void processNerLbts(
const DtNerLbtsMsg& msg);
436 virtual void processSyncConstrained(
const DtSyncConstrainedMsg& msg);
439 virtual void processResumeConstrained(
const DtResumeConstrainedMsg& msg);
442 virtual void processRetract(
const DtRetractMsg& msg);
457 virtual int sizeNeededForVariant();
466 virtual void destroyTempTimePool();
476 static void processRegulationEnabled(
const DtRegulationEnabledMsg& msg,
void* usr);
479 static void processConstrainedEnabled(
const DtConstrainedEnabledMsg& msg,
void* usr);
482 static void processLbts(
const DtLbtsMsg& msg,
void* usr);
485 static void processNerLbts(
const DtNerLbtsMsg& msg,
void* usr);
488 static void processSyncConstrained(
const DtSyncConstrainedMsg& msg,
void* usr);
491 static void processResumeConstrained(
const DtResumeConstrainedMsg& msg,
void* usr);
494 static void processRetract(
const DtRetractMsg& msg,
void* usr);
497 static void processSaveTime(
const DtSaveTimeMsg& msg,
void* usr);
521 bool myLastSaveTimeIsValid;
528 std::auto_ptr <DtRtiApiTime> myLits;
531 std::auto_ptr <DtRtiApiTime> myLots;
534 std::auto_ptr <DtRtiApiTime> myGalt;
537 std::auto_ptr <DtRtiApiTime> myFederateTime;
540 std::auto_ptr <DtRtiApiTimeInterval> myLookahead;
543 std::auto_ptr <DtRtiApiTime> myRequestedTime;
546 std::auto_ptr <DtRtiApiTimeInterval> myRequestedLookahead;
550 std::auto_ptr <DtRtiApiTime> myEventTime;
554 std::auto_ptr <DtRtiApiTimeInterval> myWorkingLookahead;
568 std::auto_ptr <DtRtiApiTime> myPendingGrantTime;
571 std::auto_ptr <DtRtiApiTime> mySaveTime;
574 std::auto_ptr <DtRtiApiTime> myLastSaveTime;
577 bool myEventWasDelivered;
579 bool myIncludeEventTime;
583 unsigned long myNerCycle;
589 bool myInterruptedNextEvent;
593 bool myTimeConstrainedEnabled;
594 bool myTimeRegulatingEnabled;
595 bool myEnableTimeRegulationPending;
596 bool myEnableTimeConstrainedPending;
597 bool myPendingConstrainedSync;
603 bool myRequestingTimeAdvance;
604 bool myRequestingNextEvent;
606 bool myAdvancingTime;
607 bool myTsoEventWasServiced;
612 bool myTimeAvailable;
613 bool myAdjustedLookahead;
614 bool myAdjustedWorkingLookahead;
615 bool myModifyingLookahead;
616 bool myNeraRemovedLookaheadAdjustment;
617 bool myAdvanceWillReduceLookahead;
622 bool mySaveTimePending;
623 bool mySaveTimeAdvancedPending;
625 bool mySaveTimeIsReady;
626 bool myPostSavePending;
627 bool myPostSaveTimePending;
628 bool myInitateSaveReady;
632 MAKRti::DtString mySaveTimeLabel;
635 unsigned long mySerialNumber;
641 MAKRti::DtList myTempTimePool;
646 static DtTimeMgrCreator theCreator;