![]() |
VR-Link API Documentation for HLA 1.3
|
00001 /********************************************************************* 00002 ** Copyright (c) 1992-2010 VT MAK 00003 ** All rights reserved. 00004 *********************************************************************/ 00005 00006 00009 00010 #ifndef DtInteractionEncoder_H_ 00011 #define DtInteractionEncoder_H_ 00012 00013 #if DtHLA 00014 00015 00016 #include <vlutil/vlMachineTypes.h> 00017 00018 #include "rtiNamespace.h" 00019 #include "rtiCompatibility.h" 00020 #include <map> 00021 00022 class DT_DLL_VL DtExerciseConn; 00023 class DT_DLL_VL DtInterClassDesc; 00024 class DT_DLL_VL DtVrlRtiAmbassador; 00025 00030 class DT_DLL_VL DtInteractionRep; 00031 00032 00037 class DT_DLL_VL DtInteractionEncoder 00038 { 00039 public: 00040 00042 DtInteractionEncoder(DtExerciseConn* exConn, 00043 DtInterClassDesc* classDesc); 00044 00046 virtual ~DtInteractionEncoder(); 00047 00049 DtInteractionEncoder(const DtInteractionEncoder& orig); 00050 00052 DtInteractionEncoder& operator=(const DtInteractionEncoder& orig); 00053 00055 typedef void (*DtParameterEncoder) 00056 (const DtInteractionRep& inter, 00057 RTI::ParameterHandleValuePairSet* avlist, 00058 RTI::ParameterHandle handle); 00059 00063 virtual DtParameterEncoder addEncoder(RTI::ParameterHandle hand, 00064 DtParameterEncoder func); 00065 00069 virtual DtParameterEncoder addEncoder(char* name, 00070 DtParameterEncoder proc); 00071 00073 virtual DtParameterEncoder encoder(RTI::ParameterHandle hand) ; 00074 00076 virtual void encode(const DtInteractionRep& inter, 00077 #if DtHLA_1516 00078 RTI::ParameterHandleValueMap &pvMap); 00079 #else 00080 RTI::ParameterHandleValuePairSet* pvList); 00081 #endif 00082 00084 virtual RTI::InteractionClassHandle interClassHandle(); 00085 00087 virtual DtInteractionEncoder* clone() const; 00088 00093 virtual DtInteractionEncoder* clone(DtInterClassDesc* interDesc) const; 00094 00095 protected: 00096 00097 DtExerciseConn* myExConn; 00098 DtInterClassDesc* myClassDesc; 00099 00100 #if DtHLA_1516 00101 RTI::RTIambassador* myRtiAmb; 00102 #else 00103 DtVrlRtiAmbassador* myRtiAmb; 00104 #endif 00105 00106 RTI::InteractionClassHandle myHandle; 00107 00109 std::map<RTI::ParameterHandle, DtParameterEncoder> myList; 00110 }; 00111 00112 inline RTI::InteractionClassHandle DtInteractionEncoder::interClassHandle() 00113 { 00114 return myHandle; 00115 } 00116 00117 inline DtInteractionEncoder::DtParameterEncoder 00118 DtInteractionEncoder::encoder(RTI::ParameterHandle hand) 00119 { 00120 return myList[hand]; 00121 }; 00122 00123 #define DtADD_PARAM_ENCODER(attrName) \ 00124 addEncoder((char *)#attrName, (DtParameterEncoder) encode##attrName) 00125 00126 #define DtDECLARE_PARAM_ENCODER(interClass, paramName) \ 00127 static void encode##paramName(const interClass& inter, \ 00128 RTI::ParameterHandleValuePairSet* params, \ 00129 RTI::ParameterHandle paramHandle) 00130 00131 #define DtDEFINE_SIMPLE_PARAM_ENCODER(encClass, interClass, \ 00132 paramName, netType, \ 00133 inspector) \ 00134 void encClass::encode##paramName(const interClass& inter, \ 00135 RTI::ParameterHandleValuePairSet* params, \ 00136 RTI::ParameterHandle paramHandle) \ 00137 { \ 00138 netType netVal; \ 00139 netVal = inter.inspector(); \ 00140 params->add(paramHandle, (char*) &netVal, sizeof(netType)); \ 00141 } 00142 00143 #define DtDEFINE_SIMPLE_GLOBAL_OBJECT_DESIGNATOR_PARAM_ENCODER( \ 00144 encClass, interClass, paramName, inspector) \ 00145 void encClass::encode##paramName(const interClass& inter, \ 00146 RTI::ParameterHandleValuePairSet* params, \ 00147 RTI::ParameterHandle paramHandle) \ 00148 { \ 00149 DtGlobalObjectDesignator netVal = inter.inspector(); \ 00150 params->add(paramHandle, (char*) netVal.string(), netVal.length()+1); \ 00151 } 00152 00153 00154 #endif 00155 #endif 00156