![]() |
MAK RTIspy API Documentation for HLA 1516
|
00001 /********************************************************************* 00002 ** Copyright (c) 1998 MaK Technologies, Inc. 00003 ** All rights reserved. 00004 *********************************************************************/ 00005 /********************************************************************* 00006 ** $RCSfile: rtiObject.h,v $ $Revision: 1.9 $ $State: Exp $ 00007 *********************************************************************/ 00008 00009 #ifndef rtiObject_H_ 00010 #define rtiObject_H_ 00011 00014 00015 #include "attrHandSet.h" 00016 #include <vlutil/vlUtil.h> 00017 #include "requestDb.h" 00018 #include <vlutil/vlHashlist.h> 00019 #include <vlutil/vlFedTarget.h> 00020 #include "pubRegSet.h" 00021 #include "bitMask.h" 00022 #include "internalTypes.h" 00023 #include <deque> 00024 00025 class DtObjectClassInfo; 00026 class DtPubRegionSet; 00027 class DtFomClassMgr; 00028 class DtAhvps; 00029 class DtRtiObject; 00030 00031 00034 class DT_DLL_LRC DtObjectAttrInfo 00035 { 00036 friend class DtRtiObject; 00037 class tuple 00038 { 00039 public: 00040 tuple(){} 00041 tuple(unsigned int o, float r, MAKRti::DtTime t):offset(o),rate(r),timestamp(t){} 00042 public: 00043 unsigned int offset; 00044 float rate; 00045 MAKRti::DtTime timestamp; 00046 }; 00047 00048 public: 00049 DtObjectAttrInfo(); 00050 00051 public: 00052 00054 MAKRti::DtTransportType transport; 00055 00057 MAKRti::DtOrderType order; 00058 00060 DtHandle regionSetHandle; 00061 00063 DtPubRegionSet* regionSet; 00064 00066 DtRegionToFederateMap remoteSubscriptionRegions; 00067 00069 DtFederateToRegionMap remoteSubscriptionRegionsByFederate; 00070 00072 DtFederateHandleStdSet remoteSubscriptions; 00073 00075 DtBitMask remoteSubscriberMask; 00076 00078 MAKRti::DtTime myNextReceiveTime; 00079 00081 std::deque<tuple> offsets; 00082 }; 00083 00085 enum DtUpdateType 00086 { 00087 DtUpdateMomFederateObject, 00088 DtUpdateMomFederationObject, 00089 DtUpdateFederateObject 00090 }; 00091 00093 typedef DtRtiObject* (*DtEmptyRtiObjectCreator)(); 00094 00096 typedef DtRtiObject* (*DtRegisteredRtiObjectCreator)(DtObjectInstanceHandle id, 00097 const char* objName, 00098 DtObjectClassInfo* actualClass, 00099 DtUpdateType updateType); 00100 00102 typedef DtRtiObject* (*DtDiscoveredRtiObjectCreator)(DtObjectInstanceHandle id, 00103 const char* objName, 00104 DtObjectClassInfo* actualClass, 00105 DtObjectClassInfo* discoveredClass, 00106 DtUpdateType updateType); 00107 00108 00109 00114 class DT_DLL_LRC DtRtiObject 00115 { 00116 protected: 00120 DtRtiObject(); 00121 00124 DtRtiObject(DtObjectInstanceHandle id, 00125 const char* name, 00126 DtObjectClassInfo* classDesc, 00127 DtUpdateType updateType=DtUpdateFederateObject); 00128 00130 DtRtiObject(DtObjectInstanceHandle id, 00131 const char* objName, 00132 DtObjectClassInfo* actualClass, 00133 DtObjectClassInfo* discoveredClass, 00134 DtUpdateType updateType=DtUpdateFederateObject); 00135 00136 public: 00138 virtual ~DtRtiObject(); 00139 00142 static DtRtiObject* createEmptyObject(); 00143 00145 static DtRtiObject* createRegisteredObject(DtObjectInstanceHandle id, 00146 const char* name, 00147 DtObjectClassInfo* classDesc, 00148 DtUpdateType updateType=DtUpdateFederateObject); 00149 00151 static DtRtiObject* createDiscoveredObject(DtObjectInstanceHandle id, 00152 const char* name, 00153 DtObjectClassInfo* classDesc, 00154 DtObjectClassInfo* discoveredClass, 00155 DtUpdateType updateType=DtUpdateFederateObject); 00156 00158 static void setEmptyCreatorFunction(DtEmptyRtiObjectCreator fn); 00159 00161 static void setRegisteredCreatorFunction(DtRegisteredRtiObjectCreator fn); 00162 00164 static void setDiscoveredCreatorFunction(DtDiscoveredRtiObjectCreator fn); 00165 00166 00169 DtRtiObject(const DtRtiObject& orig); 00170 00173 const DtRtiObject& operator=(const DtRtiObject& orig); 00174 00176 void initUpdateRates(const MAKRti::DtUpdateRateSetT rates); 00177 00179 00180 virtual void setObjHandle(DtObjectInstanceHandle handle); 00181 virtual DtObjectInstanceHandle objHandle() const; 00182 virtual DtObjectInstanceHandle id() const; 00184 00186 virtual const char* objName() const; 00187 virtual void setObjName(const char* name); 00188 00190 virtual DtObjectClassHandle actualClassHandle() const; 00191 00194 virtual DtObjectClassHandle knownClassHandle() const; 00195 00197 virtual void setKnownClass(DtObjectClassInfo* classInfo); 00198 00200 virtual DtObjectClassInfo* knownClass(); 00201 00203 virtual DtObjectClassInfo* actualClass(); 00204 00206 virtual int owned(DtAttributeHandle handle) const; 00207 00210 virtual bool ownPriviledgeToDelete(); 00211 00213 virtual DtFederateHandle ownerHandle() const; 00214 virtual void setOwnerHandle(DtFederateHandle handle); 00215 00218 virtual void setIsKnown(bool isKnownValue); 00219 virtual bool isKnown() const; 00220 00222 DtUpdateType updateType() const; 00223 00227 virtual void setDiscoveredClass(DtFederateHandle remoteFedHandle, 00228 DtObjectClassInfo const& classInfo); 00229 00233 virtual void removeDiscoveredClass(DtFederateHandle remoteFedHandle); 00234 00236 virtual DtObjectClassHandle discoveredClass( 00237 DtFederateHandle remoteFedHandle); 00238 00240 virtual bool isDiscovered(DtFederateHandle remoteFedHandle); 00241 00243 virtual bool hasBeenUpdated() const; 00244 00246 virtual void markAsUpdated(); 00247 00249 virtual bool hasBeenReflected() const; 00250 00252 virtual void markAsReflected(); 00253 00255 virtual int rtiOwned(DtAttributeHandle handle) const; 00256 00258 virtual int lrcManaged(DtAttributeHandle handle) const; 00259 00261 virtual void takeFromLrc(const DtAttributeHandleSet& set); 00262 00264 virtual void giveToLrc(const DtAttributeHandleSet& set); 00265 00267 virtual void divestToLrc(const DtAttributeHandleSet& set); 00268 00270 virtual void giveToRti(const DtAttributeHandleSet& set); 00271 00274 virtual void lrcUnmanage(const DtAttributeHandleSet& set); 00275 00277 00278 00279 virtual void addRequest(const DtAttributeHandleSet& requestSet, 00280 bool ifAvail); 00281 virtual void removeRequest(const DtAttributeHandleSet& set); 00283 00285 00286 virtual void addDivesting(const DtAttributeHandleSet& divestSet); 00287 virtual void removeDivesting(const DtAttributeHandleSet& set); 00289 00295 virtual void addRemoteRequest( 00296 const DtAttributeHandleSet& requestSet, 00297 DtFederateHandle fed); 00298 00300 00301 00302 virtual void addPendingConfirm(const DtAttributeHandleSet& attrs, 00303 DtFederateHandle fed); 00304 virtual void removePendingConfirm(const DtAttributeHandleSet& requestSet, 00305 DtFederateHandle fed); 00306 virtual void removePendingConfirm(const DtAttributeHandleSet& set); 00308 00309 00311 virtual void cancelDivest(const DtAttributeHandleSet& set); 00312 00314 virtual void cancelRemoteRequest( 00315 const DtAttributeHandleSet& requestSet, 00316 DtFederateHandle fed ); 00317 00319 virtual void cancelAllRemoteRequests( const DtAttributeHandleSet& requestSet ); 00320 00322 virtual void removeCanceledRequests(DtAttributeHandleSet const& requestSet); 00323 00325 virtual DtAttributeHandleSet canceledRequestSet() const; 00326 00329 virtual bool isRequestCanceled(DtAttributeHandle hand); 00330 00332 virtual int requestCount() const; 00333 00335 virtual DtAttributeHandleSet const& requestedAttributes() const; 00336 00338 virtual int confirmCount() const; 00339 00341 virtual DtAttributeHandleSet const& pendingConfirmAttributes() const; 00342 00345 virtual DtFederateHandle pendingRemoteRequest( 00346 DtAttributeHandle hand); 00347 00350 virtual DtFederateHandle pendingConfirm(DtAttributeHandle hand) const; 00351 00359 virtual DtFederateHandle releaseRequested( 00360 const DtAttributeHandleSet& inSet, 00361 DtAttributeHandleSet* releasedSet, 00362 bool keepForConfirm); 00363 00370 virtual DtFederateHandle releaseConfirm( 00371 const DtAttributeHandleSet& inSet, 00372 DtAttributeHandleSet* releasedSet); 00373 00375 virtual DtAttributeHandleSet requestedByFed(DtFederateHandle fed, 00376 bool includePendingConfirm=false); 00377 00379 virtual DtAttributeHandleSet pendingConfirmByFed( DtFederateHandle fed ) const; 00380 00382 virtual DtFederateHandle unavailablePendingRequests( DtAttributeHandleSet* invalidatedSet ); 00383 00384 00386 00387 00388 virtual bool pendingUncondRequest(DtAttributeHandle hand); 00389 virtual bool pendingRequestIfAvail(DtAttributeHandle hand); 00391 00393 virtual void releaseAttrs(const DtAttributeHandleSet& releaseSet); 00394 00396 virtual void takeAttrs(const DtAttributeHandleSet& takeSet); 00397 00399 virtual bool okToReceive(DtHandle attrHandle, float tolerance); 00400 00402 virtual unsigned int computeAttrOffset(DtHandle attrHandle); 00403 00406 virtual const DtAttributeHandleSet& filterOwned( 00407 const DtAttributeHandleSet& inSet) const; 00408 00411 virtual int expectedCount( 00412 const DtAhvps& inSet, 00413 DtHandle regSetHandle) const; 00414 00417 virtual void selectExpected( 00418 DtAhvps& outSet, 00419 const DtAhvps& inSet, 00420 DtHandle regSetHandle) const; 00421 00424 virtual void removeUnexpected( 00425 DtAhvps& attrSet, 00426 DtHandle regSetHandle) const; 00427 00430 virtual int isOfActualClass(DtAttributeHandle handle) const; 00431 00434 virtual int isOfKnownClass(DtAttributeHandle handle) const; 00435 00437 virtual int expecting(DtAttributeHandle handle, 00438 DtHandle regSetHandle) const; 00439 00441 virtual const DtAttributeHandleSet& lrcManagedAttrs(); 00442 00444 virtual const DtAttributeHandleSet& ownedAttrs(); 00445 00447 virtual const DtAttributeHandleSet& rtiOwnedAttrs(); 00448 00450 virtual const DtAttributeHandleSet& divestingAttrs(); 00451 00453 virtual const DtAttributeHandleSet& divestedAttrs(); 00454 00456 virtual const DtAttributeHandleSet& uncondRequestedAttrs(); 00457 00459 virtual const DtAttributeHandleSet& ifAvailRequestedAttrs(); 00460 00462 virtual int inScope(DtAttributeHandle handle) const; 00463 00465 virtual const DtAttributeHandleSet& inScopeAttrs(); 00466 00468 virtual bool inScope() const; 00469 00471 virtual void addToScope(DtAttributeHandle handle); 00472 00474 virtual void addToScope(const DtAttributeHandleSet& attrs); 00475 00477 virtual void removeFromScope(DtAttributeHandle handle); 00478 00480 virtual void removeFromScope(const DtAttributeHandleSet& attrs); 00481 00483 00484 virtual void remoteSubscribe(DtFederateHandle fedHandle, 00485 const DtAttributeHandleSet& attrs); 00486 virtual void remoteSubscribe(DtFederateHandle fedHandle, 00487 DtAttributeHandle attributeHandle); 00489 00491 00492 virtual void remotePassiveSubscribe(DtFederateHandle fedHandle, 00493 DtAttributeHandle attrHandle); 00494 virtual void remotePassiveSubscribe(DtFederateHandle fedHandle, 00495 const DtAttributeHandleSet& attrs); 00497 00499 00500 virtual void remoteUnsubscribe(DtFederateHandle fedHandle, 00501 DtAttributeHandle attrHandle); 00502 virtual void remoteUnsubscribe(DtFederateHandle fedHandle, 00503 const DtAttributeHandleSet& attrs); 00504 virtual void remoteUnsubscribe(DtFederateHandle fedHandle); 00506 00508 virtual void acquireRemoteSubscriptions(const DtAttributeHandleSet& attrs, 00509 DtFomClassMgr* fom); 00510 00511 #ifdef DDM 00512 00514 00515 virtual void remoteSubscribeRegion( DtFederateHandle fedHandle, 00516 DtHandle regionSetHandle, 00517 DtAttributeHandle handle ); 00518 virtual void remoteSubscribeRegion( DtFederateHandle fedHandle, 00519 DtHandle regionSetHandle, 00520 const DtAttributeHandleSet& attrs ); 00522 00524 00525 virtual void remoteUnsubscribeRegion( DtFederateHandle fedHandle, 00526 DtHandle regionSetHandle, 00527 DtAttributeHandle attrHandle ); 00528 virtual void remoteUnsubscribeRegion( DtFederateHandle fedHandle, 00529 DtHandle regionSetHandle, 00530 const DtAttributeHandleSet& attrs ); 00531 virtual void remoteUnsubscribeRegion( DtFederateHandle fedHandle, 00532 DtHandle regionSetHandle); 00534 00535 #endif 00536 00538 00539 virtual DtBitMask getDestinations() const; 00540 virtual DtBitMask getDestinations( const DtAttributeHandleSet& attrs ) const; 00541 virtual DtBitMask getDestinations( const DtAhvps& attrs ) const; 00543 00545 virtual void overrideDestinations(DtBitMask const& mask); 00546 00548 virtual void setAllDestinations(); 00549 00551 virtual void divestRemoteSubscriptions(const DtAttributeHandleSet& attrs); 00552 00554 virtual bool isUpdateOn(DtAttributeHandle handle) const; 00555 00557 virtual DtAttributeHandleSet updateOnAttrs() const; 00558 00560 virtual DtAttributeHandleSet updateOffAttrs() const; 00561 00563 virtual bool isUpdateOn() const; 00564 00566 00567 virtual void turnUpdateOn(DtAttributeHandle handle); 00568 virtual void turnUpdateOn(const DtAttributeHandleSet& attrs); 00570 00572 00573 virtual void turnUpdateOff(DtAttributeHandle handle); 00574 virtual void turnUpdateOff(const DtAttributeHandleSet& attrs); 00576 00578 virtual MAKRti::DtTransportType attrTransport( 00579 DtAttributeHandle theHandle); 00580 00582 virtual MAKRti::DtOrderType attrOrder( 00583 DtAttributeHandle theHandle); 00584 00586 virtual void setAttrTransport( 00587 DtAttributeHandle theHandle, MAKRti::DtTransportType transport); 00588 00590 virtual void setAttrOrder( 00591 DtAttributeHandle theHandle, MAKRti::DtOrderType order); 00592 00594 #ifdef DDM 00595 00596 virtual void setRegionSet(DtAttributeHandle attrHandle, 00597 DtPubRegionSet* regionSet); 00598 virtual DtPubRegionSet* regionSet(DtAttributeHandle attrHandle); 00599 #endif 00600 virtual DtHandle regionSetHandle(DtAttributeHandle attrHandle); 00602 00605 virtual bool attrHasDimensions(DtAttributeHandle attrHandle) const; 00606 00608 00609 virtual unsigned int encodedLength() const; 00610 virtual void encode(const char *buff); 00612 00615 virtual bool decode(const char *buff, DtFomClassMgr* fom); 00616 00618 void setTimeToUseDestinations(MAKRti::DtTime timeVal); 00619 00621 MAKRti::DtTime timeToUseDestinations() const; 00622 00623 #ifdef DtIFSPEC1516E 00624 00625 double getUpdateRate( DtAttributeHandle attrHandle ) const; 00626 #endif 00627 00628 public: 00629 00632 static void setUseDiscoveredClass(bool yesNo); 00633 00634 protected: 00635 00637 inline DtRtiObject* self() const; 00638 00640 virtual void addRemoteSubscribe(DtFederateHandle fedHandle, 00641 DtAttributeHandle attrHandle); 00642 00644 virtual void removeRemoteSubscribe(DtFederateHandle fedHandle, 00645 DtAttributeHandle attrHandle); 00646 00647 protected: 00648 00650 DtObjectInstanceHandle myId; 00651 00653 DtObjectClassHandle myActualHandle; 00654 00656 DtObjectClassHandle myKnownHandle; 00657 00659 char* myObjName; 00660 00662 DtAttributeHandleSet myOwnedSet; 00663 00665 DtAttributeHandleSet myOutHandleSet; 00666 00668 bool myIsKnown; 00669 00671 DtFederateHandle myOwnerHandle; 00672 00674 bool myHasBeenUpdated; 00675 00677 bool myHasBeenReflected; 00678 00680 DtUpdateType myUpdateType; 00681 00683 DtAttributeHandleSet myLrcManagedSet; 00684 00686 DtAttributeHandleSet myUnownedSet; 00687 00690 DtAttributeHandleSet myDivestedSet; 00691 00693 DtAttributeHandleSet myRtiOwnedSet; 00694 00697 DtAttributeHandleSet myPendingRequestSet; 00698 DtAttributeHandleSet myPendingReqIfAvailSet; 00699 00702 DtAttributeHandleSet myDivestingSet; 00703 00705 DtRequestDatabase myRemoteReqDb; 00706 00708 DtObjectClassInfo* myActualClass; 00709 00711 DtObjectClassInfo* myKnownClass; 00712 00714 DtAttributeHandleSet myInScopeAttrs; 00715 00717 DtAttributeHandleSet myUpdateOnAttrs; 00718 00721 MAKRti::DtHashlist myDiscoveredClass; 00722 00724 DtBitMask* myOverideDestinationsMask; 00725 00727 DtObjectAttrInfo* myAttrs; 00728 00730 unsigned myNumAttrs; 00731 00735 MAKRti::DtTime myTimeToUseDestinations; 00736 00737 protected: 00739 static bool theUseDiscoveredClass; 00740 00742 static DtEmptyRtiObjectCreator theEmptyCreator; 00744 static DtRegisteredRtiObjectCreator theRegisteredCreator; 00746 static DtDiscoveredRtiObjectCreator theDiscoveredCreator; 00747 }; 00748 00749 #endif