CARMA C++
NetUnion.h
1 // $Id: NetUnion.h,v 1.4 2013/07/09 17:12:00 eml Exp $
2 
3 #ifndef SZA_UTIL_NETUNION_H
4 #define SZA_UTIL_NETUNION_H
5 
15 #include <map>
16 #include "carma/szautil/DataType.h"
17 
18 #include "carma/szautil/NetDat.h"
19 
20 namespace sza {
21  namespace util {
22 
23  class NetUnion : public NetDat {
24  public:
25 
26  static const unsigned NETUNION_UNKNOWN = 0;
27 
31  NetUnion();
32 
36  NetUnion(const NetUnion& netUnion);
37  NetUnion(NetUnion& netUnion);
38  void operator=(const NetUnion& netUnion);
39  void operator=(NetUnion& netUnion);
40 
44  virtual ~NetUnion();
45 
49  void addMember(unsigned id, NetDat* member=0, bool alloc=false);
50 
54  void addVar(unsigned id, sza::util::DataType::Type type,
55  void* vPtr, unsigned nEl, bool convert=false);
56 
57  // Method for vectors
58 
59  void addVar(unsigned id, sza::util::DataType::Type type,
60  void* vPtr, bool convert=false);
61 
65  void addCase(unsigned id);
66 
70  NetDat* const findMember(unsigned id);
71 
72  bool memberIsValid(unsigned id);
73 
77  NetDat* const getMember(unsigned id);
78 
82  virtual void setTo(unsigned id);
83 
87  unsigned getType();
88 
92  unsigned sizeOf(unsigned id);
93 
97  unsigned size();
98 
102  unsigned maxSize();
103 
107  virtual void deserialize(const std::vector<unsigned char>& bytes);
108  virtual void deserializeNativeOrder(const std::vector<unsigned char>& bytes);
109  void deserialize(const unsigned char* bytes, unsigned size);
110  void deserializeNativeOrder(const unsigned char* bytes, unsigned size);
111  void deserialize(const unsigned char* bytes);
112 
113  public:
114 
115  // A map of members contained in this class
116 
117  std::map<unsigned int, NetDat::Info> members_;
118 
119  // The member currently selected
120 
121  unsigned int id_;
122 
126  void checkSize(const std::vector<unsigned char>& bytes);
127 
131  void checkSize(const std::vector<unsigned char>& bytes, unsigned id);
132 
136  virtual void resize();
137 
141  void serialize();
142 
143  protected:
144 
145  void addVar(unsigned id, bool& val, bool convert=false);
146  void addVar(unsigned id, unsigned char& val, bool convert=false);
147  void addVar(unsigned id, char& val, bool convert=false);
148  void addVar(unsigned id, short& val, bool convert=false);
149  void addVar(unsigned id, unsigned short& val, bool convert=false);
150  void addVar(unsigned id, int& val, bool convert=false);
151  void addVar(unsigned id, unsigned int& val, bool convert=false);
152  void addVar(unsigned id, float& val, bool convert=false);
153  void addVar(unsigned id, double& val, bool convert=false);
154 
155  void addVar(unsigned id, bool* val, unsigned nEl, bool convert=false);
156  void addVar(unsigned id, unsigned char* val, unsigned nEl, bool convert=false);
157  void addVar(unsigned id, char* val, unsigned nEl, bool convert=false);
158  void addVar(unsigned id, short* val, unsigned nEl, bool convert=false);
159  void addVar(unsigned id, unsigned short* val, unsigned nEl, bool convert=false);
160  void addVar(unsigned id, int* val, unsigned nEl, bool convert=false);
161  void addVar(unsigned id, unsigned int* val, unsigned nEl, bool convert=false);
162  void addVar(unsigned id, float* val, unsigned nEl, bool convert=false);
163  void addVar(unsigned id, double* val, unsigned nEl, bool convert=false);
164 
165  void addVar(unsigned id, std::string& val, bool convert=false);
166  void addVar(unsigned id, std::vector<unsigned char>& val, bool convert=false);
167 
168  }; // End class NetUnion
169 
170  } // End namespace util
171 } // End namespace sza
172 
173 #define NETUNION_UCHAR(id, name) \
174 addVar(id, sza::util::DataType::UCHAR, (void*)&name, 1)
175 
176 #define NETUNION_UCHAR_ARR(id, name, nEl) \
177 addVar(id, sza::util::DataType::UCHAR, (void*)name, nEl)
178 
179 #define NETUNION_CHAR(id, name) \
180 addVar(id, sza::util::DataType::CHAR, (void*)&name, 1)
181 
182 #define NETUNION_CHAR_ARR(id, name, nEl) \
183 addVar(id, sza::util::DataType::CHAR, (void*)name, nEl)
184 
185 #define NETUNION_BOOL(id, name) \
186 addVar(id, sza::util::DataType::BOOL, (void*)&name, 1)
187 
188 #define NETUNION_BOOL_ARR(id, name, nEl) \
189 addVar(id, sza::util::DataType::BOOL, (void*)name, nEl)
190 
191 #define NETUNION_USHORT(id, name) \
192 addVar(id, sza::util::DataType::USHORT, (void*)&name, 1)
193 
194 #define NETUNION_USHORT_ARR(id, name, nEl) \
195 addVar(id, sza::util::DataType::USHORT, (void*)name, nEl)
196 
197 #define NETUNION_SHORT(id, name) \
198 addVar(id, sza::util::DataType::SHORT, (void*)&name, 1)
199 
200 #define NETUNION_SHORT_ARR(id, name, nEl) \
201 addVar(id, sza::util::DataType::SHORT, (void*)name, nEl)
202 
203 #define NETUNION_UINT(id, name) \
204 addVar(id, sza::util::DataType::UINT, (void*)&name, 1)
205 
206 #define NETUNION_UINT_ARR(id, name, nEl) \
207 addVar(id, sza::util::DataType::UINT, (void*)name, nEl)
208 
209 #define NETUNION_INT(id, name) \
210 addVar(id, sza::util::DataType::INT, (void*)&name, 1)
211 
212 #define NETUNION_INT_ARR(id, name, nEl) \
213 addVar(id, sza::util::DataType::INT, (void*)name, nEl)
214 
215 #define NETUNION_ULONG(id, name) \
216 addVar(id, sza::util::DataType::ULONG, (void*)&name, 1)
217 
218 #define NETUNION_ULONG_ARR(id, name, nEl) \
219 addVar(id, sza::util::DataType::ULONG, (void*)name, nEl)
220 
221 #define NETUNION_LONG(id, name) \
222 addVar(id, sza::util::DataType::LONG, (void*)&name, 1)
223 
224 #define NETUNION_LONG_ARR(id, name, nEl) \
225 addVar(id, sza::util::DataType::LONG, (void*)name, nEl)
226 
227 #define NETUNION_FLOAT(id, name) \
228 addVar(id, sza::util::DataType::FLOAT, (void*)&name, 1)
229 
230 #define NETUNION_FLOAT_ARR(id, name, nEl) \
231 addVar(id, sza::util::DataType::FLOAT, (void*)name, nEl)
232 
233 #define NETUNION_DOUBLE(id, name) \
234 addVar(id, sza::util::DataType::DOUBLE, (void*)&name, 1)
235 
236 #define NETUNION_DOUBLE_ARR(id, name, nEl) \
237 addVar(id, sza::util::DataType::DOUBLE, (void*)name, nEl)
238 
239 #define NETUNION_UCHAR_VEC(id, name) \
240 addVar(id, sza::util::DataType::UCHAR, (void*)&name)
241 
242 #endif // End #ifndef SZA_UTIL_NETUNION_H
Tagged: Tue Jun 22 22:32:16 UTC 2004.
Tagged: Wed Jul 6 13:41:09 PDT 2005.