00001
00002
00003
00004
00005
00008
00009 #ifndef hlaMessageFactory_H_
00010 #define hlaMessageFactory_H_
00011
00012 #if DtHLA
00013
00014 #include "lgrSim.h"
00015 #include "hlaTimeStampedAttr.h"
00016 #include "lgrHlaAttribute.h"
00017 #include "lgrHlaNetStructures.h"
00018 #include "subscriptionListFile.h"
00019
00020 #include <list>
00021 #include <utility>
00022 #include <vlutil/vlNetTypes.h>
00023
00024 #include <vl/rtiCompatibility.h>
00025 #include <vl/hlaObj.h>
00026
00027 namespace MAKLogger
00028 {
00029
00030 class DtPacket;
00031 class DtAbsoluteTime;
00032
00033 #ifdef DtHLA_1516
00034
00035 typedef DtString DtRegionID;
00036 #else
00037 typedef RTI::RegionToken DtRegionID;
00038 #endif
00039
00040 typedef DtSubscriptionListFile::DimensionDesc DtDimensionDesc;
00041 typedef DtSubscriptionListFile::ExtentDesc DtExtentDesc;
00042 typedef DtSubscriptionListFile::RegionDesc DtRegionDesc;
00043 typedef std::set<DtRegionDesc> DtRegionDescSet;
00044 typedef std::set<DtDimensionDesc> DtDimensionDescSet;
00045 typedef std::set<DtExtentDesc> DtExtentDescSet;
00046 typedef std::set<DtRegionID> DtRegionIDSet;
00047 typedef std::map<DtRegionID,DtDDMRegionSP> DtIDRegionMap;
00048
00051 class DT_DLL_LGRSIM DtLgrHlaMessageFactory
00052 {
00053 public:
00055 static DtLgrHlaHandle decodeObjectHandle(const DtPacket* packet);
00056
00058 static void setObjectHandle(DtPacket* packet,DtLgrHlaHandle handle);
00059
00061 static DtLgrHlaHandle decodeObjectClassHandle(const DtPacket* packet);
00062
00064 static void decodeRegionID( const DtNetDDMRegionHeader *regionHeader, DtRegionID& regionID, unsigned int index );
00065
00068 static bool decodeInteractionRegionID( const DtPacket *packet, DtRegionID& regionID, unsigned int index = 0);
00069
00072 static bool decodeObjectRegionID( const DtPacket *packet, DtRegionID& regionID, unsigned int index = 0 );
00073
00075 static void decodeRegionIdSet( const DtNetDDMRegionHeader *regionHeader, unsigned int numRegions, DtRegionIDSet& regionIDSet );
00076
00079 static unsigned int decodeObjectRegionIdSet( const DtPacket *packet, DtRegionIDSet& regionIDSet );
00080
00083 static unsigned int decodeInteractionRegionIdSet( const DtPacket *packet, DtRegionIDSet& regionIDSet );
00084
00086 static void setObjectClassHandle( DtPacket* packet, DtLgrHlaHandle handle);
00087
00089 static const char* decodeObjectName(const DtPacket* packet,int& length);
00090
00092 static const char* decodeObjectTag(const DtPacket* packet,int& length);
00093
00095 static const char* decodeInteractionTag(const DtPacket* packet,int& length);
00096
00097 static DtLgrHlaHandle decodeInteractionClassHandle(const DtPacket* packet);
00098
00099 static void setInteractionClassHandle( DtPacket* packet,DtLgrHlaHandle handle);
00100
00102 static DtPacket* encodeUpdate( const DtAbsoluteTime& time,
00103 DtLgrHlaHandle objectHandle,
00104 DtLgrHlaHandle classHandle,
00105 const DtLgrHandleValueReferenceMap& referenceMap,
00106 const DtString& objectName,
00107 const DtLgrValueReference& tag );
00108
00110 static DtPacket* encodeUpdate( const DtAbsoluteTime& time,
00111 DtLgrHlaHandle objectHandle,
00112 DtLgrHlaHandle classHandle,
00113 const DtLgrHandleValueReferenceMap& referenceMap,
00114 const DtString& objectName,
00115 const DtLgrValueReference& tag,
00116 const DtRegionDescSet& regionDescSet );
00117
00119 static DtPacket* encodeUpdates(const DtAbsoluteTime& time,
00120 const DtTimedHandleValueMapList& outputList, DtLgrHlaHandle objectHandle,
00121 DtLgrHlaHandle classHandle, const DtString& objectName);
00122
00123
00124
00126 static DtTimedHandleValueMapList* decodeUpdates(const DtPacket* packet);
00127
00128 static DtPacket* encodeRemoval(DtAbsoluteTime time,DtLgrHlaHandle objectId,
00129 DtLgrHlaHandle classHandle, DtString name,DtString tag);
00130
00133 static size_t calculateInteractionSize(
00134 const DtLgrHandleValueReferenceMap& parameters,
00135 const DtLgrValueReference& tag);
00136
00139 static size_t calculateInteractionSize(
00140 const DtLgrHandleValueReferenceMap& parameters,
00141 const DtLgrValueReference& tag,
00142 const DtRegionDescSet& regionDescSet
00143 );
00144
00147 static void encodeInteraction(DtPacket&,
00148 DtLgrHlaHandle classHandle,
00149 const DtLgrHandleValueReferenceMap& parameters,
00150 const DtLgrValueReference& tag
00151 );
00152
00156 static void encodeInteraction(DtPacket&,
00157 DtLgrHlaHandle classHandle,
00158 const DtLgrHandleValueReferenceMap& parameters,
00159 const DtLgrValueReference& tag,
00160 const DtRegionDescSet& regionDescSet
00161 );
00162
00163 static DtLgrHandleValueMap* decodeParameterHandleValues(const DtPacket* packet);
00164 static DtLgrHandleValueReferenceMap* decodeParameterReferences(const DtPacket* packet);
00165
00166 static void decodeParameterHandles(const DtPacket* packet,std::vector<DtLgrHlaHandle>& handles);
00167 static void setParameterHandles(DtPacket* packet,const std::vector<DtLgrHlaHandle>& handles);
00168
00169 static DtLgrHandleValueMap* decodeAttributeHandleValues(const DtPacket* packet);
00170 static DtLgrHandleValueReferenceMap* decodeAttributeReferences(const DtPacket* packet);
00171
00172 static void decodeAttributeHandles(const DtPacket* packet,std::vector<DtLgrHlaHandle>& handles);
00173 static void setAttributeHandles(DtPacket* packet,const std::vector<DtLgrHlaHandle>& handles);
00174
00178 static DtDDMRegionSP decodeInteractionDDMRegion( const DtPacket *packet,
00179 const DtExerciseConn *exerciseConn, unsigned int index=0,
00180 DtIDRegionMap* regionCache=0, bool updateRegionExtents=false);
00181
00185 static DtDDMRegionSP decodeObjectDDMRegion( const DtPacket *packet,
00186 const DtExerciseConn *exerciseConn, unsigned int index=0,
00187 DtIDRegionMap* regionCache=0, bool updateRegionExtents=false);
00188
00193 static unsigned int decodeInteractionDDMRegionSet( const DtPacket *packet,
00194 const DtExerciseConn *exerciseConn, DtDDMRegionSet& regionSet,
00195 DtIDRegionMap* regionCache=0, bool updateRegionExtents=false );
00196
00201 static unsigned int decodeObjectDDMRegionSet( const DtPacket *packet,
00202 const DtExerciseConn *exerciseConn, DtDDMRegionSet& regionSet,
00203 DtIDRegionMap* regionCache=0, bool updateRegionExtents=false );
00204
00207 static unsigned int decodeInteractionDDMRegionDescSet( const DtPacket *packet,
00208 DtRegionDescSet& regionSet );
00209
00212 static unsigned int decodeObjectDDMRegionDescSet( const DtPacket *packet,
00213 DtRegionDescSet& regionSet );
00214
00215 protected:
00216
00217 #if DtHLA_1516
00218 static int bufferSizeOfMap(const RTI::AttributeHandleValueMap& map);
00219 static int bufferSizeOfMap(const RTI::ParameterHandleValueMap& map);
00220 #else
00221 static int bufferSizeOfSet(const RTI::ParameterHandleValuePairSet& set);
00222 static int bufferSizeOfSet(const RTI::AttributeHandleValuePairSet& set);
00223 #endif
00224 static int bufferSizeOfMap(const DtLgrHandleValueMap& map);
00225 static int bufferSizeOfMap(const DtLgrHandleValueReferenceMap& map);
00226
00227 static int bufferSizeOfRegionDimensionSet( const DtDimensionDescSet& set );
00228 static int bufferSizeOfRegionDescriptorSet( const DtRegionDescSet& set );
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00240 static void getRegionExtents(const char* data,
00241 DtExtentDescSet& extentSet, unsigned int numExtents, std::set<DtString>* dimensionNameSet=0);
00242
00245 static bool decodeDDMRegion( const DtNetDDMRegionHeader *regionHeader, DtRegionDesc& regionDesc);
00246
00248 static void updateRegion(DtDDMRegionSP region, DtExtentDescSet& extentSet);
00249
00254 static DtDDMRegionSP decodeAndCreateDDMRegion( const DtNetDDMRegionHeader *regionHeader,
00255 const DtExerciseConn *exerciseConn, DtIDRegionMap* regionCache=0, bool updateRegionExtents=false );
00256
00257 static bool readFromBufferToMap(DtLgrHandleValueMap& map,
00258 const void* buffer,unsigned int memorySize, int numItems);
00259
00260 static bool readFromBufferToMap(DtLgrHandleValueReferenceMap& map,
00261 const void* buffer,unsigned int memorySize, int numItems);
00262
00263 static bool readFromMapToBuffer(const DtLgrHandleValueMap& map,
00264 void* buffer,unsigned int memorySize);
00265
00266 static bool readFromMapToBuffer(const DtLgrHandleValueReferenceMap& map,
00267 void* buffer,unsigned int memorySize);
00268
00270
00272
00273 static bool readFromRegionSetToBuffer( const DtRegionDescSet& rset,
00274 void *buffer, unsigned int memorySize );
00275
00276 };
00277
00283
00289
00290
00302
00303 }
00304
00305 #endif
00306 #endif