diff options
Diffstat (limited to 'lcmtype/laser_t.cpp')
-rw-r--r-- | lcmtype/laser_t.cpp | 364 |
1 files changed, 364 insertions, 0 deletions
diff --git a/lcmtype/laser_t.cpp b/lcmtype/laser_t.cpp new file mode 100644 index 0000000..23dca66 --- /dev/null +++ b/lcmtype/laser_t.cpp | |||
@@ -0,0 +1,364 @@ | |||
1 | /** THIS IS AN AUTOMATICALLY GENERATED FILE. DO NOT MODIFY | ||
2 | * BY HAND!! | ||
3 | * | ||
4 | * Generated by lcm-gen | ||
5 | **/ | ||
6 | |||
7 | #include "laser_t.h" | ||
8 | #include <string.h> | ||
9 | |||
10 | static int __laser_t_hash_computed; | ||
11 | static int64_t __laser_t_hash; | ||
12 | |||
13 | int64_t __laser_t_hash_recursive(const __lcm_hash_ptr *p) { | ||
14 | const __lcm_hash_ptr *fp; | ||
15 | for (fp = p; fp != NULL; fp = fp->parent) | ||
16 | if (fp->v == __laser_t_get_hash) | ||
17 | return 0; | ||
18 | |||
19 | const __lcm_hash_ptr cp = {p, (void *)__laser_t_get_hash}; | ||
20 | (void)cp; | ||
21 | |||
22 | int64_t hash = 0xf1e8ba118c05af46LL + __int64_t_hash_recursive(&cp) + | ||
23 | __int32_t_hash_recursive(&cp) + __float_hash_recursive(&cp) + | ||
24 | __int32_t_hash_recursive(&cp) + __float_hash_recursive(&cp) + | ||
25 | __float_hash_recursive(&cp) + __float_hash_recursive(&cp); | ||
26 | |||
27 | return (hash << 1) + ((hash >> 63) & 1); | ||
28 | } | ||
29 | |||
30 | int64_t __laser_t_get_hash(void) { | ||
31 | if (!__laser_t_hash_computed) { | ||
32 | __laser_t_hash = __laser_t_hash_recursive(NULL); | ||
33 | __laser_t_hash_computed = 1; | ||
34 | } | ||
35 | |||
36 | return __laser_t_hash; | ||
37 | } | ||
38 | |||
39 | int __laser_t_encode_array(void *buf, int offset, int maxlen, const laser_t *p, | ||
40 | int elements) { | ||
41 | int pos = 0, thislen, element; | ||
42 | |||
43 | for (element = 0; element < elements; element++) { | ||
44 | |||
45 | thislen = __int64_t_encode_array(buf, offset + pos, maxlen - pos, | ||
46 | &(p[element].utime), 1); | ||
47 | if (thislen < 0) | ||
48 | return thislen; | ||
49 | else | ||
50 | pos += thislen; | ||
51 | |||
52 | thislen = __int32_t_encode_array(buf, offset + pos, maxlen - pos, | ||
53 | &(p[element].nranges), 1); | ||
54 | if (thislen < 0) | ||
55 | return thislen; | ||
56 | else | ||
57 | pos += thislen; | ||
58 | |||
59 | thislen = __float_encode_array(buf, offset + pos, maxlen - pos, | ||
60 | p[element].ranges, p[element].nranges); | ||
61 | if (thislen < 0) | ||
62 | return thislen; | ||
63 | else | ||
64 | pos += thislen; | ||
65 | |||
66 | thislen = __int32_t_encode_array(buf, offset + pos, maxlen - pos, | ||
67 | &(p[element].nintensities), 1); | ||
68 | if (thislen < 0) | ||
69 | return thislen; | ||
70 | else | ||
71 | pos += thislen; | ||
72 | |||
73 | thislen = __float_encode_array(buf, offset + pos, maxlen - pos, | ||
74 | p[element].intensities, | ||
75 | p[element].nintensities); | ||
76 | if (thislen < 0) | ||
77 | return thislen; | ||
78 | else | ||
79 | pos += thislen; | ||
80 | |||
81 | thislen = __float_encode_array(buf, offset + pos, maxlen - pos, | ||
82 | &(p[element].rad0), 1); | ||
83 | if (thislen < 0) | ||
84 | return thislen; | ||
85 | else | ||
86 | pos += thislen; | ||
87 | |||
88 | thislen = __float_encode_array(buf, offset + pos, maxlen - pos, | ||
89 | &(p[element].radstep), 1); | ||
90 | if (thislen < 0) | ||
91 | return thislen; | ||
92 | else | ||
93 | pos += thislen; | ||
94 | } | ||
95 | return pos; | ||
96 | } | ||
97 | |||
98 | int laser_t_encode(void *buf, int offset, int maxlen, const laser_t *p) { | ||
99 | int pos = 0, thislen; | ||
100 | int64_t hash = __laser_t_get_hash(); | ||
101 | |||
102 | thislen = __int64_t_encode_array(buf, offset + pos, maxlen - pos, &hash, 1); | ||
103 | if (thislen < 0) | ||
104 | return thislen; | ||
105 | else | ||
106 | pos += thislen; | ||
107 | |||
108 | thislen = __laser_t_encode_array(buf, offset + pos, maxlen - pos, p, 1); | ||
109 | if (thislen < 0) | ||
110 | return thislen; | ||
111 | else | ||
112 | pos += thislen; | ||
113 | |||
114 | return pos; | ||
115 | } | ||
116 | |||
117 | int __laser_t_encoded_array_size(const laser_t *p, int elements) { | ||
118 | int size = 0, element; | ||
119 | for (element = 0; element < elements; element++) { | ||
120 | |||
121 | size += __int64_t_encoded_array_size(&(p[element].utime), 1); | ||
122 | |||
123 | size += __int32_t_encoded_array_size(&(p[element].nranges), 1); | ||
124 | |||
125 | size += | ||
126 | __float_encoded_array_size(p[element].ranges, p[element].nranges); | ||
127 | |||
128 | size += __int32_t_encoded_array_size(&(p[element].nintensities), 1); | ||
129 | |||
130 | size += __float_encoded_array_size(p[element].intensities, | ||
131 | p[element].nintensities); | ||
132 | |||
133 | size += __float_encoded_array_size(&(p[element].rad0), 1); | ||
134 | |||
135 | size += __float_encoded_array_size(&(p[element].radstep), 1); | ||
136 | } | ||
137 | return size; | ||
138 | } | ||
139 | |||
140 | int laser_t_encoded_size(const laser_t *p) { | ||
141 | return 8 + __laser_t_encoded_array_size(p, 1); | ||
142 | } | ||
143 | |||
144 | int __laser_t_decode_array(const void *buf, int offset, int maxlen, laser_t *p, | ||
145 | int elements) { | ||
146 | int pos = 0, thislen, element; | ||
147 | |||
148 | for (element = 0; element < elements; element++) { | ||
149 | |||
150 | thislen = __int64_t_decode_array(buf, offset + pos, maxlen - pos, | ||
151 | &(p[element].utime), 1); | ||
152 | if (thislen < 0) | ||
153 | return thislen; | ||
154 | else | ||
155 | pos += thislen; | ||
156 | |||
157 | thislen = __int32_t_decode_array(buf, offset + pos, maxlen - pos, | ||
158 | &(p[element].nranges), 1); | ||
159 | if (thislen < 0) | ||
160 | return thislen; | ||
161 | else | ||
162 | pos += thislen; | ||
163 | |||
164 | p[element].ranges = | ||
165 | (float *)lcm_malloc(sizeof(float) * p[element].nranges); | ||
166 | thislen = __float_decode_array(buf, offset + pos, maxlen - pos, | ||
167 | p[element].ranges, p[element].nranges); | ||
168 | if (thislen < 0) | ||
169 | return thislen; | ||
170 | else | ||
171 | pos += thislen; | ||
172 | |||
173 | thislen = __int32_t_decode_array(buf, offset + pos, maxlen - pos, | ||
174 | &(p[element].nintensities), 1); | ||
175 | if (thislen < 0) | ||
176 | return thislen; | ||
177 | else | ||
178 | pos += thislen; | ||
179 | |||
180 | p[element].intensities = | ||
181 | (float *)lcm_malloc(sizeof(float) * p[element].nintensities); | ||
182 | thislen = __float_decode_array(buf, offset + pos, maxlen - pos, | ||
183 | p[element].intensities, | ||
184 | p[element].nintensities); | ||
185 | if (thislen < 0) | ||
186 | return thislen; | ||
187 | else | ||
188 | pos += thislen; | ||
189 | |||
190 | thislen = __float_decode_array(buf, offset + pos, maxlen - pos, | ||
191 | &(p[element].rad0), 1); | ||
192 | if (thislen < 0) | ||
193 | return thislen; | ||
194 | else | ||
195 | pos += thislen; | ||
196 | |||
197 | thislen = __float_decode_array(buf, offset + pos, maxlen - pos, | ||
198 | &(p[element].radstep), 1); | ||
199 | if (thislen < 0) | ||
200 | return thislen; | ||
201 | else | ||
202 | pos += thislen; | ||
203 | } | ||
204 | return pos; | ||
205 | } | ||
206 | |||
207 | int __laser_t_decode_array_cleanup(laser_t *p, int elements) { | ||
208 | int element; | ||
209 | for (element = 0; element < elements; element++) { | ||
210 | |||
211 | __int64_t_decode_array_cleanup(&(p[element].utime), 1); | ||
212 | |||
213 | __int32_t_decode_array_cleanup(&(p[element].nranges), 1); | ||
214 | |||
215 | __float_decode_array_cleanup(p[element].ranges, p[element].nranges); | ||
216 | if (p[element].ranges) | ||
217 | free(p[element].ranges); | ||
218 | |||
219 | __int32_t_decode_array_cleanup(&(p[element].nintensities), 1); | ||
220 | |||
221 | __float_decode_array_cleanup(p[element].intensities, | ||
222 | p[element].nintensities); | ||
223 | if (p[element].intensities) | ||
224 | free(p[element].intensities); | ||
225 | |||
226 | __float_decode_array_cleanup(&(p[element].rad0), 1); | ||
227 | |||
228 | __float_decode_array_cleanup(&(p[element].radstep), 1); | ||
229 | } | ||
230 | return 0; | ||
231 | } | ||
232 | |||
233 | int laser_t_decode(const void *buf, int offset, int maxlen, laser_t *p) { | ||
234 | int pos = 0, thislen; | ||
235 | int64_t hash = __laser_t_get_hash(); | ||
236 | |||
237 | int64_t this_hash; | ||
238 | thislen = | ||
239 | __int64_t_decode_array(buf, offset + pos, maxlen - pos, &this_hash, 1); | ||
240 | if (thislen < 0) | ||
241 | return thislen; | ||
242 | else | ||
243 | pos += thislen; | ||
244 | if (this_hash != hash) | ||
245 | return -1; | ||
246 | |||
247 | thislen = __laser_t_decode_array(buf, offset + pos, maxlen - pos, p, 1); | ||
248 | if (thislen < 0) | ||
249 | return thislen; | ||
250 | else | ||
251 | pos += thislen; | ||
252 | |||
253 | return pos; | ||
254 | } | ||
255 | |||
256 | int laser_t_decode_cleanup(laser_t *p) { | ||
257 | return __laser_t_decode_array_cleanup(p, 1); | ||
258 | } | ||
259 | |||
260 | int __laser_t_clone_array(const laser_t *p, laser_t *q, int elements) { | ||
261 | int element; | ||
262 | for (element = 0; element < elements; element++) { | ||
263 | |||
264 | __int64_t_clone_array(&(p[element].utime), &(q[element].utime), 1); | ||
265 | |||
266 | __int32_t_clone_array(&(p[element].nranges), &(q[element].nranges), 1); | ||
267 | |||
268 | q[element].ranges = | ||
269 | (float *)lcm_malloc(sizeof(float) * q[element].nranges); | ||
270 | __float_clone_array(p[element].ranges, q[element].ranges, | ||
271 | p[element].nranges); | ||
272 | |||
273 | __int32_t_clone_array(&(p[element].nintensities), | ||
274 | &(q[element].nintensities), 1); | ||
275 | |||
276 | q[element].intensities = | ||
277 | (float *)lcm_malloc(sizeof(float) * q[element].nintensities); | ||
278 | __float_clone_array(p[element].intensities, q[element].intensities, | ||
279 | p[element].nintensities); | ||
280 | |||
281 | __float_clone_array(&(p[element].rad0), &(q[element].rad0), 1); | ||
282 | |||
283 | __float_clone_array(&(p[element].radstep), &(q[element].radstep), 1); | ||
284 | } | ||
285 | return 0; | ||
286 | } | ||
287 | |||
288 | laser_t *laser_t_copy(const laser_t *p) { | ||
289 | laser_t *q = (laser_t *)malloc(sizeof(laser_t)); | ||
290 | __laser_t_clone_array(p, q, 1); | ||
291 | return q; | ||
292 | } | ||
293 | |||
294 | void laser_t_destroy(laser_t *p) { | ||
295 | __laser_t_decode_array_cleanup(p, 1); | ||
296 | free(p); | ||
297 | } | ||
298 | |||
299 | int laser_t_publish(lcm_t *lc, const char *channel, const laser_t *p) { | ||
300 | int max_data_size = laser_t_encoded_size(p); | ||
301 | uint8_t *buf = (uint8_t *)malloc(max_data_size); | ||
302 | if (!buf) | ||
303 | return -1; | ||
304 | int data_size = laser_t_encode(buf, 0, max_data_size, p); | ||
305 | if (data_size < 0) { | ||
306 | free(buf); | ||
307 | return data_size; | ||
308 | } | ||
309 | int status = lcm_publish(lc, channel, buf, data_size); | ||
310 | free(buf); | ||
311 | return status; | ||
312 | } | ||
313 | |||
314 | struct _laser_t_subscription_t { | ||
315 | laser_t_handler_t user_handler; | ||
316 | void *userdata; | ||
317 | lcm_subscription_t *lc_h; | ||
318 | }; | ||
319 | static void laser_t_handler_stub(const lcm_recv_buf_t *rbuf, | ||
320 | const char *channel, void *userdata) { | ||
321 | int status; | ||
322 | laser_t p; | ||
323 | memset(&p, 0, sizeof(laser_t)); | ||
324 | status = laser_t_decode(rbuf->data, 0, rbuf->data_size, &p); | ||
325 | if (status < 0) { | ||
326 | fprintf(stderr, "error %d decoding laser_t!!!\n", status); | ||
327 | return; | ||
328 | } | ||
329 | |||
330 | laser_t_subscription_t *h = (laser_t_subscription_t *)userdata; | ||
331 | h->user_handler(rbuf, channel, &p, h->userdata); | ||
332 | |||
333 | laser_t_decode_cleanup(&p); | ||
334 | } | ||
335 | |||
336 | laser_t_subscription_t *laser_t_subscribe(lcm_t *lcm, const char *channel, | ||
337 | laser_t_handler_t f, void *userdata) { | ||
338 | laser_t_subscription_t *n = | ||
339 | (laser_t_subscription_t *)malloc(sizeof(laser_t_subscription_t)); | ||
340 | n->user_handler = f; | ||
341 | n->userdata = userdata; | ||
342 | n->lc_h = lcm_subscribe(lcm, channel, laser_t_handler_stub, n); | ||
343 | if (n->lc_h == NULL) { | ||
344 | fprintf(stderr, "couldn't reg laser_t LCM handler!\n"); | ||
345 | free(n); | ||
346 | return NULL; | ||
347 | } | ||
348 | return n; | ||
349 | } | ||
350 | |||
351 | int laser_t_subscription_set_queue_capacity(laser_t_subscription_t *subs, | ||
352 | int num_messages) { | ||
353 | return lcm_subscription_set_queue_capacity(subs->lc_h, num_messages); | ||
354 | } | ||
355 | |||
356 | int laser_t_unsubscribe(lcm_t *lcm, laser_t_subscription_t *hid) { | ||
357 | int status = lcm_unsubscribe(lcm, hid->lc_h); | ||
358 | if (0 != status) { | ||
359 | fprintf(stderr, "couldn't unsubscribe laser_t_handler %p!\n", hid); | ||
360 | return -1; | ||
361 | } | ||
362 | free(hid); | ||
363 | return 0; | ||
364 | } | ||