CARMA C++
NetStruct.h
1 // $Id: NetStruct.h,v 1.2 2011/06/08 18:40:13 eml Exp $
2 
3 #ifndef SZA_UTIL_NETSTRUCT_H
4 #define SZA_UTIL_NETSTRUCT_H
5 
15 #include "carma/szautil/NetDat.h"
16 #include "carma/szautil/DataType.h"
17 
18 namespace sza {
19  namespace util {
20 
21  class NetStruct : public NetDat {
22  public:
23 
27  NetStruct();
28 
32  NetStruct(const NetStruct& netStruct);
33  NetStruct(NetStruct& netStruct);
34  void operator=(const NetStruct& netStruct);
35  void operator=(NetStruct& netStruct);
36 
40  virtual ~NetStruct();
41 
45  virtual void addMember(NetDat* netDat, bool alloc=false);
46 
47  void addVar(bool& val);
48  void addVar(unsigned char& val);
49  void addVar(char& val);
50  void addVar(short& val);
51  void addVar(unsigned short& val);
52  void addVar(int& val);
53  void addVar(unsigned int& val);
54  void addVar(float& val);
55  void addVar(double& val);
56 
57  void addVar(bool* val, unsigned nEl);
58  void addVar(unsigned char* val, unsigned nEl);
59  void addVar(char* val, unsigned nEl);
60  void addVar(short* val, unsigned nEl);
61  void addVar(unsigned short* val, unsigned nEl);
62  void addVar(int* val, unsigned nEl);
63  void addVar(unsigned int* val, unsigned nEl);
64  void addVar(float* val, unsigned nEl);
65  void addVar(double* val, unsigned nEl);
66 
67  void addVar(std::string& val);
68  void addVar(std::vector<unsigned char>& val);
69 
73  void addVar(sza::util::DataType::Type type, void* vPtr, unsigned nEl);
74  void addVar(sza::util::DataType::Type type, void* vPtr);
75 
79  void deserialize(const std::vector<unsigned char>& bytes);
80  void deserialize(const unsigned char* bytes);
81 
85  unsigned size();
86 
87  private:
88 
89  // A vector of objects contained in this class
90 
91  std::vector<NetDat::Info> members_;
92 
93  void resize();
94 
98  void serialize();
99 
103  void checkSize(const std::vector<unsigned char>& bytes);
104 
105  }; // End class NetStruct
106 
107  } // End namespace util
108 } // End namespace sza
109 
110 
111 #define NETSTRUCT_UCHAR(name) \
112 addVar(sza::util::DataType::UCHAR, (void*)&name, 1)
113 
114 #define NETSTRUCT_UCHAR_ARR(name, nEl) \
115 addVar(sza::util::DataType::UCHAR, (void*)name, nEl)
116 
117 #define NETSTRUCT_CHAR(name) \
118 addVar(sza::util::DataType::CHAR, (void*)&name, 1)
119 
120 #define NETSTRUCT_CHAR_ARR(name, nEl) \
121 addVar(sza::util::DataType::CHAR, (void*)name, nEl)
122 
123 #define NETSTRUCT_BOOL(name) \
124 addVar(sza::util::DataType::BOOL, (void*)&name, 1)
125 
126 #define NETSTRUCT_BOOL_ARR(name, nEl) \
127 addVar(sza::util::DataType::BOOL, (void*)name, nEl)
128 
129 #define NETSTRUCT_USHORT(name) \
130 addVar(sza::util::DataType::USHORT, (void*)&name, 1)
131 
132 #define NETSTRUCT_USHORT_ARR(name, nEl) \
133 addVar(sza::util::DataType::USHORT, (void*)name, nEl)
134 
135 #define NETSTRUCT_SHORT(name) \
136 addVar(sza::util::DataType::SHORT, (void*)&name, 1)
137 
138 #define NETSTRUCT_SHORT_ARR(name, nEl) \
139 addVar(sza::util::DataType::SHORT, (void*)name, nEl)
140 
141 #define NETSTRUCT_UINT(name) \
142 addVar(sza::util::DataType::UINT, (void*)&name, 1)
143 
144 #define NETSTRUCT_UINT_ARR(name, nEl) \
145 addVar(sza::util::DataType::UINT, (void*)name, nEl)
146 
147 #define NETSTRUCT_INT(name) \
148 addVar(sza::util::DataType::INT, (void*)&name, 1)
149 
150 #define NETSTRUCT_INT_ARR(name, nEl) \
151 addVar(sza::util::DataType::INT, (void*)name, nEl)
152 
153 #define NETSTRUCT_ULONG(name) \
154 addVar(sza::util::DataType::ULONG, (void*)&name, 1)
155 
156 #define NETSTRUCT_ULONG_ARR(name, nEl) \
157 addVar(sza::util::DataType::ULONG, (void*)name, nEl)
158 
159 #define NETSTRUCT_LONG(name) \
160 addVar(sza::util::DataType::LONG, (void*)&name, 1)
161 
162 #define NETSTRUCT_LONG_ARR(name, nEl) \
163 addVar(sza::util::DataType::LONG, (void*)name, nEl)
164 
165 #define NETSTRUCT_FLOAT(name) \
166 addVar(sza::util::DataType::FLOAT, (void*)&name, 1)
167 
168 #define NETSTRUCT_FLOAT_ARR(name, nEl) \
169 addVar(sza::util::DataType::FLOAT, (void*)name, nEl)
170 
171 #define NETSTRUCT_DOUBLE(name) \
172 addVar(sza::util::DataType::DOUBLE, (void*)&name, 1)
173 
174 #define NETSTRUCT_DOUBLE_ARR(name, nEl) \
175 addVar(sza::util::DataType::DOUBLE, (void*)name, nEl)
176 
177 #define NETSTRUCT_UCHAR_VEC(name) \
178 addVar(sza::util::DataType::UCHAR, (void*)&name)
179 
180 #define NETSTRUCT_STRING(name) \
181 addVar(sza::util::DataType::STRING, (void*)&name)
182 
183 #endif // End #ifndef SZA_UTIL_NETSTRUCT_H
Tagged: Tue Jun 22 22:32:16 UTC 2004.
Tagged: Wed Jul 6 13:41:09 PDT 2005.