Go to the documentation of this file.00001
00002
00003
00004
00005
00008
00009 #ifndef baseFomDesc13_H_
00010 #define baseFomDesc13_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 "lgrSimDriver.h"
00021
00022 #include "leTypes.h"
00023 #include <vector>
00024
00025 class DtFom;
00026
00027 namespace MAKLogger
00028 {
00029 struct DtGenFomDesc
00030 {
00031 DtLeInt32 size;
00032 DtLeInt32 numObjClasses;
00033 DtLeInt32 bufObjClassesSz;
00034 DtLeInt32 numIntClasses;
00035 DtLeInt32 bufIntClassesSz;
00036 };
00037 const size_t DtGenFomDescSz = sizeof( DtGenFomDesc );
00038
00039 struct DtGenObjDesc
00040 {
00041 DtLeInt32 size;
00042 DtLeU32 handle;
00043 DtLeU32 flags;
00044 DtLeInt32 ownNameOff;
00045 DtLeInt32 baseNameOff;
00046 DtLeInt32 numAttrs;
00047 DtLeInt32 attrsOff;
00048 };
00049 const size_t DtGenObjDescSz = sizeof( DtGenObjDesc );
00050
00051
00052 struct DtGenAttrDesc
00053 {
00054 DtLeU32 handle;
00055 DtLeU32 flags;
00056 DtLeInt32 size;
00057 char name[4];
00058 };
00059 const size_t DtGenAttrDescSz = sizeof( DtGenAttrDesc ) - 4;
00060
00061
00062 struct DtSubscriptionMap
00063 {
00064 int size;
00065 int objSubsOnNum;
00066 int objSubsOnPos;
00067 int objSubsOffNum;
00068 int objSubsOffPos;
00069 int intSubsOnNum;
00070 int intSubsOnPos;
00071 int intSubsOffNum;
00072 int intSubsOffPos;
00073 };
00074 const size_t DtSubscriptionMapSz = sizeof( DtSubscriptionMap );
00075
00076 class DtLgrFom;
00077 class DtBaseObjClassDesc;
00078 class DtBaseInterClassDesc;
00079
00087 class DT_DLL_LGRSIM DtBaseFomDesc
00088 {
00089 public:
00090
00092 DT_VIRTUAL_CTR(DtBaseFomDesc,())
00093
00094
00095 DT_VIRTUAL_COPY_ASSIGN(DtBaseFomDesc)
00096
00097 virtual ~DtBaseFomDesc();
00098
00099 public:
00100
00101 virtual DtBaseObjClassDesc* addObjectClass(const DtBaseObjClassDesc&);
00102 virtual DtBaseInterClassDesc* addInteractionClass(const DtBaseInterClassDesc&);
00103
00104
00106 virtual int readFromFile( FILE* fp );
00107 virtual int readFromFile64( int fd );
00108
00110 virtual int writeToFile( FILE* fp ) const;
00111 virtual int writeToFile64( int fd ) const;
00112
00114 virtual int setFromSerialForm( const void* p );
00115
00117 virtual char* serialize( int* pSize = 0 ) const;
00118
00119 typedef std::vector<DtBaseObjClassDesc*>::iterator objectIterator;
00120 typedef std::vector<DtBaseObjClassDesc*>::const_iterator const_objectIterator;
00121
00122 typedef std::vector<DtBaseInterClassDesc*>::iterator interactionIterator;
00123 typedef std::vector<DtBaseInterClassDesc*>::const_iterator const_interactionIterator;
00124
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
00185 virtual bool equivalent( const DtBaseFomDesc& other) const;
00186
00189 virtual bool identical( const DtBaseFomDesc& other) const;
00190
00192 virtual void setFilterByClass( const DtSubscriptionMap* map );
00193
00195 virtual void setFilterAllObjectClasses();
00196
00198 virtual void setFilterNoObjectClasses();
00199
00201 virtual void setFilterAllInteractionClasses();
00202
00204 virtual void setFilterNoInteractionClasses();
00205
00207 virtual void empty();
00208
00211 virtual void setObjectClassHeartbeatTime(const DtString& className, double time, bool includeSubclasses = false);
00212
00216 virtual double objectClassHeartbeatTime(const DtString& className, bool* isSet=0) const;
00217
00220 virtual bool objectClassHeartbeatInheritable(const DtString& className) const;
00221
00224 virtual void setObjectClassTimeoutTime(const DtString& className, double time, bool includeSubclasses = false);
00225
00229 virtual double objectClassTimeoutTime(const DtString& className, bool* isSet=0) const;
00230
00233 virtual bool objectClassTimeoutInheritable(const DtString& className) const;
00234
00236
00237
00238
00239
00240 virtual void initObjClasses();
00241 virtual void initIntClasses();
00243
00244 protected:
00245
00247 bool processCommand(const char*command,char* tkn,const char* sep);
00248
00250 virtual void deleteObjClasses();
00251
00253 virtual void deleteIntClasses();
00254
00256 void resetAll();
00257
00259 void initFromSource( const DtBaseFomDesc& src );
00260
00262 int unserialize( const char* bfr );
00263
00264 protected:
00265
00266 DtDynamicBuffer myDynBuf;
00267
00268 typedef DtMultiKeyMap<DtString,DtLgrHlaHandle,DtBaseObjClassDesc*> ObjectMap;
00269 typedef DtMultiKeyMap<DtString,DtLgrHlaHandle,DtBaseInterClassDesc*> InteractionMap;
00270
00271 ObjectMap myObjectLookupMap;
00272 InteractionMap myInteractionLookupMap;
00273
00274 std::vector<DtBaseObjClassDesc*> myObjectClasses;
00275 std::vector<DtBaseInterClassDesc*> myInteractionClasses;
00276 std::map<DtString, DtLgrSimDriver::HeartbeatTimeRecord> myHeartbeatTimes;
00277 std::map<DtString, DtLgrSimDriver::HeartbeatTimeRecord> myTimeoutTimes;
00278
00279 protected:
00280 static int theHashSize;
00281 };
00282
00283
00284 inline int DtBaseFomDesc::objectClassCount() const
00285 {
00286 return (int)myObjectClasses.size();
00287 }
00288
00289 inline int DtBaseFomDesc::interactionClassCount() const
00290 {
00291 return (int)myInteractionClasses.size();
00292 }
00293
00294
00295 inline int DtBaseFomDesc::count() const
00296 {
00297 return ( objectClassCount() + interactionClassCount() );
00298 }
00299
00300 }
00301
00302 #endif //! DtHLA & !DtHLA_1516
00303 #endif