VR-Link API Documentation for HLA 1.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
baseEntityDecoder.h
Go to the documentation of this file.
1 /*********************************************************************
2 ** Copyright (c) 1992-2010 VT MAK
3 ** All rights reserved.
4 *********************************************************************/
5 
6 
7 #ifndef DtBaseEntityDecoder_H_
8 #define DtBaseEntityDecoder_H_
9 
10 #if DtHLA
11 
12 #include "hlaStateDecoder.h"
13 
17 
20 
23 #define DtDECLARE_ENTITY_ATTR_DECODER(attrName) \
24  DtDECLARE_ATTR_DECODER(DtEntityStateRepository, attrName)
25 
28 #define DtDECLARE_AGGREGATE_ATTR_DECODER(attrName) \
29  DtDECLARE_ATTR_DECODER(DtAggregateStateRepository, attrName)
30 
33 #define DtDECLARE_BASE_ENTITY_ATTR_DECODER(attrName) \
34  DtDECLARE_ATTR_DECODER(DtBaseEntityStateRepository, attrName)
35 
36 
42 {
43 public:
44 
47  DtExerciseConn* exConn,
48  DtObjClassDesc* classDesc);
49 
51  virtual ~DtBaseEntityDecoder();
52 
55 
58 
60  virtual DtHlaStateDecoder* clone() const;
61 
66  virtual DtHlaStateDecoder* clone(DtObjClassDesc* classDesc) const;
67 
68 public:
69 
71  static DtHlaStateDecoder* create(
72  DtExerciseConn* exConn,
73  DtObjClassDesc* classDesc);
74 
75 protected:
76 
80  void addMyDecoders();
81 
84  virtual void decode(const DtStateMsg& msg,
85  DtStateRepository* stateRep) const;
86 
88 
91  DtDECLARE_BASE_ENTITY_ATTR_DECODER(RelativeSpatial);
93 
95  DtDECLARE_BASE_ENTITY_ATTR_DECODER(IsPartOf_RPR_20014);
96 
98  DtDECLARE_BASE_ENTITY_ATTR_DECODER(AccelerationVector);
99  DtDECLARE_BASE_ENTITY_ATTR_DECODER(AngularVelocityVector);
103  DtDECLARE_BASE_ENTITY_ATTR_DECODER(VelocityVector);
104 
109 
111  DtDECLARE_BASE_ENTITY_ATTR_DECODER(DeadReckoningAlgorithm);
112  DtDECLARE_BASE_ENTITY_ATTR_DECODER(WorldLocation);
113  DtDECLARE_BASE_ENTITY_ATTR_DECODER(EntityIdentifier);
114 };
115 
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)
126 
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))
131 
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, \
143  int index) \
144 { \
145  RTI::ULong length = attrs.getValueLength(index); \
146  if (length < sizeof(netType)) \
147  { \
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)); \
151  return; \
152  } \
153  else if (length > sizeof(netType) && DtNotifyLevel >= DtNlVerbose) \
154  { \
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)); \
158  return; \
159  } \
160  netType netVal; \
161  attrs.getValue(index, (char*) &netVal, length); \
162  stateRep->mutator(netVal, stateRep->timeForSets()); \
163 }
164 
165 #endif
166 #endif
167 
168 
169 

Document ID: Generated on Mon Jun 22 21:18:40 EDT 2020 from SVN revision 213785
Copyright © 2005-2018 MAK Technologies. All Rights Reserved (www.mak.com)