17 #include <vlutil/vlFedTarget.h>
18 #include <vlutil/vlList.h>
31 class DtRegulationEnabledMsg;
32 class DtConstrainedEnabledMsg;
35 class DtSyncConstrainedMsg;
36 class DtResumeConstrainedMsg;
51 typedef DtTimeMgr* (*DtTimeMgrCreator)(
DtFederateMgr* fedMgr);
66 DtTimeMgr(DtTimeMgr
const& );
69 DtTimeMgr& operator= (DtTimeMgr
const& );
74 virtual void preTick();
77 virtual void postTick();
80 virtual void postJoinInit();
83 virtual bool isPostJoined()
const;
110 virtual bool galtIsValid()
const;
117 virtual void setFederationLbts(
DtRtiApiTime const & theTime);
121 virtual void setRequestedTime(
DtRtiApiTime const & theTime);
125 virtual void setRequestedLookahead(
137 virtual void setPendingGrant(
DtRtiApiTime const & theTime);
141 virtual void setEventTime(
DtRtiApiTime const & theTime);
146 virtual bool getSaveTime(
DtRtiApiTime & saveTimeValue )
const;
150 virtual void resetSaveTime(
bool completedSuccessfully);
154 virtual bool getLastSaveTime(
DtRtiApiTime & saveTime )
const;
155 virtual void setLastSaveTime(
DtRtiApiTime const & time);
163 #if defined(DtIFSPEC1516) || defined(DtIFSPEC1516E)
203 bool testForExceptions=
true);
207 bool testForExceptions=
true);
211 bool testForExceptions=
true);
219 bool testForExceptions=
true);
230 virtual void prepareToRestore();
236 virtual void saveFinished();
240 virtual void postSaveFinished();
243 virtual void processSaveInitiate();
246 virtual bool timeAdvancing()
const;
265 virtual unsigned long nextSerialNumber();
268 virtual bool isTimeRegulating()
const;
269 virtual bool isTimeConstrained()
const;
272 virtual bool tsoEventWasServiced()
const;
273 virtual void setTsoEventWasServiced(
bool eventServiced);
276 virtual bool timeAvailable()
const;
287 static void setCreatorFunction(DtTimeMgrCreator creator);
293 enum DtTimeAvailableState
296 DtTimeNotAvailable = 0,
299 DtTimeNotAvailableAndNotAdvancingAvailable,
300 DtTimeNotAvailableAndAdvancingAvailable,
301 DtTimeAvailableAndNotAdvancingAvailable,
302 DtTimeAvailableAndAdvancingAvailable
310 virtual void sendEnableTimeRegulationMsg(
DtRtiApiTime const & theTime,
314 virtual void sendEnableTimeConstrainedMsg(
DtRtiApiTime const & theTime,
318 virtual void sendTimeAdvanceRequestMsg(
DtRtiApiTime const & theTime,
322 virtual void sendConstrainedSyncMsg(
DtRtiApiTime const & theTime,
326 virtual void sendNextEventRequestMsg(
DtRtiApiTime const & nerTime,
328 unsigned long nerCycle);
331 virtual void sendDisableMsg(DtTimeServiceType type);
334 virtual void sendRetractMsg(
const unsigned long serialNumberVal);
337 virtual void sendSaveTimeAdvanceMsg();
340 virtual void sendInitiatedSaveMsg();
354 virtual void setTimeAdvancing(
bool isAdvancing);
357 virtual void setTimeAvailableState(DtTimeAvailableState timeAvailableState);
360 virtual DtTimeAvailableState timeAvailableState()
const;
366 virtual void adjustZeroLookahead(
bool forceAdjust=
false);
371 virtual void resetZeroLookahead();
380 void commitLookaheadModifcation();
383 virtual bool canGrantImmediately(
DtRtiApiTime const & theTime);
386 virtual bool timeForSave(
DtRtiApiTime const & requestTime);
395 bool canDeliverImmediately(
DtRtiApiTime const & timeVal,
399 virtual void checkGalt(
bool sendLbtsMsg);
402 virtual void checkTimedSave();
408 virtual bool checkMsgQueue(
DtRtiApiTime const & timeUpperBound,
415 virtual bool checkMsgQueue(
DtRtiApiTime const & timeUpperBound);
423 virtual void processNextTsoEvents(
429 virtual void flushMsgQueue(
DtRtiApiTime const & requestTime);
432 virtual void checkTimeAdvanceRequest();
436 virtual void checkNextEventRequest();
439 virtual void sendNerMessage();
447 virtual void processRegulationEnabled(
const DtRegulationEnabledMsg& msg);
450 virtual void processConstrainedEnabled(
const DtConstrainedEnabledMsg& msg);
453 virtual void processLbts(
const DtLbtsMsg& msg);
456 virtual void processNerLbts(
const DtNerLbtsMsg& msg);
459 virtual void processSyncConstrained(
const DtSyncConstrainedMsg& msg);
462 virtual void processResumeConstrained(
const DtResumeConstrainedMsg& msg);
465 virtual void processRetract(
const DtRetractMsg& msg);
480 virtual int sizeNeededForVariant();
489 virtual void destroyTempTimePool();
499 static void processRegulationEnabled(
const DtRegulationEnabledMsg& msg,
void* usr);
502 static void processConstrainedEnabled(
const DtConstrainedEnabledMsg& msg,
void* usr);
505 static void processLbts(
const DtLbtsMsg& msg,
void* usr);
508 static void processNerLbts(
const DtNerLbtsMsg& msg,
void* usr);
511 static void processSyncConstrained(
const DtSyncConstrainedMsg& msg,
void* usr);
514 static void processResumeConstrained(
const DtResumeConstrainedMsg& msg,
void* usr);
517 static void processRetract(
const DtRetractMsg& msg,
void* usr);
520 static void processSaveTime(
const DtSaveTimeMsg& msg,
void* usr);
544 bool myLastSaveTimeIsValid;
551 std::auto_ptr <DtRtiApiTime> myLits;
554 std::auto_ptr <DtRtiApiTime> myLots;
557 std::auto_ptr <DtRtiApiTime> myGalt;
560 std::auto_ptr <DtRtiApiTime> myFederationLbts;
563 std::auto_ptr <DtRtiApiTime> myFederateTime;
566 std::auto_ptr <DtRtiApiTimeInterval> myLookahead;
569 std::auto_ptr <DtRtiApiTime> myRequestedTime;
572 std::auto_ptr <DtRtiApiTimeInterval> myRequestedLookahead;
576 std::auto_ptr <DtRtiApiTime> myEventTime;
580 std::auto_ptr <DtRtiApiTimeInterval> myWorkingLookahead;
594 std::auto_ptr <DtRtiApiTime> myPendingGrantTime;
597 std::auto_ptr <DtRtiApiTime> mySaveTime;
600 std::auto_ptr <DtRtiApiTime> myLastSaveTime;
604 bool myEventWasDelivered;
607 bool myIncludeEventTime;
611 unsigned long myNerCycle;
617 bool myInterruptedNextEvent;
621 bool myTimeConstrainedEnabled;
622 bool myTimeRegulatingEnabled;
623 bool myEnableTimeRegulationPending;
624 bool myEnableTimeConstrainedPending;
625 bool myPendingConstrainedSync;
631 bool myRequestingTimeAdvance;
632 bool myRequestingNextEvent;
634 bool myAdvancingTime;
635 bool myTsoEventWasServiced;
640 DtTimeAvailableState myTimeAvailableState;
641 bool myAdjustedLookahead;
642 bool myAdjustedWorkingLookahead;
643 bool myModifyingLookahead;
644 bool myNeraRemovedLookaheadAdjustment;
645 bool myAdvanceWillReduceLookahead;
650 bool mySaveTimePending;
651 bool mySaveTimeAdvancedPending;
653 bool mySaveTimeIsReady;
654 bool myPostSavePending;
655 bool myPostSaveTimePending;
656 bool myInitateSaveReady;
660 MAKRti::DtString mySaveTimeLabel;
663 unsigned long mySerialNumber;
669 std::queue<DtRtiApiTime*> myTempTimePool;
675 static DtTimeMgrCreator theCreator;