|
skamonkey@3743
|
1 |
/** |
|
skamonkey@3743
|
2 |
* vim: set ts=4 : |
|
skamonkey@3743
|
3 |
* ============================================================================= |
|
skamonkey@3743
|
4 |
* SourceMod |
|
skamonkey@3743
|
5 |
* Copyright (C) 2013 AlliedModders LLC. All rights reserved. |
|
skamonkey@3743
|
6 |
* ============================================================================= |
|
skamonkey@3743
|
7 |
* |
|
skamonkey@3743
|
8 |
* This program is free software; you can redistribute it and/or modify it under |
|
skamonkey@3743
|
9 |
* the terms of the GNU General Public License, version 3.0, as published by the |
|
skamonkey@3743
|
10 |
* Free Software Foundation. |
|
skamonkey@3743
|
11 |
* |
|
skamonkey@3743
|
12 |
* This program is distributed in the hope that it will be useful, but WITHOUT |
|
skamonkey@3743
|
13 |
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
|
skamonkey@3743
|
14 |
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more |
|
skamonkey@3743
|
15 |
* details. |
|
skamonkey@3743
|
16 |
* |
|
skamonkey@3743
|
17 |
* You should have received a copy of the GNU General Public License along with |
|
skamonkey@3743
|
18 |
* this program. If not, see <http://www.gnu.org/licenses/>. |
|
skamonkey@3743
|
19 |
* |
|
skamonkey@3743
|
20 |
* As a special exception, AlliedModders LLC gives you permission to link the |
|
skamonkey@3743
|
21 |
* code of this program (as well as its derivative works) to "Half-Life 2," the |
|
skamonkey@3743
|
22 |
* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software |
|
skamonkey@3743
|
23 |
* by the Valve Corporation. You must obey the GNU General Public License in |
|
skamonkey@3743
|
24 |
* all respects for all other code used. Additionally, AlliedModders LLC grants |
|
skamonkey@3743
|
25 |
* this exception to all derivative works. AlliedModders LLC defines further |
|
skamonkey@3743
|
26 |
* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), |
|
skamonkey@3743
|
27 |
* or <http://www.sourcemod.net/license.php>. |
|
skamonkey@3743
|
28 |
* |
|
skamonkey@3743
|
29 |
* Version: $Id$ |
|
skamonkey@3743
|
30 |
*/ |
|
skamonkey@3743
|
31 |
|
|
skamonkey@3743
|
32 |
#ifndef _INCLUDE_SOURCEMOD_SMPBMESSAGE_H_ |
|
skamonkey@3743
|
33 |
#define _INCLUDE_SOURCEMOD_SMPBMESSAGE_H_ |
|
skamonkey@3743
|
34 |
|
|
skamonkey@3743
|
35 |
#include <sh_list.h> |
|
skamonkey@3743
|
36 |
#include <google/protobuf/descriptor.h> |
|
skamonkey@3743
|
37 |
|
|
skamonkey@3743
|
38 |
#define GETCHECK_FIELD() \ |
|
skamonkey@3743
|
39 |
const protobuf::FieldDescriptor *field = msg->GetDescriptor()->FindFieldByName(pszFieldName); \ |
|
skamonkey@3743
|
40 |
if (!field) \ |
|
skamonkey@3743
|
41 |
{ \ |
|
skamonkey@3743
|
42 |
return false; \ |
|
skamonkey@3743
|
43 |
} |
|
skamonkey@3743
|
44 |
|
|
skamonkey@3743
|
45 |
#define CHECK_FIELD_TYPE(type) \ |
|
skamonkey@3743
|
46 |
if (field->cpp_type() != protobuf::FieldDescriptor::CPPTYPE_##type) \ |
|
skamonkey@3743
|
47 |
{ \ |
|
skamonkey@3743
|
48 |
return false; \ |
|
skamonkey@3743
|
49 |
} |
|
skamonkey@3743
|
50 |
|
|
skamonkey@3743
|
51 |
#define CHECK_FIELD_TYPE2(type1, type2) \ |
|
skamonkey@3743
|
52 |
protobuf::FieldDescriptor::CppType fieldType = field->cpp_type(); \ |
|
skamonkey@3743
|
53 |
if (fieldType != protobuf::FieldDescriptor::CPPTYPE_##type1 \ |
|
skamonkey@3743
|
54 |
&& fieldType != protobuf::FieldDescriptor::CPPTYPE_##type2) \ |
|
skamonkey@3743
|
55 |
{ \ |
|
skamonkey@3743
|
56 |
return false; \ |
|
skamonkey@3743
|
57 |
} |
|
skamonkey@3743
|
58 |
|
|
skamonkey@3743
|
59 |
#define CHECK_FIELD_REPEATED() \ |
|
skamonkey@3743
|
60 |
if (field->label() != protobuf::FieldDescriptor::LABEL_REPEATED) \ |
|
skamonkey@3743
|
61 |
{ \ |
|
skamonkey@3743
|
62 |
return false; \ |
|
skamonkey@3743
|
63 |
} |
|
skamonkey@3743
|
64 |
|
|
skamonkey@3743
|
65 |
#define CHECK_FIELD_NOT_REPEATED() \ |
|
skamonkey@3743
|
66 |
if (field->label() == protobuf::FieldDescriptor::LABEL_REPEATED) \ |
|
skamonkey@3743
|
67 |
{ \ |
|
skamonkey@3743
|
68 |
return false; \ |
|
skamonkey@3743
|
69 |
} |
|
skamonkey@3743
|
70 |
|
|
skamonkey@3743
|
71 |
#define CHECK_REPEATED_ELEMENT(idx) \ |
|
skamonkey@3743
|
72 |
int elemCount = msg->GetReflection()->FieldSize(*msg, field); \ |
|
skamonkey@3743
|
73 |
if (elemCount == 0 || idx >= elemCount || idx <= 0) \ |
|
skamonkey@3743
|
74 |
{ \ |
|
skamonkey@3743
|
75 |
return false; \ |
|
skamonkey@3743
|
76 |
} |
|
skamonkey@3743
|
77 |
|
|
skamonkey@3743
|
78 |
typedef List<Handle_t> PBHandleList; |
|
skamonkey@3743
|
79 |
|
|
skamonkey@3743
|
80 |
class SMProtobufMessage |
|
skamonkey@3743
|
81 |
{ |
|
skamonkey@3743
|
82 |
public: |
|
skamonkey@3743
|
83 |
SMProtobufMessage( protobuf::Message *message ) |
|
skamonkey@3743
|
84 |
{ |
|
skamonkey@3743
|
85 |
msg = message; |
|
skamonkey@3743
|
86 |
} |
|
skamonkey@3743
|
87 |
|
|
skamonkey@3743
|
88 |
~SMProtobufMessage() |
|
skamonkey@3743
|
89 |
{ |
|
skamonkey@3743
|
90 |
PBHandleList::iterator iter = childHandles.begin(); |
|
skamonkey@3743
|
91 |
while (iter != childHandles.end()) |
|
skamonkey@3743
|
92 |
{ |
|
skamonkey@3743
|
93 |
Handle_t &hndl = (*iter); |
|
skamonkey@3743
|
94 |
HandleSecurity sec; |
|
skamonkey@3743
|
95 |
sec.pIdentity = g_pCoreIdent; |
|
skamonkey@3743
|
96 |
g_HandleSys.FreeHandle(hndl, &sec); |
|
skamonkey@3743
|
97 |
iter = childHandles.erase(iter); |
|
skamonkey@3743
|
98 |
} |
|
skamonkey@3743
|
99 |
} |
|
skamonkey@3743
|
100 |
|
|
skamonkey@3743
|
101 |
inline void AddChildHandle(Handle_t hndl) |
|
skamonkey@3743
|
102 |
{ |
|
skamonkey@3743
|
103 |
childHandles.push_back(hndl); |
|
skamonkey@3743
|
104 |
} |
|
skamonkey@3743
|
105 |
|
|
skamonkey@3743
|
106 |
inline protobuf::Message *GetProtobufMessage() |
|
skamonkey@3743
|
107 |
{ |
|
skamonkey@3743
|
108 |
return msg; |
|
skamonkey@3743
|
109 |
} |
|
skamonkey@3743
|
110 |
|
|
skamonkey@3743
|
111 |
inline bool GetInt32(const char *pszFieldName, int32 *out) |
|
skamonkey@3743
|
112 |
{ |
|
skamonkey@3743
|
113 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
114 |
CHECK_FIELD_TYPE(INT32); |
|
skamonkey@3743
|
115 |
CHECK_FIELD_NOT_REPEATED(); |
|
skamonkey@3743
|
116 |
|
|
skamonkey@3743
|
117 |
*out = msg->GetReflection()->GetInt32(*msg, field); |
|
skamonkey@3743
|
118 |
return true; |
|
skamonkey@3743
|
119 |
} |
|
skamonkey@3743
|
120 |
|
|
skamonkey@3743
|
121 |
inline bool SetInt32(const char *pszFieldName, int32 value) |
|
skamonkey@3743
|
122 |
{ |
|
skamonkey@3743
|
123 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
124 |
CHECK_FIELD_TYPE(INT32); |
|
skamonkey@3743
|
125 |
CHECK_FIELD_NOT_REPEATED(); |
|
skamonkey@3743
|
126 |
|
|
skamonkey@3743
|
127 |
msg->GetReflection()->SetInt32(msg, field, value); |
|
skamonkey@3743
|
128 |
return true; |
|
skamonkey@3743
|
129 |
} |
|
skamonkey@3743
|
130 |
|
|
skamonkey@3743
|
131 |
inline bool GetRepeatedInt32(const char *pszFieldName, int index, int32 *out) |
|
skamonkey@3743
|
132 |
{ |
|
skamonkey@3743
|
133 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
134 |
CHECK_FIELD_TYPE(INT32); |
|
skamonkey@3743
|
135 |
CHECK_FIELD_REPEATED(); |
|
skamonkey@3743
|
136 |
CHECK_REPEATED_ELEMENT(index); |
|
skamonkey@3743
|
137 |
|
|
skamonkey@3743
|
138 |
*out = msg->GetReflection()->GetRepeatedInt32(*msg, field, index); |
|
skamonkey@3743
|
139 |
return true; |
|
skamonkey@3743
|
140 |
} |
|
skamonkey@3743
|
141 |
|
|
skamonkey@3743
|
142 |
inline bool AddInt32(const char *pszFieldName, int32 value) |
|
skamonkey@3743
|
143 |
{ |
|
skamonkey@3743
|
144 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
145 |
CHECK_FIELD_TYPE(INT32); |
|
skamonkey@3743
|
146 |
CHECK_FIELD_REPEATED(); |
|
skamonkey@3743
|
147 |
|
|
skamonkey@3743
|
148 |
msg->GetReflection()->AddInt32(msg, field, value); |
|
skamonkey@3743
|
149 |
return true; |
|
skamonkey@3743
|
150 |
} |
|
skamonkey@3743
|
151 |
|
|
skamonkey@3743
|
152 |
inline bool GetInt64(const char *pszFieldName, int64 *out) |
|
skamonkey@3743
|
153 |
{ |
|
skamonkey@3743
|
154 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
155 |
CHECK_FIELD_TYPE(INT64); |
|
skamonkey@3743
|
156 |
CHECK_FIELD_NOT_REPEATED(); |
|
skamonkey@3743
|
157 |
|
|
skamonkey@3743
|
158 |
*out = msg->GetReflection()->GetInt64(*msg, field); |
|
skamonkey@3743
|
159 |
return true; |
|
skamonkey@3743
|
160 |
} |
|
skamonkey@3743
|
161 |
|
|
skamonkey@3743
|
162 |
inline bool SetInt64(const char *pszFieldName, int64 value) |
|
skamonkey@3743
|
163 |
{ |
|
skamonkey@3743
|
164 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
165 |
CHECK_FIELD_TYPE(INT64); |
|
skamonkey@3743
|
166 |
CHECK_FIELD_NOT_REPEATED(); |
|
skamonkey@3743
|
167 |
|
|
skamonkey@3743
|
168 |
msg->GetReflection()->SetInt64(msg, field, value); |
|
skamonkey@3743
|
169 |
return true; |
|
skamonkey@3743
|
170 |
} |
|
skamonkey@3743
|
171 |
|
|
skamonkey@3743
|
172 |
inline bool GetRepeatedInt64(const char *pszFieldName, int index, int64 *out) |
|
skamonkey@3743
|
173 |
{ |
|
skamonkey@3743
|
174 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
175 |
CHECK_FIELD_TYPE(INT64); |
|
skamonkey@3743
|
176 |
CHECK_FIELD_REPEATED(); |
|
skamonkey@3743
|
177 |
CHECK_REPEATED_ELEMENT(index); |
|
skamonkey@3743
|
178 |
|
|
skamonkey@3743
|
179 |
*out = msg->GetReflection()->GetRepeatedInt64(*msg, field, index); |
|
skamonkey@3743
|
180 |
return true; |
|
skamonkey@3743
|
181 |
} |
|
skamonkey@3743
|
182 |
|
|
skamonkey@3743
|
183 |
inline bool AddInt64(const char *pszFieldName, int64 value) |
|
skamonkey@3743
|
184 |
{ |
|
skamonkey@3743
|
185 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
186 |
CHECK_FIELD_TYPE(INT64); |
|
skamonkey@3743
|
187 |
CHECK_FIELD_REPEATED(); |
|
skamonkey@3743
|
188 |
|
|
skamonkey@3743
|
189 |
msg->GetReflection()->AddInt64(msg, field, value); |
|
skamonkey@3743
|
190 |
return true; |
|
skamonkey@3743
|
191 |
} |
|
skamonkey@3743
|
192 |
|
|
skamonkey@3743
|
193 |
inline bool GetUInt32(const char *pszFieldName, uint32 *out) |
|
skamonkey@3743
|
194 |
{ |
|
skamonkey@3743
|
195 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
196 |
CHECK_FIELD_TYPE(UINT32); |
|
skamonkey@3743
|
197 |
CHECK_FIELD_NOT_REPEATED(); |
|
skamonkey@3743
|
198 |
|
|
skamonkey@3743
|
199 |
*out = msg->GetReflection()->GetUInt32(*msg, field); |
|
skamonkey@3743
|
200 |
return true; |
|
skamonkey@3743
|
201 |
} |
|
skamonkey@3743
|
202 |
|
|
skamonkey@3743
|
203 |
inline bool SetUInt32(const char *pszFieldName, uint32 value) |
|
skamonkey@3743
|
204 |
{ |
|
skamonkey@3743
|
205 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
206 |
CHECK_FIELD_TYPE(UINT32); |
|
skamonkey@3743
|
207 |
CHECK_FIELD_NOT_REPEATED(); |
|
skamonkey@3743
|
208 |
|
|
skamonkey@3743
|
209 |
msg->GetReflection()->SetUInt32(msg, field, value); |
|
skamonkey@3743
|
210 |
return true; |
|
skamonkey@3743
|
211 |
} |
|
skamonkey@3743
|
212 |
|
|
skamonkey@3743
|
213 |
inline bool GetRepeatedUInt32(const char *pszFieldName, int index, uint32 *out) |
|
skamonkey@3743
|
214 |
{ |
|
skamonkey@3743
|
215 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
216 |
CHECK_FIELD_TYPE(UINT32); |
|
skamonkey@3743
|
217 |
CHECK_FIELD_REPEATED(); |
|
skamonkey@3743
|
218 |
CHECK_REPEATED_ELEMENT(index); |
|
skamonkey@3743
|
219 |
|
|
skamonkey@3743
|
220 |
*out = msg->GetReflection()->GetRepeatedUInt32(*msg, field, index); |
|
skamonkey@3743
|
221 |
return true; |
|
skamonkey@3743
|
222 |
} |
|
skamonkey@3743
|
223 |
|
|
skamonkey@3743
|
224 |
inline bool AddUInt32(const char *pszFieldName, uint32 value) |
|
skamonkey@3743
|
225 |
{ |
|
skamonkey@3743
|
226 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
227 |
CHECK_FIELD_TYPE(UINT32); |
|
skamonkey@3743
|
228 |
CHECK_FIELD_REPEATED(); |
|
skamonkey@3743
|
229 |
|
|
skamonkey@3743
|
230 |
msg->GetReflection()->AddUInt32(msg, field, value); |
|
skamonkey@3743
|
231 |
return true; |
|
skamonkey@3743
|
232 |
} |
|
skamonkey@3743
|
233 |
|
|
skamonkey@3743
|
234 |
inline bool GetUInt64(const char *pszFieldName, uint64 *out) |
|
skamonkey@3743
|
235 |
{ |
|
skamonkey@3743
|
236 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
237 |
CHECK_FIELD_TYPE(UINT64); |
|
skamonkey@3743
|
238 |
CHECK_FIELD_NOT_REPEATED(); |
|
skamonkey@3743
|
239 |
|
|
skamonkey@3743
|
240 |
*out = msg->GetReflection()->GetUInt64(*msg, field); |
|
skamonkey@3743
|
241 |
return true; |
|
skamonkey@3743
|
242 |
} |
|
skamonkey@3743
|
243 |
|
|
skamonkey@3743
|
244 |
inline bool SetUInt64(const char *pszFieldName, uint64 value) |
|
skamonkey@3743
|
245 |
{ |
|
skamonkey@3743
|
246 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
247 |
CHECK_FIELD_TYPE(UINT64); |
|
skamonkey@3743
|
248 |
CHECK_FIELD_NOT_REPEATED(); |
|
skamonkey@3743
|
249 |
|
|
skamonkey@3743
|
250 |
msg->GetReflection()->SetUInt64(msg, field, value); |
|
skamonkey@3743
|
251 |
return true; |
|
skamonkey@3743
|
252 |
} |
|
skamonkey@3743
|
253 |
|
|
skamonkey@3743
|
254 |
inline bool GetRepeatedUInt64(const char *pszFieldName, int index, uint64 *out) |
|
skamonkey@3743
|
255 |
{ |
|
skamonkey@3743
|
256 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
257 |
CHECK_FIELD_TYPE(UINT64); |
|
skamonkey@3743
|
258 |
CHECK_FIELD_REPEATED(); |
|
skamonkey@3743
|
259 |
CHECK_REPEATED_ELEMENT(index); |
|
skamonkey@3743
|
260 |
|
|
skamonkey@3743
|
261 |
*out = msg->GetReflection()->GetRepeatedUInt64(*msg, field, index); |
|
skamonkey@3743
|
262 |
return true; |
|
skamonkey@3743
|
263 |
} |
|
skamonkey@3743
|
264 |
|
|
skamonkey@3743
|
265 |
inline bool AddUInt64(const char *pszFieldName, uint64 value) |
|
skamonkey@3743
|
266 |
{ |
|
skamonkey@3743
|
267 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
268 |
CHECK_FIELD_TYPE(UINT64); |
|
skamonkey@3743
|
269 |
CHECK_FIELD_REPEATED(); |
|
skamonkey@3743
|
270 |
|
|
skamonkey@3743
|
271 |
msg->GetReflection()->AddUInt32(msg, field, value); |
|
skamonkey@3743
|
272 |
return true; |
|
skamonkey@3743
|
273 |
} |
|
skamonkey@3743
|
274 |
|
|
skamonkey@3743
|
275 |
inline bool GetInt32OrUnsigned(const char *pszFieldName, int32 *out) |
|
skamonkey@3743
|
276 |
{ |
|
skamonkey@3743
|
277 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
278 |
CHECK_FIELD_TYPE2(INT32, UINT32); |
|
skamonkey@3743
|
279 |
CHECK_FIELD_NOT_REPEATED(); |
|
skamonkey@3743
|
280 |
|
|
skamonkey@3743
|
281 |
if (fieldType == protobuf::FieldDescriptor::CPPTYPE_UINT32) |
|
skamonkey@3743
|
282 |
*out = (int32)msg->GetReflection()->GetUInt32(*msg, field); |
|
skamonkey@3743
|
283 |
else |
|
skamonkey@3743
|
284 |
*out = msg->GetReflection()->GetInt32(*msg, field); |
|
skamonkey@3743
|
285 |
|
|
skamonkey@3743
|
286 |
return true; |
|
skamonkey@3743
|
287 |
} |
|
skamonkey@3743
|
288 |
|
|
skamonkey@3743
|
289 |
inline bool SetInt32OrUnsigned(const char *pszFieldName, int32 value) |
|
skamonkey@3743
|
290 |
{ |
|
skamonkey@3743
|
291 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
292 |
CHECK_FIELD_TYPE2(INT32, UINT32); |
|
skamonkey@3743
|
293 |
CHECK_FIELD_NOT_REPEATED(); |
|
skamonkey@3743
|
294 |
|
|
skamonkey@3743
|
295 |
if (fieldType == protobuf::FieldDescriptor::CPPTYPE_UINT32) |
|
skamonkey@3743
|
296 |
msg->GetReflection()->SetUInt32(msg, field, (uint32)value); |
|
skamonkey@3743
|
297 |
else |
|
skamonkey@3743
|
298 |
msg->GetReflection()->SetInt32(msg, field, value); |
|
skamonkey@3743
|
299 |
|
|
skamonkey@3743
|
300 |
return true; |
|
skamonkey@3743
|
301 |
} |
|
skamonkey@3743
|
302 |
|
|
skamonkey@3743
|
303 |
inline bool GetRepeatedInt32OrUnsigned(const char *pszFieldName, int index, int32 *out) |
|
skamonkey@3743
|
304 |
{ |
|
skamonkey@3743
|
305 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
306 |
CHECK_FIELD_TYPE2(INT32, UINT32); |
|
skamonkey@3743
|
307 |
CHECK_FIELD_REPEATED(); |
|
skamonkey@3743
|
308 |
CHECK_REPEATED_ELEMENT(index); |
|
skamonkey@3743
|
309 |
|
|
skamonkey@3743
|
310 |
if (fieldType == protobuf::FieldDescriptor::CPPTYPE_UINT32) |
|
skamonkey@3743
|
311 |
*out = (int32)msg->GetReflection()->GetRepeatedUInt32(*msg, field, index); |
|
skamonkey@3743
|
312 |
else |
|
skamonkey@3743
|
313 |
*out = msg->GetReflection()->GetRepeatedInt32(*msg, field, index); |
|
skamonkey@3743
|
314 |
|
|
skamonkey@3743
|
315 |
return true; |
|
skamonkey@3743
|
316 |
} |
|
skamonkey@3743
|
317 |
|
|
skamonkey@3743
|
318 |
inline bool AddInt32OrUnsigned(const char *pszFieldName, int32 value) |
|
skamonkey@3743
|
319 |
{ |
|
skamonkey@3743
|
320 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
321 |
CHECK_FIELD_TYPE2(INT32, UINT32); |
|
skamonkey@3743
|
322 |
CHECK_FIELD_REPEATED(); |
|
skamonkey@3743
|
323 |
|
|
skamonkey@3743
|
324 |
if (fieldType == protobuf::FieldDescriptor::CPPTYPE_UINT32) |
|
skamonkey@3743
|
325 |
msg->GetReflection()->AddUInt32(msg, field, (uint32)value); |
|
skamonkey@3743
|
326 |
else |
|
skamonkey@3743
|
327 |
msg->GetReflection()->AddInt32(msg, field, value); |
|
skamonkey@3743
|
328 |
|
|
skamonkey@3743
|
329 |
return true; |
|
skamonkey@3743
|
330 |
} |
|
skamonkey@3743
|
331 |
|
|
skamonkey@3743
|
332 |
inline bool GetBool(const char *pszFieldName, bool *out) |
|
skamonkey@3743
|
333 |
{ |
|
skamonkey@3743
|
334 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
335 |
CHECK_FIELD_TYPE(BOOL); |
|
skamonkey@3743
|
336 |
CHECK_FIELD_NOT_REPEATED(); |
|
skamonkey@3743
|
337 |
|
|
skamonkey@3743
|
338 |
*out = msg->GetReflection()->GetBool(*msg, field); |
|
skamonkey@3743
|
339 |
return true; |
|
skamonkey@3743
|
340 |
} |
|
skamonkey@3743
|
341 |
|
|
skamonkey@3743
|
342 |
inline bool SetBool(const char *pszFieldName, bool value) |
|
skamonkey@3743
|
343 |
{ |
|
skamonkey@3743
|
344 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
345 |
CHECK_FIELD_TYPE(BOOL); |
|
skamonkey@3743
|
346 |
CHECK_FIELD_NOT_REPEATED(); |
|
skamonkey@3743
|
347 |
|
|
skamonkey@3743
|
348 |
msg->GetReflection()->SetBool(msg, field, value); |
|
skamonkey@3743
|
349 |
return true; |
|
skamonkey@3743
|
350 |
} |
|
skamonkey@3743
|
351 |
|
|
skamonkey@3743
|
352 |
inline bool GetRepeatedBool(const char *pszFieldName, int index, bool *out) |
|
skamonkey@3743
|
353 |
{ |
|
skamonkey@3743
|
354 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
355 |
CHECK_FIELD_TYPE(BOOL); |
|
skamonkey@3743
|
356 |
CHECK_FIELD_REPEATED(); |
|
skamonkey@3743
|
357 |
CHECK_REPEATED_ELEMENT(index); |
|
skamonkey@3743
|
358 |
|
|
skamonkey@3743
|
359 |
*out = msg->GetReflection()->GetRepeatedBool(*msg, field, index); |
|
skamonkey@3743
|
360 |
return true; |
|
skamonkey@3743
|
361 |
} |
|
skamonkey@3743
|
362 |
|
|
skamonkey@3743
|
363 |
inline bool AddBool(const char *pszFieldName, bool value) |
|
skamonkey@3743
|
364 |
{ |
|
skamonkey@3743
|
365 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
366 |
CHECK_FIELD_TYPE(BOOL); |
|
skamonkey@3743
|
367 |
CHECK_FIELD_REPEATED(); |
|
skamonkey@3743
|
368 |
|
|
skamonkey@3743
|
369 |
msg->GetReflection()->AddBool(msg, field, value); |
|
skamonkey@3743
|
370 |
return true; |
|
skamonkey@3743
|
371 |
} |
|
skamonkey@3743
|
372 |
|
|
skamonkey@3743
|
373 |
inline bool GetFloat(const char *pszFieldName, float *out) |
|
skamonkey@3743
|
374 |
{ |
|
skamonkey@3743
|
375 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
376 |
CHECK_FIELD_TYPE(FLOAT); |
|
skamonkey@3743
|
377 |
CHECK_FIELD_NOT_REPEATED(); |
|
skamonkey@3743
|
378 |
|
|
skamonkey@3743
|
379 |
*out = msg->GetReflection()->GetFloat(*msg, field); |
|
skamonkey@3743
|
380 |
return true; |
|
skamonkey@3743
|
381 |
} |
|
skamonkey@3743
|
382 |
|
|
skamonkey@3743
|
383 |
inline bool SetFloat(const char *pszFieldName, float value) |
|
skamonkey@3743
|
384 |
{ |
|
skamonkey@3743
|
385 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
386 |
CHECK_FIELD_TYPE(FLOAT); |
|
skamonkey@3743
|
387 |
CHECK_FIELD_NOT_REPEATED(); |
|
skamonkey@3743
|
388 |
|
|
skamonkey@3743
|
389 |
msg->GetReflection()->SetFloat(msg, field, value); |
|
skamonkey@3743
|
390 |
return true; |
|
skamonkey@3743
|
391 |
} |
|
skamonkey@3743
|
392 |
|
|
skamonkey@3743
|
393 |
inline bool GetRepeatedFloat(const char *pszFieldName, int index, float *out) |
|
skamonkey@3743
|
394 |
{ |
|
skamonkey@3743
|
395 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
396 |
CHECK_FIELD_TYPE(FLOAT); |
|
skamonkey@3743
|
397 |
CHECK_FIELD_REPEATED(); |
|
skamonkey@3743
|
398 |
CHECK_REPEATED_ELEMENT(index); |
|
skamonkey@3743
|
399 |
|
|
skamonkey@3743
|
400 |
*out = msg->GetReflection()->GetRepeatedFloat(*msg, field, index); |
|
skamonkey@3743
|
401 |
return true; |
|
skamonkey@3743
|
402 |
} |
|
skamonkey@3743
|
403 |
|
|
skamonkey@3743
|
404 |
inline bool AddFloat(const char *pszFieldName, float value) |
|
skamonkey@3743
|
405 |
{ |
|
skamonkey@3743
|
406 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
407 |
CHECK_FIELD_TYPE(FLOAT); |
|
skamonkey@3743
|
408 |
CHECK_FIELD_REPEATED(); |
|
skamonkey@3743
|
409 |
|
|
skamonkey@3743
|
410 |
msg->GetReflection()->AddFloat(msg, field, value); |
|
skamonkey@3743
|
411 |
return true; |
|
skamonkey@3743
|
412 |
} |
|
skamonkey@3743
|
413 |
|
|
skamonkey@3743
|
414 |
inline bool GetDouble(const char *pszFieldName, double *out) |
|
skamonkey@3743
|
415 |
{ |
|
skamonkey@3743
|
416 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
417 |
CHECK_FIELD_TYPE(DOUBLE); |
|
skamonkey@3743
|
418 |
CHECK_FIELD_NOT_REPEATED(); |
|
skamonkey@3743
|
419 |
|
|
skamonkey@3743
|
420 |
*out = msg->GetReflection()->GetDouble(*msg, field); |
|
skamonkey@3743
|
421 |
return true; |
|
skamonkey@3743
|
422 |
} |
|
skamonkey@3743
|
423 |
|
|
skamonkey@3743
|
424 |
inline bool SetDouble(const char *pszFieldName, double value) |
|
skamonkey@3743
|
425 |
{ |
|
skamonkey@3743
|
426 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
427 |
CHECK_FIELD_TYPE(DOUBLE); |
|
skamonkey@3743
|
428 |
CHECK_FIELD_NOT_REPEATED(); |
|
skamonkey@3743
|
429 |
|
|
skamonkey@3743
|
430 |
msg->GetReflection()->SetDouble(msg, field, value); |
|
skamonkey@3743
|
431 |
return true; |
|
skamonkey@3743
|
432 |
} |
|
skamonkey@3743
|
433 |
|
|
skamonkey@3743
|
434 |
inline bool GetRepeatedDouble(const char *pszFieldName, int index, double *out) |
|
skamonkey@3743
|
435 |
{ |
|
skamonkey@3743
|
436 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
437 |
CHECK_FIELD_TYPE(DOUBLE); |
|
skamonkey@3743
|
438 |
CHECK_FIELD_REPEATED(); |
|
skamonkey@3743
|
439 |
CHECK_REPEATED_ELEMENT(index); |
|
skamonkey@3743
|
440 |
|
|
skamonkey@3743
|
441 |
*out = msg->GetReflection()->GetRepeatedDouble(*msg, field, index); |
|
skamonkey@3743
|
442 |
return true; |
|
skamonkey@3743
|
443 |
} |
|
skamonkey@3743
|
444 |
|
|
skamonkey@3743
|
445 |
inline bool AddDouble(const char *pszFieldName, double value) |
|
skamonkey@3743
|
446 |
{ |
|
skamonkey@3743
|
447 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
448 |
CHECK_FIELD_TYPE(DOUBLE); |
|
skamonkey@3743
|
449 |
CHECK_FIELD_REPEATED(); |
|
skamonkey@3743
|
450 |
|
|
skamonkey@3743
|
451 |
msg->GetReflection()->AddDouble(msg, field, value); |
|
skamonkey@3743
|
452 |
return true; |
|
skamonkey@3743
|
453 |
} |
|
skamonkey@3743
|
454 |
|
|
skamonkey@3743
|
455 |
inline bool GetFloatOrDouble(const char *pszFieldName, float *out) |
|
skamonkey@3743
|
456 |
{ |
|
skamonkey@3743
|
457 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
458 |
CHECK_FIELD_TYPE2(FLOAT, DOUBLE); |
|
skamonkey@3743
|
459 |
CHECK_FIELD_NOT_REPEATED(); |
|
skamonkey@3743
|
460 |
|
|
skamonkey@3743
|
461 |
if (fieldType == protobuf::FieldDescriptor::CPPTYPE_DOUBLE) |
|
skamonkey@3743
|
462 |
*out = (float)msg->GetReflection()->GetDouble(*msg, field); |
|
skamonkey@3743
|
463 |
else |
|
skamonkey@3743
|
464 |
*out = msg->GetReflection()->GetFloat(*msg, field); |
|
skamonkey@3743
|
465 |
|
|
skamonkey@3743
|
466 |
return true; |
|
skamonkey@3743
|
467 |
} |
|
skamonkey@3743
|
468 |
|
|
skamonkey@3743
|
469 |
inline bool SetFloatOrDouble(const char *pszFieldName, float value) |
|
skamonkey@3743
|
470 |
{ |
|
skamonkey@3743
|
471 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
472 |
CHECK_FIELD_TYPE2(FLOAT, DOUBLE); |
|
skamonkey@3743
|
473 |
CHECK_FIELD_NOT_REPEATED(); |
|
skamonkey@3743
|
474 |
|
|
skamonkey@3743
|
475 |
if (fieldType == protobuf::FieldDescriptor::CPPTYPE_DOUBLE) |
|
skamonkey@3743
|
476 |
msg->GetReflection()->SetDouble(msg, field, (double)value); |
|
skamonkey@3743
|
477 |
else |
|
skamonkey@3743
|
478 |
msg->GetReflection()->SetFloat(msg, field, value); |
|
skamonkey@3743
|
479 |
|
|
skamonkey@3743
|
480 |
return true; |
|
skamonkey@3743
|
481 |
} |
|
skamonkey@3743
|
482 |
|
|
skamonkey@3743
|
483 |
inline bool GetRepeatedFloatOrDouble(const char *pszFieldName, int index, float *out) |
|
skamonkey@3743
|
484 |
{ |
|
skamonkey@3743
|
485 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
486 |
CHECK_FIELD_TYPE2(FLOAT, DOUBLE); |
|
skamonkey@3743
|
487 |
CHECK_FIELD_REPEATED(); |
|
skamonkey@3743
|
488 |
CHECK_REPEATED_ELEMENT(index); |
|
skamonkey@3743
|
489 |
|
|
skamonkey@3743
|
490 |
if (fieldType == protobuf::FieldDescriptor::CPPTYPE_DOUBLE) |
|
skamonkey@3743
|
491 |
*out = (float)msg->GetReflection()->GetRepeatedDouble(*msg, field, index); |
|
skamonkey@3743
|
492 |
else |
|
skamonkey@3743
|
493 |
*out = msg->GetReflection()->GetRepeatedFloat(*msg, field, index); |
|
skamonkey@3743
|
494 |
|
|
skamonkey@3743
|
495 |
return true; |
|
skamonkey@3743
|
496 |
} |
|
skamonkey@3743
|
497 |
|
|
skamonkey@3743
|
498 |
inline bool AddFloatOrDouble(const char *pszFieldName, float value) |
|
skamonkey@3743
|
499 |
{ |
|
skamonkey@3743
|
500 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
501 |
CHECK_FIELD_TYPE2(FLOAT, DOUBLE); |
|
skamonkey@3743
|
502 |
CHECK_FIELD_REPEATED(); |
|
skamonkey@3743
|
503 |
|
|
skamonkey@3743
|
504 |
if (fieldType == protobuf::FieldDescriptor::CPPTYPE_DOUBLE) |
|
skamonkey@3743
|
505 |
msg->GetReflection()->AddDouble(msg, field, (double)value); |
|
skamonkey@3743
|
506 |
else |
|
skamonkey@3743
|
507 |
msg->GetReflection()->AddFloat(msg, field, value); |
|
skamonkey@3743
|
508 |
|
|
skamonkey@3743
|
509 |
return true; |
|
skamonkey@3743
|
510 |
} |
|
skamonkey@3743
|
511 |
|
|
skamonkey@3743
|
512 |
inline bool GetString(const char *pszFieldName, char *out, int size) |
|
skamonkey@3743
|
513 |
{ |
|
skamonkey@3743
|
514 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
515 |
CHECK_FIELD_TYPE(STRING); |
|
skamonkey@3743
|
516 |
CHECK_FIELD_NOT_REPEATED(); |
|
skamonkey@3743
|
517 |
|
|
skamonkey@3743
|
518 |
std::string scratch; |
|
skamonkey@3746
|
519 |
strncopy(out, msg->GetReflection()->GetStringReference(*msg, field, &scratch).c_str(), size); |
|
skamonkey@3743
|
520 |
|
|
skamonkey@3743
|
521 |
return true; |
|
skamonkey@3743
|
522 |
} |
|
skamonkey@3743
|
523 |
|
|
skamonkey@3743
|
524 |
inline bool SetString(const char *pszFieldName, const char *value) |
|
skamonkey@3743
|
525 |
{ |
|
skamonkey@3743
|
526 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
527 |
CHECK_FIELD_TYPE(STRING); |
|
skamonkey@3743
|
528 |
CHECK_FIELD_NOT_REPEATED(); |
|
skamonkey@3743
|
529 |
|
|
skamonkey@3743
|
530 |
msg->GetReflection()->SetString(msg, field, value); |
|
skamonkey@3743
|
531 |
return true; |
|
skamonkey@3743
|
532 |
} |
|
skamonkey@3743
|
533 |
|
|
skamonkey@3743
|
534 |
inline bool GetRepeatedString(const char *pszFieldName, int index, char *out, int size) |
|
skamonkey@3743
|
535 |
{ |
|
skamonkey@3743
|
536 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
537 |
CHECK_FIELD_TYPE(STRING); |
|
skamonkey@3743
|
538 |
CHECK_FIELD_REPEATED(); |
|
skamonkey@3743
|
539 |
CHECK_REPEATED_ELEMENT(index); |
|
skamonkey@3743
|
540 |
|
|
skamonkey@3743
|
541 |
std::string scratch; |
|
skamonkey@3743
|
542 |
strncopy(out, msg->GetReflection()->GetRepeatedStringReference(*msg, field, index, &scratch).c_str(), size); |
|
skamonkey@3743
|
543 |
|
|
skamonkey@3743
|
544 |
return true; |
|
skamonkey@3743
|
545 |
} |
|
skamonkey@3743
|
546 |
|
|
skamonkey@3743
|
547 |
inline bool AddString(const char *pszFieldName, const char *value) |
|
skamonkey@3743
|
548 |
{ |
|
skamonkey@3743
|
549 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
550 |
CHECK_FIELD_TYPE(STRING); |
|
skamonkey@3743
|
551 |
CHECK_FIELD_REPEATED(); |
|
skamonkey@3743
|
552 |
|
|
skamonkey@3743
|
553 |
msg->GetReflection()->AddString(msg, field, value); |
|
skamonkey@3743
|
554 |
return true; |
|
skamonkey@3743
|
555 |
} |
|
skamonkey@3743
|
556 |
|
|
skamonkey@3743
|
557 |
inline bool GetColor(const char *pszFieldName, Color *out) |
|
skamonkey@3743
|
558 |
{ |
|
skamonkey@3743
|
559 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
560 |
CHECK_FIELD_TYPE(MESSAGE); |
|
skamonkey@3743
|
561 |
CHECK_FIELD_NOT_REPEATED(); |
|
skamonkey@3743
|
562 |
|
|
skamonkey@3743
|
563 |
const CMsgRGBA &msgRGBA = (const CMsgRGBA &)msg->GetReflection()->GetMessage(*msg, field); |
|
skamonkey@3743
|
564 |
out->SetColor( |
|
skamonkey@3743
|
565 |
msgRGBA.r(), |
|
skamonkey@3743
|
566 |
msgRGBA.g(), |
|
skamonkey@3743
|
567 |
msgRGBA.b(), |
|
skamonkey@3743
|
568 |
msgRGBA.a() |
|
skamonkey@3743
|
569 |
); |
|
skamonkey@3743
|
570 |
|
|
skamonkey@3743
|
571 |
return true; |
|
skamonkey@3743
|
572 |
} |
|
skamonkey@3743
|
573 |
|
|
skamonkey@3743
|
574 |
inline bool SetColor(const char *pszFieldName, const Color &value) |
|
skamonkey@3743
|
575 |
{ |
|
skamonkey@3743
|
576 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
577 |
CHECK_FIELD_TYPE(MESSAGE); |
|
skamonkey@3743
|
578 |
CHECK_FIELD_NOT_REPEATED(); |
|
skamonkey@3743
|
579 |
|
|
skamonkey@3743
|
580 |
CMsgRGBA *msgRGBA = (CMsgRGBA *)msg->GetReflection()->MutableMessage(msg, field); |
|
skamonkey@3743
|
581 |
msgRGBA->set_r(value.r()); |
|
skamonkey@3743
|
582 |
msgRGBA->set_g(value.g()); |
|
skamonkey@3743
|
583 |
msgRGBA->set_b(value.b()); |
|
skamonkey@3743
|
584 |
msgRGBA->set_a(value.a()); |
|
skamonkey@3743
|
585 |
|
|
skamonkey@3743
|
586 |
return true; |
|
skamonkey@3743
|
587 |
} |
|
skamonkey@3743
|
588 |
|
|
skamonkey@3743
|
589 |
inline bool GetRepeatedColor(const char *pszFieldName, int index, Color *out) |
|
skamonkey@3743
|
590 |
{ |
|
skamonkey@3743
|
591 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
592 |
CHECK_FIELD_TYPE(MESSAGE); |
|
skamonkey@3743
|
593 |
CHECK_FIELD_REPEATED(); |
|
skamonkey@3743
|
594 |
CHECK_REPEATED_ELEMENT(index); |
|
skamonkey@3743
|
595 |
|
|
skamonkey@3743
|
596 |
const CMsgRGBA &msgRGBA = (const CMsgRGBA &)msg->GetReflection()->GetRepeatedMessage(*msg, field, index); |
|
skamonkey@3743
|
597 |
out->SetColor( |
|
skamonkey@3743
|
598 |
msgRGBA.r(), |
|
skamonkey@3743
|
599 |
msgRGBA.g(), |
|
skamonkey@3743
|
600 |
msgRGBA.b(), |
|
skamonkey@3743
|
601 |
msgRGBA.a() |
|
skamonkey@3743
|
602 |
); |
|
skamonkey@3743
|
603 |
|
|
skamonkey@3743
|
604 |
return true; |
|
skamonkey@3743
|
605 |
} |
|
skamonkey@3743
|
606 |
|
|
skamonkey@3743
|
607 |
inline bool AddColor(const char *pszFieldName, const Color &value) |
|
skamonkey@3743
|
608 |
{ |
|
skamonkey@3743
|
609 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
610 |
CHECK_FIELD_TYPE(MESSAGE); |
|
skamonkey@3743
|
611 |
CHECK_FIELD_REPEATED(); |
|
skamonkey@3743
|
612 |
|
|
skamonkey@3743
|
613 |
CMsgRGBA *msgRGBA = (CMsgRGBA *)msg->GetReflection()->AddMessage(msg, field); |
|
skamonkey@3743
|
614 |
msgRGBA->set_r(value.r()); |
|
skamonkey@3743
|
615 |
msgRGBA->set_g(value.g()); |
|
skamonkey@3743
|
616 |
msgRGBA->set_b(value.b()); |
|
skamonkey@3743
|
617 |
msgRGBA->set_a(value.a()); |
|
skamonkey@3743
|
618 |
|
|
skamonkey@3743
|
619 |
return true; |
|
skamonkey@3743
|
620 |
} |
|
skamonkey@3743
|
621 |
|
|
skamonkey@3743
|
622 |
inline bool GetVector2D(const char *pszFieldName, Vector2D *out) |
|
skamonkey@3743
|
623 |
{ |
|
skamonkey@3743
|
624 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
625 |
CHECK_FIELD_TYPE(MESSAGE); |
|
skamonkey@3743
|
626 |
CHECK_FIELD_NOT_REPEATED(); |
|
skamonkey@3743
|
627 |
|
|
skamonkey@3743
|
628 |
const CMsgVector2D &msgVec2d = (const CMsgVector2D &)msg->GetReflection()->GetMessage(*msg, field); |
|
skamonkey@3743
|
629 |
out->Init( |
|
skamonkey@3743
|
630 |
msgVec2d.x(), |
|
skamonkey@3743
|
631 |
msgVec2d.y() |
|
skamonkey@3743
|
632 |
); |
|
skamonkey@3743
|
633 |
|
|
skamonkey@3743
|
634 |
return true; |
|
skamonkey@3743
|
635 |
} |
|
skamonkey@3743
|
636 |
|
|
skamonkey@3743
|
637 |
inline bool SetVector2D(const char *pszFieldName, Vector2D &vec) |
|
skamonkey@3743
|
638 |
{ |
|
skamonkey@3743
|
639 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
640 |
CHECK_FIELD_TYPE(MESSAGE); |
|
skamonkey@3743
|
641 |
CHECK_FIELD_NOT_REPEATED(); |
|
skamonkey@3743
|
642 |
|
|
skamonkey@3743
|
643 |
CMsgVector2D *msgVec2d = (CMsgVector2D *)msg->GetReflection()->MutableMessage(msg, field); |
|
skamonkey@3743
|
644 |
msgVec2d->set_x(vec.x); |
|
skamonkey@3743
|
645 |
msgVec2d->set_y(vec.y); |
|
skamonkey@3743
|
646 |
|
|
skamonkey@3743
|
647 |
return true; |
|
skamonkey@3743
|
648 |
} |
|
skamonkey@3743
|
649 |
|
|
skamonkey@3743
|
650 |
inline bool GetRepeatedVector2D(const char *pszFieldName, int index, Vector2D *out) |
|
skamonkey@3743
|
651 |
{ |
|
skamonkey@3743
|
652 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
653 |
CHECK_FIELD_TYPE(MESSAGE); |
|
skamonkey@3743
|
654 |
CHECK_FIELD_REPEATED(); |
|
skamonkey@3743
|
655 |
CHECK_REPEATED_ELEMENT(index); |
|
skamonkey@3743
|
656 |
|
|
skamonkey@3743
|
657 |
const CMsgVector2D &msgVec2d = (const CMsgVector2D &)msg->GetReflection()->GetRepeatedMessage(*msg, field, index); |
|
skamonkey@3743
|
658 |
out->Init( |
|
skamonkey@3743
|
659 |
msgVec2d.x(), |
|
skamonkey@3743
|
660 |
msgVec2d.y() |
|
skamonkey@3743
|
661 |
); |
|
skamonkey@3743
|
662 |
|
|
skamonkey@3743
|
663 |
return true; |
|
skamonkey@3743
|
664 |
} |
|
skamonkey@3743
|
665 |
|
|
skamonkey@3743
|
666 |
inline bool AddVector2D(const char *pszFieldName, Vector2D &vec) |
|
skamonkey@3743
|
667 |
{ |
|
skamonkey@3743
|
668 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
669 |
CHECK_FIELD_TYPE(MESSAGE); |
|
skamonkey@3743
|
670 |
CHECK_FIELD_REPEATED(); |
|
skamonkey@3743
|
671 |
|
|
skamonkey@3743
|
672 |
CMsgVector2D *msgVec2d = (CMsgVector2D *)msg->GetReflection()->AddMessage(msg, field); |
|
skamonkey@3743
|
673 |
msgVec2d->set_x(vec.x); |
|
skamonkey@3743
|
674 |
msgVec2d->set_y(vec.y); |
|
skamonkey@3743
|
675 |
|
|
skamonkey@3743
|
676 |
return true; |
|
skamonkey@3743
|
677 |
} |
|
skamonkey@3743
|
678 |
|
|
skamonkey@3743
|
679 |
inline bool GetVector(const char *pszFieldName, Vector *out) |
|
skamonkey@3743
|
680 |
{ |
|
skamonkey@3743
|
681 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
682 |
CHECK_FIELD_TYPE(MESSAGE); |
|
skamonkey@3743
|
683 |
CHECK_FIELD_NOT_REPEATED(); |
|
skamonkey@3743
|
684 |
|
|
skamonkey@3743
|
685 |
const CMsgVector &msgVec = (const CMsgVector &)msg->GetReflection()->GetMessage(*msg, field); |
|
skamonkey@3743
|
686 |
out->Init( |
|
skamonkey@3743
|
687 |
msgVec.x(), |
|
skamonkey@3743
|
688 |
msgVec.y(), |
|
skamonkey@3743
|
689 |
msgVec.z() |
|
skamonkey@3743
|
690 |
); |
|
skamonkey@3743
|
691 |
|
|
skamonkey@3743
|
692 |
return true; |
|
skamonkey@3743
|
693 |
} |
|
skamonkey@3743
|
694 |
|
|
skamonkey@3743
|
695 |
inline bool SetVector(const char *pszFieldName, Vector &vec) |
|
skamonkey@3743
|
696 |
{ |
|
skamonkey@3743
|
697 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
698 |
CHECK_FIELD_TYPE(MESSAGE); |
|
skamonkey@3743
|
699 |
CHECK_FIELD_NOT_REPEATED(); |
|
skamonkey@3743
|
700 |
|
|
skamonkey@3743
|
701 |
CMsgVector *msgVec = (CMsgVector *)msg->GetReflection()->MutableMessage(msg, field); |
|
skamonkey@3743
|
702 |
msgVec->set_x(vec.x); |
|
skamonkey@3743
|
703 |
msgVec->set_y(vec.y); |
|
skamonkey@3743
|
704 |
msgVec->set_z(vec.z); |
|
skamonkey@3743
|
705 |
|
|
skamonkey@3743
|
706 |
return true; |
|
skamonkey@3743
|
707 |
} |
|
skamonkey@3743
|
708 |
|
|
skamonkey@3743
|
709 |
inline bool GetRepeatedVector(const char *pszFieldName, int index, Vector *out) |
|
skamonkey@3743
|
710 |
{ |
|
skamonkey@3743
|
711 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
712 |
CHECK_FIELD_TYPE(MESSAGE); |
|
skamonkey@3743
|
713 |
CHECK_FIELD_REPEATED(); |
|
skamonkey@3743
|
714 |
CHECK_REPEATED_ELEMENT(index); |
|
skamonkey@3743
|
715 |
|
|
skamonkey@3743
|
716 |
const CMsgVector &msgVec = (const CMsgVector &)msg->GetReflection()->GetRepeatedMessage(*msg, field, index); |
|
skamonkey@3743
|
717 |
out->Init( |
|
skamonkey@3743
|
718 |
msgVec.x(), |
|
skamonkey@3743
|
719 |
msgVec.y(), |
|
skamonkey@3743
|
720 |
msgVec.z() |
|
skamonkey@3743
|
721 |
); |
|
skamonkey@3743
|
722 |
|
|
skamonkey@3743
|
723 |
return true; |
|
skamonkey@3743
|
724 |
} |
|
skamonkey@3743
|
725 |
|
|
skamonkey@3743
|
726 |
inline bool AddVector(const char *pszFieldName, Vector &vec) |
|
skamonkey@3743
|
727 |
{ |
|
skamonkey@3743
|
728 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
729 |
CHECK_FIELD_TYPE(MESSAGE); |
|
skamonkey@3743
|
730 |
CHECK_FIELD_REPEATED(); |
|
skamonkey@3743
|
731 |
|
|
skamonkey@3743
|
732 |
CMsgVector *msgVec = (CMsgVector *)msg->GetReflection()->AddMessage(msg, field); |
|
skamonkey@3743
|
733 |
msgVec->set_x(vec.x); |
|
skamonkey@3743
|
734 |
msgVec->set_y(vec.y); |
|
skamonkey@3743
|
735 |
msgVec->set_z(vec.z); |
|
skamonkey@3743
|
736 |
|
|
skamonkey@3743
|
737 |
return true; |
|
skamonkey@3743
|
738 |
} |
|
skamonkey@3743
|
739 |
|
|
skamonkey@3743
|
740 |
inline bool GetQAngle(const char *pszFieldName, QAngle *out) |
|
skamonkey@3743
|
741 |
{ |
|
skamonkey@3743
|
742 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
743 |
CHECK_FIELD_TYPE(MESSAGE); |
|
skamonkey@3743
|
744 |
CHECK_FIELD_NOT_REPEATED(); |
|
skamonkey@3743
|
745 |
|
|
skamonkey@3743
|
746 |
const CMsgQAngle &msgAng = (const CMsgQAngle &)msg->GetReflection()->GetMessage(*msg, field); |
|
skamonkey@3743
|
747 |
out->Init( |
|
skamonkey@3743
|
748 |
msgAng.x(), |
|
skamonkey@3743
|
749 |
msgAng.y(), |
|
skamonkey@3743
|
750 |
msgAng.z() |
|
skamonkey@3743
|
751 |
); |
|
skamonkey@3743
|
752 |
|
|
skamonkey@3743
|
753 |
return true; |
|
skamonkey@3743
|
754 |
} |
|
skamonkey@3743
|
755 |
|
|
skamonkey@3743
|
756 |
inline bool SetQAngle(const char *pszFieldName, QAngle &vec) |
|
skamonkey@3743
|
757 |
{ |
|
skamonkey@3743
|
758 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
759 |
CHECK_FIELD_TYPE(MESSAGE); |
|
skamonkey@3743
|
760 |
CHECK_FIELD_NOT_REPEATED(); |
|
skamonkey@3743
|
761 |
|
|
skamonkey@3743
|
762 |
CMsgQAngle *msgAng = (CMsgQAngle *)msg->GetReflection()->MutableMessage(msg, field); |
|
skamonkey@3743
|
763 |
msgAng->set_x(vec.x); |
|
skamonkey@3743
|
764 |
msgAng->set_y(vec.y); |
|
skamonkey@3743
|
765 |
msgAng->set_z(vec.z); |
|
skamonkey@3743
|
766 |
|
|
skamonkey@3743
|
767 |
return true; |
|
skamonkey@3743
|
768 |
} |
|
skamonkey@3743
|
769 |
|
|
skamonkey@3743
|
770 |
inline bool GetRepeatedQAngle(const char *pszFieldName, int index, QAngle *out) |
|
skamonkey@3743
|
771 |
{ |
|
skamonkey@3743
|
772 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
773 |
CHECK_FIELD_TYPE(MESSAGE); |
|
skamonkey@3743
|
774 |
CHECK_FIELD_REPEATED(); |
|
skamonkey@3743
|
775 |
CHECK_REPEATED_ELEMENT(index); |
|
skamonkey@3743
|
776 |
|
|
skamonkey@3743
|
777 |
const CMsgQAngle &msgAng = (const CMsgQAngle &)msg->GetReflection()->GetRepeatedMessage(*msg, field, index); |
|
skamonkey@3743
|
778 |
out->Init( |
|
skamonkey@3743
|
779 |
msgAng.x(), |
|
skamonkey@3743
|
780 |
msgAng.y(), |
|
skamonkey@3743
|
781 |
msgAng.z() |
|
skamonkey@3743
|
782 |
); |
|
skamonkey@3743
|
783 |
|
|
skamonkey@3743
|
784 |
return true; |
|
skamonkey@3743
|
785 |
} |
|
skamonkey@3743
|
786 |
|
|
skamonkey@3743
|
787 |
inline bool AddQAngle(const char *pszFieldName, QAngle &vec) |
|
skamonkey@3743
|
788 |
{ |
|
skamonkey@3743
|
789 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
790 |
CHECK_FIELD_TYPE(MESSAGE); |
|
skamonkey@3743
|
791 |
CHECK_FIELD_REPEATED(); |
|
skamonkey@3743
|
792 |
|
|
skamonkey@3743
|
793 |
CMsgQAngle *msgAng = (CMsgQAngle *)msg->GetReflection()->AddMessage(msg, field); |
|
skamonkey@3743
|
794 |
msgAng->set_x(vec.x); |
|
skamonkey@3743
|
795 |
msgAng->set_y(vec.y); |
|
skamonkey@3743
|
796 |
msgAng->set_z(vec.z); |
|
skamonkey@3743
|
797 |
|
|
skamonkey@3743
|
798 |
return true; |
|
skamonkey@3743
|
799 |
} |
|
skamonkey@3743
|
800 |
|
|
skamonkey@3743
|
801 |
inline bool GetMessage(const char *pszFieldName, protobuf::Message **message) |
|
skamonkey@3743
|
802 |
{ |
|
skamonkey@3743
|
803 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
804 |
CHECK_FIELD_TYPE(MESSAGE); |
|
skamonkey@3743
|
805 |
CHECK_FIELD_NOT_REPEATED(); |
|
skamonkey@3743
|
806 |
|
|
skamonkey@3743
|
807 |
*message = msg->GetReflection()->MutableMessage(msg, field); |
|
skamonkey@3743
|
808 |
|
|
skamonkey@3743
|
809 |
return true; |
|
skamonkey@3743
|
810 |
} |
|
skamonkey@3743
|
811 |
|
|
skamonkey@3743
|
812 |
inline bool GetRepeatedMessage(const char *pszFieldName, int index, const protobuf::Message **message) |
|
skamonkey@3743
|
813 |
{ |
|
skamonkey@3743
|
814 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
815 |
CHECK_FIELD_TYPE(MESSAGE); |
|
skamonkey@3743
|
816 |
CHECK_FIELD_REPEATED(); |
|
skamonkey@3743
|
817 |
CHECK_REPEATED_ELEMENT(index); |
|
skamonkey@3743
|
818 |
|
|
skamonkey@3743
|
819 |
const protobuf::Message *m = &msg->GetReflection()->GetRepeatedMessage(*msg, field, index); |
|
skamonkey@3743
|
820 |
*message = m; |
|
skamonkey@3743
|
821 |
|
|
skamonkey@3743
|
822 |
return true; |
|
skamonkey@3743
|
823 |
} |
|
skamonkey@3743
|
824 |
|
|
skamonkey@3743
|
825 |
inline bool AddMessage(const char *pszFieldName, protobuf::Message **message) |
|
skamonkey@3743
|
826 |
{ |
|
skamonkey@3743
|
827 |
GETCHECK_FIELD(); |
|
skamonkey@3743
|
828 |
CHECK_FIELD_TYPE(MESSAGE); |
|
skamonkey@3743
|
829 |
CHECK_FIELD_REPEATED(); |
|
skamonkey@3743
|
830 |
|
|
skamonkey@3743
|
831 |
*message = msg->GetReflection()->AddMessage(msg, field); |
|
skamonkey@3743
|
832 |
|
|
skamonkey@3743
|
833 |
return true; |
|
skamonkey@3743
|
834 |
} |
|
skamonkey@3743
|
835 |
|
|
skamonkey@3743
|
836 |
inline int GetRepeatedFieldCount(const char *pszFieldName) |
|
skamonkey@3743
|
837 |
{ |
|
skamonkey@3743
|
838 |
const protobuf::FieldDescriptor *field = msg->GetDescriptor()->FindFieldByName(pszFieldName); \ |
|
skamonkey@3743
|
839 |
if (!field) |
|
skamonkey@3743
|
840 |
return -1; |
|
skamonkey@3743
|
841 |
|
|
skamonkey@3743
|
842 |
if (field->label() != protobuf::FieldDescriptor::LABEL_REPEATED) |
|
skamonkey@3743
|
843 |
return -1; |
|
skamonkey@3743
|
844 |
|
|
skamonkey@3743
|
845 |
return msg->GetReflection()->FieldSize(*msg, field); |
|
skamonkey@3743
|
846 |
} |
|
skamonkey@3743
|
847 |
|
|
skamonkey@3743
|
848 |
private: |
|
skamonkey@3743
|
849 |
protobuf::Message *msg; |
|
skamonkey@3743
|
850 |
PBHandleList childHandles; |
|
skamonkey@3743
|
851 |
}; |
|
skamonkey@3743
|
852 |
|
|
skamonkey@3743
|
853 |
#endif // _INCLUDE_SOURCEMOD_SMPBMESSAGE_H_ |