Go to the documentation of this file.00001
00002
00003
00004
00005
00008
00009 #ifndef baseFomDesc1516_H_
00010 #define baseFomDesc1516_H_
00011
00012 #if DtHLA & DtHLA_1516
00013
00014 #include "lgrSim.h"
00015 #include "lgrDynStrings.h"
00016 #include "lgrHlaAttribute.h"
00017 #include "multiKeyMap.h"
00018 #include "lgrVariableLengthData.h"
00019 #include "virtualConstructor.h"
00020 #include "leTypes.h"
00021 #include "lgrSimDriver.h"
00022
00023 class DtFom;
00024
00025 namespace MAKLogger
00026 {
00027 struct DtGenFomDesc
00028 {
00029 DtLeInt32 size;
00030 DtLeInt32 numObjClasses;
00031 DtLeInt32 bufObjClassesSz;
00032 DtLeInt32 numIntClasses;
00033 DtLeInt32 bufIntClassesSz;
00034 };
00035 const size_t DtGenFomDescSz = sizeof( DtGenFomDesc );
00036
00037 struct DtGenObjDesc
00038 {
00039 DtLeInt32 size;
00040 DtLeU32 handle;
00041 DtLeU32 flags;
00042 DtLeInt32 codeLen;
00043 DtLeInt32 ownNameOff;
00044 DtLeInt32 baseNameOff;
00045 DtLeInt32 numAttrs;
00046 DtLeInt32 attrsOff;
00047 };
00048 const size_t DtGenObjDescSz = sizeof( DtGenObjDesc );
00049
00050
00051 struct DtGenAttrDesc
00052 {
00053 DtLeU32 handle;
00054 DtLeU32 flags;
00055 DtLeInt32 size;
00056 DtLeInt32 codeLen;
00057 DtLeInt32 nameLen;
00058 DtLeInt32 nameOff;
00059 };
00060 const size_t DtGenAttrDescSz = sizeof( DtGenAttrDesc );
00061
00062
00063 struct DtSubscriptionMap
00064 {
00065 int size;
00066 int objSubsOnNum;
00067 int objSubsOnPos;
00068 int objSubsOffNum;
00069 int objSubsOffPos;
00070 int intSubsOnNum;
00071 int intSubsOnPos;
00072 int intSubsOffNum;
00073 int intSubsOffPos;
00074 };
00075 const size_t DtSubscriptionMapSz = sizeof( DtSubscriptionMap );
00076
00077 class DtLgrFom;
00078 class DtBaseObjClassDesc;
00079 class DtBaseInterClassDesc;
00080
00088 class DT_DLL_LGRSIM DtBaseFomDesc
00089 {
00090 public:
00091
00093 DT_VIRTUAL_CTR(DtBaseFomDesc,())
00094
00095
00096 DT_VIRTUAL_COPY_ASSIGN(DtBaseFomDesc)
00097
00098 virtual ~DtBaseFomDesc();
00099
00100 public:
00101
00102 virtual DtBaseObjClassDesc* addObjectClass(const DtBaseObjClassDesc&);
00103 virtual DtBaseInterClassDesc* addInteractionClass(const DtBaseInterClassDesc&);
00104
00105
00107 virtual int readFromFile( FILE* fp );
00108 virtual int readFromFile64( int fd );
00109
00111 virtual int writeToFile( FILE* fp ) const;
00112 virtual int writeToFile64( int fd ) const;
00113
00115 virtual int setFromSerialForm( const void* p );
00116
00118 virtual char* serialize( int* pSize = 0 ) const;
00119
00120 typedef std::vector<DtBaseObjClassDesc*>::iterator objectIterator;
00121 typedef std::vector<DtBaseObjClassDesc*>::const_iterator const_objectIterator;
00122
00123 typedef std::vector<DtBaseInterClassDesc*>::iterator interactionIterator;
00124 typedef std::vector<DtBaseInterClassDesc*>::const_iterator const_interactionIterator;
00125
00127
00128 objectIterator obj_begin();
00129 const_objectIterator obj_begin() const;
00131
00133
00134 objectIterator obj_end();
00135 const_objectIterator obj_end() const;
00137
00139
00140 interactionIterator inter_begin();
00141 const_interactionIterator inter_begin() const;
00143
00145
00146 interactionIterator inter_end();
00147 const_interactionIterator inter_end() const;
00149
00151
00152 virtual DtBaseObjClassDesc* objDesc( unsigned int hand );
00153 virtual const DtBaseObjClassDesc* objDesc( unsigned int hand ) const;
00155
00157
00158 virtual DtBaseObjClassDesc* objDesc( const DtString& _name );
00159 virtual const DtBaseObjClassDesc* objDesc( const DtString& _name ) const;
00161
00163
00164 virtual DtBaseInterClassDesc* interDesc( unsigned int hand );
00165 virtual const DtBaseInterClassDesc* interDesc( unsigned int hand ) const;
00167
00169
00170 virtual DtBaseInterClassDesc* interDesc( const DtString& _name );
00171 virtual const DtBaseInterClassDesc* interDesc( const DtString& _name ) const;
00173
00175 inline int objectClassCount() const;
00176
00178 inline int interactionClassCount() const;
00179
00181 inline int count() const;
00182
00184 virtual bool equivalent( const DtBaseFomDesc& other ) const;
00185
00187 virtual bool identical( const DtBaseFomDesc& other ) const;
00188
00190 virtual void setFilterByClass( const DtSubscriptionMap* map );
00191
00193 virtual void setFilterAllObjectClasses();
00194
00196 virtual void setFilterNoObjectClasses();
00197
00199 virtual void setFilterAllInteractionClasses();
00200
00202 virtual void setFilterNoInteractionClasses();
00203
00205 virtual void empty();
00206
00208
00209
00210
00211
00212 virtual void initObjClasses();
00213 virtual void initIntClasses();
00215
00218 virtual void setObjectClassHeartbeatTime(const DtString& className, double time, bool includeSubclasses = false);
00219
00223 virtual double objectClassHeartbeatTime(const DtString& className, bool* isSet=0) const;
00224
00227 virtual bool objectClassHeartbeatInheritable(const DtString& className) const;
00228
00229 protected:
00230
00232 bool processCommand(const char*command,char* tkn,const char* sep);
00233
00235 virtual void deleteObjClasses();
00236
00238 virtual void deleteIntClasses();
00239
00241 void resetAll();
00242
00244 void initFromSource( const DtBaseFomDesc& src );
00245
00247 int unserialize( const char* bfr );
00248
00249 protected:
00250
00251 typedef DtMultiKeyMap<DtString,DtLgrHlaHandle,DtBaseObjClassDesc*> ObjectMap;
00252 typedef DtMultiKeyMap<DtString,DtLgrHlaHandle,DtBaseInterClassDesc*> InteractionMap;
00253
00254 ObjectMap myObjectLookupMap;
00255 InteractionMap myInteractionLookupMap;
00256
00257 std::vector<DtBaseObjClassDesc*> myObjectClasses;
00258 std::vector<DtBaseInterClassDesc*> myInteractionClasses;
00259 std::map<DtString, DtLgrSimDriver::HeartbeatTimeRecord> myHeartbeatTimes;
00260
00261 protected:
00262 static int theHashSize;
00263 };
00264
00265
00266 inline int DtBaseFomDesc::objectClassCount() const
00267 {
00268 return (int)myObjectClasses.size();
00269 }
00270
00271 inline int DtBaseFomDesc::interactionClassCount() const
00272 {
00273 return (int)myInteractionClasses.size();
00274 }
00275
00276
00277 inline int DtBaseFomDesc::count() const
00278 {
00279 return ( objectClassCount() + interactionClassCount() );
00280 }
00281
00282
00283 }
00284
00285 #endif //! DtHLA
00286 #endif //! DtBaseFomDesc_H_