9 #ifndef DtHlaStateEncoder_H_
10 #define DtHlaStateEncoder_H_
35 DtObjClassDesc* classDesc);
38 virtual ~DtHlaStateEncoder();
41 DtHlaStateEncoder(
const DtHlaStateEncoder& orig);
44 DtHlaStateEncoder& operator=(
const DtHlaStateEncoder& orig);
49 typedef void (*DtAttributeEncoder)(
51 RTI::AttributeHandleValuePairSet* avList,
52 RTI::AttributeHandle handle);
55 typedef bool (*DtAttributeChecker)(
64 DtAttributeEncoder addEncoder(RTI::AttributeHandle hand,
65 DtAttributeEncoder func);
66 DtAttributeEncoder removeEncoder(RTI::AttributeHandle hand);
74 DtAttributeEncoder addEncoder(
char* name,
75 DtAttributeEncoder func,
bool complain =
true);
76 DtAttributeEncoder removeEncoder(
char* name,
bool complain =
true);
83 DtAttributeChecker addChecker(RTI::AttributeHandle hand,
84 DtAttributeChecker func);
85 DtAttributeChecker removeChecker(RTI::AttributeHandle hand);
93 DtAttributeChecker addChecker(
char* name,
94 DtAttributeChecker func,
bool complain =
true);
95 DtAttributeChecker removeChecker(
char* name,
bool complain =
true);
98 virtual DtAttributeEncoder encoder(
const RTI::AttributeHandle &handle) ;
101 virtual DtAttributeChecker checker(
const RTI::AttributeHandle &handle) ;
112 const RTI::AttributeHandleSet& neededAttrs,
113 const RTI::AttributeHandleSet& includeThese,
117 virtual RTI::ObjectClassHandle objectClassHandle();
123 virtual DtHlaStateEncoder* clone(DtObjClassDesc* classDesc)
const;
126 virtual DtHlaStateEncoder* clone()
const;
145 DtObjClassDesc* myClassDesc;
146 RTI::ObjectClassHandle myHandle;
150 std::map<RTI::AttributeHandle,DtAttributeEncoder> myEncoderList;
151 std::map<RTI::AttributeHandle,DtAttributeChecker> myCheckerList;
156 std::map<RTI::AttributeHandle,bool> myReportedWarning;
159 inline RTI::ObjectClassHandle DtHlaStateEncoder::objectClassHandle()
164 inline DtHlaStateEncoder::DtAttributeEncoder
165 DtHlaStateEncoder::encoder(
const RTI::AttributeHandle &hand)
167 return myEncoderList[hand];
170 inline DtHlaStateEncoder::DtAttributeChecker
171 DtHlaStateEncoder::checker(
const RTI::AttributeHandle &hand)
173 return myCheckerList[hand];
178 #define DtADD_ATTR_ENCODER(attrName) \
179 addEncoder((char *)#attrName, (DtAttributeEncoder) encode##attrName)
182 #define DtADD_ATTR_ENCODER_QUIET(attrName) \
183 addEncoder((char *)#attrName, (DtAttributeEncoder) encode##attrName, false)
188 #define DtADD_ATTR_CHECKER(attrName) \
189 addChecker((char *)#attrName, (DtAttributeChecker) need##attrName)
192 #define DtADD_ATTR_CHECKER_QUIET(attrName) \
193 addChecker((char *)#attrName, (DtAttributeChecker) need##attrName, false)
198 #define DtDECLARE_ATTR_ENCODER(stateRepClass, attrName) \
199 static void encode##attrName(const stateRepClass& rep, \
200 RTI::AttributeHandleValuePairSet* attrs, \
201 RTI::AttributeHandle attrHandle)
205 #define DtDECLARE_ATTR_CHECKER(stateRepClass, attrName) \
206 static bool need##attrName(const stateRepClass& stateRep, \
207 const stateRepClass& asSeenByRemote)
214 #define DtDEFINE_SIMPLE_ATTR_ENCODER( \
215 encClass, stateRepClass, attrName, netType, inspector) \
216 void encClass::encode##attrName(const stateRepClass& rep, \
217 RTI::AttributeHandleValuePairSet* attrs, \
218 RTI::AttributeHandle attrHandle) \
221 netVal = rep.inspector(); \
222 attrs->add(attrHandle, (char*) &netVal, sizeof(netType)); \
225 #define DtDEFINE_SIMPLE_GLOBAL_OBJECT_DESIGNATOR_ATTR_ENCODER( \
226 encClass, stateRepClass, attrName, inspector) \
227 void encClass::encode##attrName(const stateRepClass& rep, \
228 RTI::AttributeHandleValuePairSet* attrs, \
229 RTI::AttributeHandle attrHandle) \
231 DtGlobalObjectDesignator netVal = rep.inspector(); \
232 attrs->add(attrHandle, (char*) netVal.string(), netVal.length()+1); \
240 #define DtDEFINE_SIMPLE_ATTR_CHECKER( \
241 encClass, stateRepClass, attrName, inspector) \
242 bool encClass::need##attrName(const stateRepClass& stateRep, \
243 const stateRepClass& asSeenByRemote) \
245 return (bool) !(stateRep.inspector() == asSeenByRemote.inspector()); \