7 #ifndef DtBaseEntityDecoder_H_
8 #define DtBaseEntityDecoder_H_
23 #define DtDECLARE_ENTITY_ATTR_DECODER(attrName) \
24 DtDECLARE_ATTR_DECODER(DtEntityStateRepository, attrName)
28 #define DtDECLARE_AGGREGATE_ATTR_DECODER(attrName) \
29 DtDECLARE_ATTR_DECODER(DtAggregateStateRepository, attrName)
33 #define DtDECLARE_BASE_ENTITY_ATTR_DECODER(attrName) \
34 DtDECLARE_ATTR_DECODER(DtBaseEntityStateRepository, attrName)
41 class DT_DLL_VL DtBaseEntityDecoder :
public DtHlaStateDecoder
48 DtObjClassDesc* classDesc);
51 virtual ~DtBaseEntityDecoder();
54 DtBaseEntityDecoder(
const DtBaseEntityDecoder& orig);
57 DtBaseEntityDecoder& operator=(
const DtBaseEntityDecoder& orig);
60 virtual DtHlaStateDecoder* clone()
const;
66 virtual DtHlaStateDecoder* clone(DtObjClassDesc* classDesc)
const;
71 static DtHlaStateDecoder* create(
73 DtObjClassDesc* classDesc);
90 DtDECLARE_BASE_ENTITY_ATTR_DECODER(Spatial);
91 DtDECLARE_BASE_ENTITY_ATTR_DECODER(RelativeSpatial);
92 DtDECLARE_BASE_ENTITY_ATTR_DECODER(IsPartOf);
95 DtDECLARE_BASE_ENTITY_ATTR_DECODER(IsPartOf_RPR_20014);
98 DtDECLARE_BASE_ENTITY_ATTR_DECODER(AccelerationVector);
99 DtDECLARE_BASE_ENTITY_ATTR_DECODER(AngularVelocityVector);
100 DtDECLARE_BASE_ENTITY_ATTR_DECODER(EntityType);
101 DtDECLARE_BASE_ENTITY_ATTR_DECODER(IsFrozen);
102 DtDECLARE_BASE_ENTITY_ATTR_DECODER(Orientation);
103 DtDECLARE_BASE_ENTITY_ATTR_DECODER(VelocityVector);
106 DtDECLARE_BASE_ENTITY_ATTR_DECODER(DRAlgorithm);
107 DtDECLARE_BASE_ENTITY_ATTR_DECODER(Position);
108 DtDECLARE_BASE_ENTITY_ATTR_DECODER(EntityID);
111 DtDECLARE_BASE_ENTITY_ATTR_DECODER(DeadReckoningAlgorithm);
112 DtDECLARE_BASE_ENTITY_ATTR_DECODER(WorldLocation);
113 DtDECLARE_BASE_ENTITY_ATTR_DECODER(EntityIdentifier);
121 #define DtDEFINE_SIMPLE_BASE_ENTITY_ATTR_DECODER_WITH_CAST( \
122 attrName, netType, mutator, castExpr) \
123 DtDEFINE_SIMPLE_ATTR_DECODER_WITH_CAST( \
124 DtBaseEntityDecoder, DtBaseEntityStateRepository, \
125 attrName, netType, mutator, castExpr)
127 #define DtDEFINE_SIMPLE_BASE_ENTITY_ATTR_DECODER( \
128 attrName, netType, inspector) \
129 DtDEFINE_SIMPLE_BASE_ENTITY_ATTR_DECODER_WITH_CAST( \
130 attrName, netType, inspector, (netType))
138 #define DtDEFINE_SIMPLE_BASE_ENTITY_ATTR_DECODER_MUTATOR_WITH_TIME( \
139 attrName, netType, mutator) \
140 void DtBaseEntityDecoder::decode##attrName( \
141 DtBaseEntityStateRepository* stateRep, \
142 const RTI::AttributeHandleValuePairSet& attrs, \
145 RTI::ULong length = attrs.getValueLength(index); \
146 if (length < sizeof(netType)) \
148 DtWarn("Cannot decode attribute %s.\n" \
149 "Size of data (%d) is smaller than size of %s (%d).\n", \
150 #attrName, length, #netType, sizeof(netType)); \
153 else if (length > sizeof(netType) && DtNotifyLevel >= DtNlVerbose) \
155 DtVerbose("When decoding attribute %s,\n" \
156 "found size of data (%d) is larger than size of %s (%d).\n", \
157 #attrName, length, #netType, sizeof(netType)); \
161 attrs.getValue(index, (char*) &netVal, length); \
162 stateRep->mutator(netVal, stateRep->timeForSets()); \