![]() |
MAK RTIspy API Documentation for HLA 1516
|
00001 /********************************************************************* 00002 ** Copyright (c) 1998 MaK Technologies, Inc. 00003 ** All rights reserved. 00004 *********************************************************************/ 00005 /********************************************************************* 00006 ** $RCSfile: objClassInfo.h,v $ $Revision: 1.74 $ $State: Exp $ 00007 *********************************************************************/ 00008 00011 00012 #ifndef DtObjectClassInfo_H_ 00013 #define DtObjectClassInfo_H_ 00014 00015 #include <vlutil/vlList.h> 00016 #include <vlutil/vlHashlist.h> 00017 #include <vlutil/vlFedTarget.h> 00018 #include <vlutil/vlInetAddr.h> 00019 #include "rtiMsConfig.h" 00020 #include "internalTypes.h" 00021 #include "attrHandSet.h" 00022 #include "attrInfo.h" 00023 #include "fomMgr.h" 00024 #include "fedTargetHelper.h" 00025 #include <vector> 00026 00027 class DtRtiSaveFile; 00028 class DtObjectMgr; 00029 class DtDataDistMgr; 00030 class DtObjectClassPacket; 00031 class DtBitMask; 00032 class DtSubRegionSet; 00033 class DtAttrInfo; 00034 00035 typedef std::vector<DtAttrInfo> DtAttrVector; 00036 00037 class DT_DLL_LRC DtObjectClassInfo 00038 { 00039 public: 00040 00042 DtObjectClassInfo(const char* name, DtObjectClassInfo* base, 00043 DtObjectClassHandle handle, DtSharingType sharing, 00044 const MAKRti::DtString& semantics); 00045 DtObjectClassInfo(const DtObjectClassInfo& orig); 00046 00048 virtual ~DtObjectClassInfo(); 00049 00051 DtObjectClassInfo& operator=(const DtObjectClassInfo& orig); 00052 00054 virtual void setFomType(MAKRti::DtFomType type); 00055 virtual MAKRti::DtFomType fomType() const; 00056 00058 virtual DtAttrInfo* addAttr(const char* attrName, 00059 MAKRti::DtTransportType transport, 00060 MAKRti::DtOrderType order, 00061 DtSharingType sharingType, 00062 DtFomUpdateType updateType, 00063 const MAKRti::DtString& updateCondition, 00064 DtOwnershipType ownership, 00065 const MAKRti::DtString& semantics, 00066 bool addSorted); 00067 00069 virtual DtAttrInfo* addAttr(const char* attrName, 00070 MAKRti::DtTransportType transport, 00071 MAKRti::DtOrderType order, 00072 DtSpaceHandle space, 00073 DtSharingType sharingType, 00074 DtFomUpdateType updateType, 00075 const MAKRti::DtString& updateCondition, 00076 DtOwnershipType ownership, 00077 const MAKRti::DtString& semantics, 00078 bool addSorted); 00079 00081 virtual const char* name() const; 00082 00084 virtual DtSharingType sharing() const; 00085 virtual void setSharing(DtSharingType share); 00086 00088 virtual const char* semantics() const; 00089 virtual void setSemantics(const MAKRti::DtString& sem); 00090 00094 virtual bool isName(const char* name); 00096 virtual bool isFullName(const char* name); 00097 00099 virtual DtObjectClassHandle handle() const; 00100 virtual void setHandle(DtObjectClassHandle handleValue); 00101 00103 virtual DtObjectClassInfo* baseClass() const; 00104 00106 virtual void setBaseClass(DtObjectClassInfo* base); 00107 00109 virtual int isOfClass(DtObjectClassHandle handle) const; 00110 00112 virtual MAKRti::DtList* subclasses(); 00113 00115 virtual void addSubclass(DtObjectClassInfo* sub); 00116 00118 virtual DtAttrInfo* attrByName(const char* theName); 00119 virtual DtAttrInfo* attrByHandle(const DtAttributeHandle theHandle); 00120 00122 virtual const DtAttrInfo* attrByName(const char* theName) const; 00123 virtual const DtAttrInfo* attrByHandle( 00124 const DtAttributeHandle theHandle) const; 00125 00127 virtual DtAttributeHandle attrHandle ( 00128 const char* theName) const; 00129 00131 virtual char* attrName ( 00132 DtAttributeHandle theHandle) const; 00133 00135 virtual MAKRti::DtTransportType attrTransport( 00136 DtAttributeHandle theHandle) const; 00137 00139 virtual MAKRti::DtOrderType attrOrder( 00140 DtAttributeHandle theHandle) const; 00141 00143 virtual DtSpaceHandle attrSpace( 00144 DtAttributeHandle theHandle) const; 00145 00147 virtual DtAttrVector const& attrs() const; 00148 00150 virtual int numAttributes() const; 00151 00153 virtual const DtAttributeHandleSet& allAttrs() const; 00154 00158 virtual void publish(DtAttributeHandleSet const & attributeList, 00159 DtObjectMgr* objMgr, bool isReplacement, bool isRepublish); 00160 virtual void unpublishAttributes(DtAttributeHandleSet const & attributeList, 00161 bool implicitUnpublishPrivilegeToDelete, DtObjectMgr* objMgr); 00162 00164 virtual bool published() const; 00165 00167 virtual void subscribe(const DtAttributeHandleSet& attributeList, 00168 bool isPassiveValue, 00169 #if defined(DtIFSPEC1516) || defined(DtIFSPEC1516E) 00171 bool isReplacement=false); 00172 #else 00173 00174 bool isReplacement=true); 00175 #endif 00176 virtual void unsubscribeClass(); 00177 virtual void unsubscribeAttributes( 00178 DtAttributeHandleSet const & attributeList); 00179 00181 virtual bool subscribed() const; 00182 00184 virtual bool isPassive() const; 00185 00188 virtual const bool isSubscribed( 00189 DtAttributeHandle attrHandle, DtRegionHandle regSetHandle) const; 00190 00191 00193 virtual DtAttributeHandleSet const & subscribedAttrs() const; 00194 virtual DtAttributeHandleSet const & subscribedActiveAttrs() const; 00195 virtual DtAttributeHandleSet const & subscribedPassiveAttrs() const; 00196 00200 virtual const DtAttributeHandleSet& subscribedAttrs( 00201 DtHandle regSetHandle) const; 00202 00204 virtual const DtAttributeHandleSet& publishedAttrs() const; 00205 00211 virtual const DtAttributeHandleSet& relevantAttrs() const; 00212 00215 virtual void remoteSubscribe( 00216 const DtAttributeHandleSet& attrs, 00217 DtFederateHandle fedHandle, 00218 bool isReplacement, 00219 DtObjectMgr* objMgr); 00220 00224 virtual void remotePassiveSubscribe(const DtAttributeHandleSet& attrs, 00225 DtFederateHandle fedHandle, bool replacement, DtObjectMgr* objMgr); 00226 00229 virtual void remoteUnsubscribeAttributes( 00230 DtFederateHandle fedHandle, 00231 const DtAttributeHandleSet& attrs, 00232 DtObjectMgr* objMgr); 00233 00235 virtual void removeSubscriptions( 00236 DtFederateHandle fedHandle, 00237 DtObjectMgr* objMgr); 00238 00240 virtual int numRemoteFederatesSubscribed(); 00241 00243 virtual bool remoteFederateIsSubscribed( 00244 DtFederateHandle fedHandle) const; 00245 00247 virtual DtAttributeHandleSet const* remoteSubscription( 00248 DtFederateHandle fedHandle) const; 00249 00251 virtual const MAKRti::DtHashList& subscribedFederates() const; 00252 00256 virtual bool relevant() const; 00257 00261 virtual bool relevant(DtAttributeHandle) const; 00262 00265 virtual const MAKRti::DtInetAddr& destinationAddress() const; 00266 virtual const MAKRti::DtInetAddr& destinationDevice() const; 00267 virtual void setDestination(MAKRti::DtInetAddr addr, 00268 MAKRti::DtInetAddr devAddr, bool inclusive, MAKRti::DtInetAddr oldAddr, 00269 MAKRti::DtInetAddr oldDevAddr); 00270 00274 virtual void setForcedDestinations(DtBitMask const& mask, 00275 MAKRti::DtTime delay); 00276 00279 virtual bool getForcedDestinations(DtBitMask &mask) const; 00280 00282 virtual void setSubscribedRate(float rate, const MAKRti::DtString& name, bool inclusive); 00283 virtual float maxSubscribedRate(); 00284 virtual const MAKRti::DtString& maxSubscribedRateName(); 00285 00286 #ifdef DDM 00287 00288 00289 virtual void remoteSubscribeWithRegion( 00290 const DtAttributeHandleSet& attrs, 00291 DtFederateHandle fedHandle, 00292 DtHandle regionSetHandle, 00293 DtObjectMgr* objMgr); 00294 00298 virtual DtHandle remoteRegionSubscription( 00299 DtFederateHandle fedHandle, DtAttributeHandle attrHand) const; 00300 00303 virtual void addMatchingPub(DtHandle regSetHandle, 00304 const DtAttributeHandleSet& attributeList); 00305 virtual void removeMatchingPub(DtHandle regSetHandle, 00306 const DtAttributeHandleSet& attributeList); 00307 00310 virtual void moveToOverlapPub(DtHandle regSetHandle, 00311 const DtAttributeHandleSet& attributes); 00312 virtual void moveToMatchingPub(DtHandle regSetHandle, 00313 const DtAttributeHandleSet& attributes); 00314 00316 virtual void addOverlapPub(DtHandle regSetHandle, 00317 const DtAttributeHandleSet& attributeList); 00318 00321 virtual void addMatchingSub(DtHandle regSetHandle, 00322 const DtAttributeHandleSet& attributeList); 00323 virtual void removeMatchingSub(DtHandle regSetHandle, 00324 const DtAttributeHandleSet& attributeList); 00325 00328 virtual void moveToOverlapSub(DtHandle regSetHandle); 00329 virtual void moveToMatchingSub(DtHandle regSetHandle, 00330 const DtAttributeHandleSet& attributes); 00331 00333 virtual void addOverlapSub(DtHandle regSetHandle, 00334 const DtAttributeHandleSet& attributeList); 00335 00337 virtual void subscribeByRegion(DtSubRegionSet const& subRegSet, 00338 const DtAttributeHandleSet& attributeList); 00339 virtual void unsubscribeByRegion(DtHandle regSetHandle, 00340 const DtAttributeHandleSet& attributeList); 00341 virtual const DtAttributeHandleSet* getSubscribeByRegion( 00342 DtHandle regSetHandle); 00343 00345 virtual void getSubscribeByRegionList(DtRegionHandleSet& subRegions) const; 00346 00349 virtual int subscribeOverlaps(DtHandle regSetHandle) const; 00350 00352 virtual int subscribedWithRegions() const; 00353 #endif 00354 00355 #ifdef DtMOM 00356 00357 virtual void incrementUpdateTally(); 00358 virtual void setUpdateTally(unsigned long value); 00359 virtual unsigned long updateTally(); 00360 virtual void incrementSentAttributesTally(MAKRti::DtTransportType transport, 00361 unsigned int numberAttrs); 00362 virtual void setSentAttributesTally(unsigned long value, 00363 MAKRti::DtTransportType transport); 00364 virtual unsigned long sentAttributesTally(MAKRti::DtTransportType transport); 00365 00366 virtual void incrementReflectTally(MAKRti::DtTransportType transport, 00367 unsigned int numberAttrs); 00368 virtual void setReflectTally(unsigned long value, 00369 MAKRti::DtTransportType transport); 00370 virtual unsigned long reflectTally(MAKRti::DtTransportType transport); 00371 virtual void setReflectAttributesTally(unsigned long value, 00372 MAKRti::DtTransportType transport); 00373 virtual unsigned long reflectAttributesTally(MAKRti::DtTransportType transport); 00374 #endif 00375 00377 virtual bool save(DtRtiSaveFile& file); 00378 virtual bool restore(DtObjectClassPacket* packet, DtRtiSaveFile& file); 00379 00381 virtual void print() const; 00382 00384 virtual bool sameAncestry(const DtObjectClassInfo*) const; 00385 bool operator==( const DtObjectClassInfo& other ) const; 00386 bool operator!=( const DtObjectClassInfo& other ) const; 00387 00389 bool isScaffolding() const; 00390 00391 public: 00392 00393 protected: 00394 00396 static bool sameObjectClass( const DtObjectClassInfo&, const DtObjectClassInfo& ); 00397 00399 static bool sameAttrs( const std::vector<DtAttrInfo>&, const std::vector<DtAttrInfo>& ); 00400 00403 virtual void throwIfNotDefined( 00404 const DtAttributeHandleSet& attributeList); 00405 00408 virtual void addRemoteSubscription(DtFederateHandle fedHandle, 00409 const DtAttributeHandleSet& attrs, bool isReplacement); 00410 virtual void deleteRemoteSubscription(DtFederateHandle fedHandle, 00411 DtAttributeHandleSet const & attrs); 00414 virtual void addRemoteSubscription(DtFederateHandle fedHandle, 00415 DtAttributeHandle attrHandle); 00416 00421 virtual void updateRelevance(const DtAttributeHandleSet& attrs, 00422 DtFederateHandle fedHandle, DtObjectMgr* objMgr); 00423 00424 #ifdef DDM 00425 00427 virtual void addSet(MAKRti::DtHashList& setList, DtHandle regSetHandle, 00428 const DtAttributeHandleSet& attributeList); 00429 virtual void removeSet(MAKRti::DtHashList& setList, DtHandle regSetHandle, 00430 const DtAttributeHandleSet& attributeList); 00431 virtual void moveSet(MAKRti::DtHashList& fromList, 00432 MAKRti::DtHashList& toList, DtHandle regSetHandle); 00433 virtual void moveSet(MAKRti::DtHashList& fromList, 00434 MAKRti::DtHashList& toList, DtHandle regSetHandle, 00435 const DtAttributeHandleSet& attrs); 00436 00440 virtual DtAttributeHandleSet& collectSubscribedAttributes(); 00441 00443 void emptyRegionLists(); 00444 00445 #endif 00446 00447 DtObjectClassInfo* self() const; 00448 00450 virtual DtAttrInfo* addAttrSorted( const char* attrName, 00451 MAKRti::DtTransportType transport, MAKRti::DtOrderType order, 00452 DtSharingType sharingType, 00453 DtFomUpdateType updateType, 00454 const MAKRti::DtString& updateCondition, 00455 DtOwnershipType ownership, 00456 const MAKRti::DtString& semantics ); 00457 virtual DtAttrInfo* addAttrUnsorted( const char* attrName, 00458 MAKRti::DtTransportType transport, MAKRti::DtOrderType order, 00459 DtSharingType sharingType, 00460 DtFomUpdateType updateType, 00461 const MAKRti::DtString& updateCondition, 00462 DtOwnershipType ownership, 00463 const MAKRti::DtString& semantics ); 00464 00466 virtual DtAttrInfo* addAttrUnsorted( const char* attrName, 00467 MAKRti::DtTransportType transport, MAKRti::DtOrderType order, 00468 DtSpaceHandle space, DtSharingType sharingType, 00469 DtFomUpdateType updateType, 00470 const MAKRti::DtString& updateCondition, 00471 DtOwnershipType ownership, 00472 const MAKRti::DtString& semantics ); 00473 virtual DtAttrInfo* addAttrSorted( const char* attrName, 00474 MAKRti::DtTransportType transport, MAKRti::DtOrderType order, 00475 DtSpaceHandle space, DtSharingType sharingType, 00476 DtFomUpdateType updateType, 00477 const MAKRti::DtString& updateCondition, 00478 DtOwnershipType ownership, 00479 const MAKRti::DtString& semantics ); 00480 00481 00482 00483 protected: 00484 00485 MAKRti::DtString myName; 00486 DtSharingType mySharing; 00487 MAKRti::DtString mySemantics; 00488 DtObjectClassHandle myHandle; 00489 MAKRti::DtFomType myFomType; 00490 bool mySubscribed; 00491 bool myPublished; 00492 bool myIsPassive; 00493 bool myExplicitPubPrivToDel; 00494 bool myExplicitUnpubPrivToDel; 00495 DtObjectClassInfo* myBase; 00496 MAKRti::DtList mySubclasses; 00497 00498 MAKRti::DtHashlist myRemoteSubscriptions; 00499 00500 00501 #ifdef DtMOM 00502 unsigned long myUpdateTally; 00503 unsigned long myBestEffortReflectTally; 00504 unsigned long myReliableReflectTally; 00505 unsigned long myBestEffortSentAttributesTally; 00506 unsigned long myBestEffortReflectAttributesTally; 00507 unsigned long myReliableSentAttributesTally; 00508 unsigned long myReliableReflectAttributesTally; 00509 #endif 00510 00512 bool myRegsOn; 00513 00514 DtAttrVector myAttrs; 00515 int myFirstAttribute; 00516 00517 00518 DtAttributeHandleSet myAttrSet; 00519 DtAttributeHandleSet myPublishedSet; 00520 DtAttributeHandleSet mySubscribedSet; 00521 DtAttributeHandleSet mySubscribedActiveSet; 00522 DtAttributeHandleSet mySubscribedPassiveSet; 00523 00528 DtAttributeHandleSet myRelevantSet; 00529 00530 MAKRti::DtInetAddr myAddr; 00531 MAKRti::DtInetAddr myDevAddr; 00532 00534 DtBitMask* myForceDestinationsMask; 00535 MAKRti::DtTime myForceDestinationsTime; 00536 MAKRti::DtClock myClock; 00537 00538 #ifdef DDM 00539 MAKRti::DtHashList mySubByRegion; 00540 MAKRti::DtHashList myMatchingPubByRegion; 00541 MAKRti::DtHashList myOverlapPubByRegion; 00542 MAKRti::DtHashList myMatchingSubByRegion; 00543 MAKRti::DtHashList myOverlapSubByRegion; 00544 DtAttributeHandleSet myCombinedSubAttrs; 00545 #endif 00546 00547 protected: 00548 00549 static const DtAttributeHandleSet theEmptySet; 00550 static const unsigned int theMaxAttrs; 00551 00552 }; 00553 00554 00557 class DtSubByRegionAttributes 00558 { 00559 public: 00560 00562 DtSubByRegionAttributes() : 00563 myRegionHandle(0), 00564 myRegionSetHasDimensions(false) 00565 {}; 00566 00567 DtSubByRegionAttributes( 00568 DtRegionHandle regionHandleValue, 00569 DtAttributeHandleSet const& attributesValue, 00570 bool regionSetHasDimensionsValue) : 00571 myRegionHandle(regionHandleValue), 00572 myAttributes(attributesValue), 00573 myRegionSetHasDimensions(regionSetHasDimensionsValue) 00574 {}; 00575 00576 DtSubByRegionAttributes(DtSubByRegionAttributes const& orig) : 00577 myRegionHandle(orig.myRegionHandle), 00578 myAttributes(orig.myAttributes), 00579 myRegionSetHasDimensions(orig.myRegionSetHasDimensions) 00580 {}; 00581 00583 virtual ~DtSubByRegionAttributes() 00584 {}; 00585 00587 DtSubByRegionAttributes& operator= (DtSubByRegionAttributes const& orig) 00588 { 00589 if (this == &orig) 00590 return *this; 00591 myRegionHandle = orig.myRegionHandle; 00592 myAttributes = orig.myAttributes; 00593 myRegionSetHasDimensions = orig.myRegionSetHasDimensions; 00594 return *this; 00595 }; 00596 00598 virtual DtRegionHandle regionHandle() const 00599 { return myRegionHandle; }; 00600 00602 virtual DtAttributeHandleSet const& attributes() const 00603 { return myAttributes; }; 00604 00606 virtual void addAttributes(DtAttributeHandleSet const& attrSet) 00607 { myAttributes = myAttributes.setUnion(attrSet); }; 00608 00610 virtual void removeAttributes(DtAttributeHandleSet const& attrSet) 00611 { myAttributes = myAttributes.removeSetIntersection(attrSet); }; 00612 00615 virtual bool regionSetHasDimensions() const 00616 { return myRegionSetHasDimensions; }; 00617 00618 protected: 00619 00620 DtRegionHandle myRegionHandle; 00621 DtAttributeHandleSet myAttributes; 00622 bool myRegionSetHasDimensions; 00623 }; 00624 00625 00626 00627 #endif 00628 00629