9 #ifndef DtHlaStateEncoder_H_
10 #define DtHlaStateEncoder_H_
49 typedef void (*DtAttributeEncoder)(
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();
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()); \