![]() |
MAK RTIspy API Documentation for HLA 1516
|
00001 /********************************************************************* 00002 ** Copyright (c) 2001 MaK Technologies, Inc. 00003 ** All rights reserved. 00004 *********************************************************************/ 00005 /********************************************************************* 00006 ** $RCSfile: msgQueue.h,v $ $Revision: 1.20 $ $State: Exp $ 00007 *********************************************************************/ 00008 00011 00012 #ifndef DtRtiMsgQueue_H_ 00013 #define DtRtiMsgQueue_H_ 00014 00015 #include "rtiMsConfig.h" 00016 #include "internalTypes.h" 00017 #include <vlutil/vlHashlist.h> 00018 #include "sortedList.h" 00019 #include <memory> 00020 00021 #if defined(DtIFSPEC1516) || defined(DtIFSPEC1516E) 00022 #include <RTI/LogicalTime.h> 00023 #include <RTI/LogicalTimeInterval.h> 00024 #else 00025 #ifdef DtIFSPEC13DLC 00026 #include "RTI13.h" 00027 #define RTI rti13 00028 #else 00029 #include "RTI.hh" 00030 #endif 00031 #endif 00032 00033 class DtRtiMsg; 00034 class DtLogicalTimeFactory; 00035 00038 class DT_DLL_LRC DtMessageItem : public DtSortedListItem 00039 { 00040 public: 00041 00042 friend class DtRtiMsgQueue; 00043 00044 public: 00045 00047 virtual ~DtMessageItem(); 00048 00050 virtual bool operator<= (const DtSortedListItem& item) const; 00051 virtual bool operator< (const DtSortedListItem& item) const; 00052 virtual bool operator>= (const DtSortedListItem& item) const; 00053 virtual bool operator> (const DtSortedListItem& item) const; 00054 virtual bool operator== (const DtSortedListItem& item) const; 00055 00057 virtual void printData(DtLogicalTimeFactory* logicalTimeFactory); 00058 00060 virtual DtRtiMsg* msg(); 00061 00062 protected: 00063 00065 DtMessageItem(void* data, DtLogicalTimeFactory* fedTimeFactory); 00066 00067 protected: 00068 DtRtiMsg* myMsg; 00069 DtLogicalTimeFactory* myLogicalTimeFactory; 00070 }; 00071 00072 inline DtRtiMsg* DtMessageItem::msg() 00073 { 00074 return myMsg; 00075 } 00076 00078 00079 class DT_DLL_LRC DtRtiMsgQueue : public DtSortedList 00080 { 00081 00082 public: 00083 DtRtiMsgQueue(DtLogicalTimeFactory* fedTimeFactory); 00084 00085 virtual ~DtRtiMsgQueue(); 00086 00088 virtual bool timeRegulating(); 00089 virtual void setTimeRegulating(bool isTimeRegulating); 00090 virtual bool timeConstrained(); 00091 virtual void setTimeConstrained(bool isTimeConstrained); 00092 virtual bool asynchronous(); 00093 virtual void setAsynchronous(bool isAsynchronous); 00094 virtual bool timeAvailable(); 00095 virtual void setTimeAvailable(bool isTimeAvailable); 00096 virtual bool timeAdvancing(); 00097 virtual void setTimeAdvancing(bool isTimeAdvancing); 00098 00099 #ifdef DtIFSPEC1516 00100 00101 virtual const rti1516::LogicalTime& timestamp(); 00102 virtual void setTimestamp(const rti1516::LogicalTime& federateTime); 00103 00105 virtual const rti1516::LogicalTimeInterval& lookahead(); 00106 virtual void setLookahead(const rti1516::LogicalTimeInterval& lookaheadValue); 00107 00112 virtual const rti1516::LogicalTime& galt(); 00113 virtual void setGalt(const rti1516::LogicalTime& federateTime); 00114 00115 #elif defined(DtIFSPEC1516E) 00116 00117 virtual const rti1516e::LogicalTime& timestamp(); 00118 virtual void setTimestamp(const rti1516e::LogicalTime& federateTime); 00119 00121 virtual const rti1516e::LogicalTimeInterval& lookahead(); 00122 virtual void setLookahead(const rti1516e::LogicalTimeInterval& lookaheadValue); 00123 00128 virtual const rti1516e::LogicalTime& galt(); 00129 virtual void setGalt(const rti1516e::LogicalTime& federateTime); 00130 #else 00131 00132 virtual const RTI::FedTime& timestamp(); 00133 virtual void setTimestamp(const RTI::FedTime& federateTime); 00134 00136 virtual const RTI::FedTime& lookahead(); 00137 virtual void setLookahead(const RTI::FedTime& lookaheadValue); 00138 00143 virtual const RTI::FedTime& galt(); 00144 virtual void setGalt(const RTI::FedTime& federateTime); 00145 #endif 00146 00147 00152 virtual bool queueMsg(DtRtiMsg const& msg); 00153 00155 virtual DtRtiMsg* removeMsg(const DtMessageRetractionHandle& retractHandle); 00156 00159 virtual bool deleteMsg(const DtMessageRetractionHandle& retractHandle); 00160 00162 virtual void deleteMsgs(DtFederateHandle federateHandle); 00163 00165 virtual void deleteAll(); 00166 00167 #ifdef DtIFSPEC1516 00168 00169 virtual DtRtiMsg* nextMsg(const rti1516::LogicalTime& timestamp); 00170 00172 virtual DtRtiMsg* nextTsoMsg(const rti1516::LogicalTime& timestamp); 00173 #elif defined(DtIFSPEC1516E) 00174 00175 virtual DtRtiMsg* nextMsg(const rti1516e::LogicalTime& timestamp); 00176 00178 virtual DtRtiMsg* nextTsoMsg(const rti1516e::LogicalTime& timestamp); 00179 #else 00180 00181 virtual DtRtiMsg* nextMsg(const RTI::FedTime& timestamp); 00182 00184 virtual DtRtiMsg* nextTsoMsg(const RTI::FedTime& timestamp); 00185 #endif 00186 00188 virtual DtRtiMsg* removeNextTsoMsg(); 00189 00191 virtual DtRtiMsg* peekNextTsoMsg(); 00192 00193 inline unsigned int roQueueLength() const; 00194 00195 protected: 00196 00199 virtual DtSortedListItem* newItem(void* data); 00200 00201 DtRtiMsgQueue(const DtRtiMsgQueue& orig); 00202 DtRtiMsgQueue& operator=(DtRtiMsgQueue const& orig); 00203 00205 virtual DtSortedListItem* add(void* data); 00206 00207 protected: 00208 00209 MAKRti::DtList myRoList; 00210 bool myTimeConstrainedEnabled; 00211 bool myTimeRegulatingEnabled; 00212 bool myAsynchronous; 00213 bool myTimeAvailable; 00214 bool myTimeAdvancing; 00215 DtLogicalTimeFactory* myLogicalTimeFactory; 00216 #ifdef DtIFSPEC1516 00217 std::auto_ptr <rti1516::LogicalTime> myTime; 00218 std::auto_ptr <rti1516::LogicalTimeInterval> myLookahead; 00219 std::auto_ptr <rti1516::LogicalTime> myGalt; 00220 #elif defined(DtIFSPEC1516E) 00221 std::auto_ptr <rti1516e::LogicalTime> myTime; 00222 std::auto_ptr <rti1516e::LogicalTimeInterval> myLookahead; 00223 std::auto_ptr <rti1516e::LogicalTime> myGalt; 00224 #else 00225 std::auto_ptr <RTI::FedTime> myTime; 00226 std::auto_ptr <RTI::FedTime> myLookahead; 00227 std::auto_ptr <RTI::FedTime> myGalt; 00228 #endif 00229 }; 00230 00231 inline bool DtRtiMsgQueue::timeRegulating() 00232 { 00233 return myTimeRegulatingEnabled; 00234 } 00235 00236 inline void DtRtiMsgQueue::setTimeRegulating(bool isTimeRegulating) 00237 { 00238 myTimeRegulatingEnabled = isTimeRegulating; 00239 } 00240 00241 inline bool DtRtiMsgQueue::timeConstrained() 00242 { 00243 return myTimeConstrainedEnabled; 00244 } 00245 00246 inline void DtRtiMsgQueue::setTimeConstrained(bool isTimeConstrained) 00247 { 00248 myTimeConstrainedEnabled = isTimeConstrained; 00249 } 00250 00251 inline bool DtRtiMsgQueue::asynchronous() 00252 { 00253 return myAsynchronous; 00254 } 00255 00256 inline void DtRtiMsgQueue::setAsynchronous(bool isAsynchronous) 00257 { 00258 myAsynchronous = isAsynchronous; 00259 } 00260 00261 inline bool DtRtiMsgQueue::timeAvailable() 00262 { 00263 return myTimeAvailable; 00264 } 00265 00266 inline void DtRtiMsgQueue::setTimeAvailable(bool isTimeAvailable) 00267 { 00268 myTimeAvailable = isTimeAvailable; 00269 } 00270 00271 inline bool DtRtiMsgQueue::timeAdvancing() 00272 { 00273 return myTimeAdvancing; 00274 } 00275 00276 inline void DtRtiMsgQueue::setTimeAdvancing(bool isTimeAdvancing) 00277 { 00278 myTimeAdvancing = isTimeAdvancing; 00279 } 00280 00281 #ifdef DtIFSPEC1516 00282 inline const rti1516::LogicalTime& DtRtiMsgQueue::timestamp() 00283 #elif defined(DtIFSPEC1516E) 00284 inline const rti1516e::LogicalTime& DtRtiMsgQueue::timestamp() 00285 #else 00286 inline const RTI::FedTime& DtRtiMsgQueue::timestamp() 00287 #endif 00288 { 00289 return *myTime; 00290 } 00291 00292 #ifdef DtIFSPEC1516 00293 inline void DtRtiMsgQueue::setTimestamp( 00294 const rti1516::LogicalTime& federateTime) 00295 #elif defined(DtIFSPEC1516E) 00296 inline void DtRtiMsgQueue::setTimestamp( 00297 const rti1516e::LogicalTime& federateTime) 00298 #else 00299 inline void DtRtiMsgQueue::setTimestamp(const RTI::FedTime& federateTime) 00300 #endif 00301 { 00302 *myTime = federateTime; 00303 } 00304 00305 #ifdef DtIFSPEC1516 00306 inline const rti1516::LogicalTimeInterval& DtRtiMsgQueue::lookahead() 00307 #elif defined(DtIFSPEC1516E) 00308 inline const rti1516e::LogicalTimeInterval& DtRtiMsgQueue::lookahead() 00309 #else 00310 inline const RTI::FedTime& DtRtiMsgQueue::lookahead() 00311 #endif 00312 { 00313 return *myLookahead; 00314 } 00315 00316 #ifdef DtIFSPEC1516 00317 inline void DtRtiMsgQueue::setLookahead( 00318 const rti1516::LogicalTimeInterval& lookaheadValue) 00319 #elif defined(DtIFSPEC1516E) 00320 inline void DtRtiMsgQueue::setLookahead( 00321 const rti1516e::LogicalTimeInterval& lookaheadValue) 00322 #else 00323 inline void DtRtiMsgQueue::setLookahead(const RTI::FedTime& lookaheadValue) 00324 #endif 00325 { 00326 *myLookahead = lookaheadValue; 00327 } 00328 00329 #ifdef DtIFSPEC1516 00330 inline const rti1516::LogicalTime& DtRtiMsgQueue::galt() 00331 #elif defined(DtIFSPEC1516E) 00332 inline const rti1516e::LogicalTime& DtRtiMsgQueue::galt() 00333 #else 00334 inline const RTI::FedTime& DtRtiMsgQueue::galt() 00335 #endif 00336 { 00337 return *myGalt; 00338 } 00339 00340 #ifdef DtIFSPEC1516 00341 inline void DtRtiMsgQueue::setGalt(const rti1516::LogicalTime& federateTime) 00342 #elif defined(DtIFSPEC1516E) 00343 inline void DtRtiMsgQueue::setGalt(const rti1516e::LogicalTime& federateTime) 00344 #else 00345 inline void DtRtiMsgQueue::setGalt(const RTI::FedTime& federateTime) 00346 #endif 00347 { 00348 *myGalt = federateTime; 00349 } 00350 00351 inline unsigned int DtRtiMsgQueue::roQueueLength() const 00352 { 00353 return myRoList.count(); 00354 } 00355 00356 00357 #endif