lcm_coretypes.h
Go to the documentation of this file.
1 /**************************************************************************************************
2  Software License Agreement (BSD License)
3 
4  Copyright (c) 2011-2013, LAR toolkit developers - University of Aveiro - http://lars.mec.ua.pt
5  All rights reserved.
6 
7  Redistribution and use in source and binary forms, with or without modification, are permitted
8  provided that the following conditions are met:
9 
10  *Redistributions of source code must retain the above copyright notice, this list of
11  conditions and the following disclaimer.
12  *Redistributions in binary form must reproduce the above copyright notice, this list of
13  conditions and the following disclaimer in the documentation and/or other materials provided
14  with the distribution.
15  *Neither the name of the University of Aveiro nor the names of its contributors may be used to
16  endorse or promote products derived from this software without specific prior written permission.
17 
18  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
19  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
20  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
21  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
24  IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
25  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 ***************************************************************************************************/
33 #ifndef _LCM_LIB_INLINE_H
34 #define _LCM_LIB_INLINE_H
35 
36 #include <stdio.h>
37 #include <stdint.h>
38 #include <string.h>
39 #include <stdlib.h>
40 
41 #ifdef __cplusplus
42 extern "C" {
43 #endif
44 
46 {
47  float f;
48  uint32_t i;
49 };
50 
52 {
53  double f;
54  uint64_t i;
55 };
56 
59 {
61  void *v;
62 };
63 
67 #define __boolean_hash_recursive __int8_t_hash_recursive
68 #define __boolean_decode_array_cleanup __int8_t_decode_array_cleanup
69 #define __boolean_encoded_array_size __int8_t_encoded_array_size
70 #define __boolean_encode_array __int8_t_encode_array
71 #define __boolean_decode_array __int8_t_decode_array
72 #define __boolean_clone_array __int8_t_clone_array
73 #define boolean_encoded_size int8_t_encoded_size
74 
78 #define __byte_hash_recursive(p) 0
79 #define __byte_decode_array_cleanup(p, sz) {}
80 #define byte_encoded_size(p) ( sizeof(int64_t) + sizeof(uint8_t) )
81 
82 static inline int __byte_encoded_array_size(const uint8_t *p, int elements)
83 {
84  return sizeof(uint8_t) * elements;
85 }
86 
87 static inline int __byte_encode_array(void *_buf, int offset, int maxlen, const uint8_t *p, int elements)
88 {
89  if (maxlen < elements)
90  return -1;
91 
92  uint8_t *buf = (uint8_t*) _buf;
93  memcpy(&buf[offset], p, elements);
94 
95  return elements;
96 }
97 
98 static inline int __byte_decode_array(const void *_buf, int offset, int maxlen, uint8_t *p, int elements)
99 {
100  if (maxlen < elements)
101  return -1;
102 
103  uint8_t *buf = (uint8_t*) _buf;
104  memcpy(p, &buf[offset], elements);
105 
106  return elements;
107 }
108 
109 static inline int __byte_clone_array(const uint8_t *p, uint8_t *q, int elements)
110 {
111  memcpy(q, p, elements * sizeof(uint8_t));
112  return 0;
113 }
117 #define __int8_t_hash_recursive(p) 0
118 #define __int8_t_decode_array_cleanup(p, sz) {}
119 #define int8_t_encoded_size(p) ( sizeof(int64_t) + sizeof(int8_t) )
120 
121 static inline int __int8_t_encoded_array_size(const int8_t *p, int elements)
122 {
123  return sizeof(int8_t) * elements;
124 }
125 
126 static inline int __int8_t_encode_array(void *_buf, int offset, int maxlen, const int8_t *p, int elements)
127 {
128  if (maxlen < elements)
129  return -1;
130 
131  int8_t *buf = (int8_t*) _buf;
132  memcpy(&buf[offset], p, elements);
133 
134  return elements;
135 }
136 
137 static inline int __int8_t_decode_array(const void *_buf, int offset, int maxlen, int8_t *p, int elements)
138 {
139  if (maxlen < elements)
140  return -1;
141 
142  int8_t *buf = (int8_t*) _buf;
143  memcpy(p, &buf[offset], elements);
144 
145  return elements;
146 }
147 
148 static inline int __int8_t_clone_array(const int8_t *p, int8_t *q, int elements)
149 {
150  memcpy(q, p, elements * sizeof(int8_t));
151  return 0;
152 }
153 
157 #define __int16_t_hash_recursive(p) 0
158 #define __int16_t_decode_array_cleanup(p, sz) {}
159 #define int16_t_encoded_size(p) ( sizeof(int64_t) + sizeof(int16_t) )
160 
161 static inline int __int16_t_encoded_array_size(const int16_t *p, int elements)
162 {
163  return sizeof(int16_t) * elements;
164 }
165 
166 static inline int __int16_t_encode_array(void *_buf, int offset, int maxlen, const int16_t *p, int elements)
167 {
168  int total_size = sizeof(int16_t) * elements;
169  uint8_t *buf = (uint8_t*) _buf;
170  int pos = offset;
171  int element;
172 
173  if (maxlen < total_size)
174  return -1;
175 
176  for (element = 0; element < elements; element++) {
177  int16_t v = p[element];
178  buf[pos++] = (v>>8) & 0xff;
179  buf[pos++] = (v & 0xff);
180  }
181 
182  return total_size;
183 }
184 
185 static inline int __int16_t_decode_array(const void *_buf, int offset, int maxlen, int16_t *p, int elements)
186 {
187  int total_size = sizeof(int16_t) * elements;
188  uint8_t *buf = (uint8_t*) _buf;
189  int pos = offset;
190  int element;
191 
192  if (maxlen < total_size)
193  return -1;
194 
195  for (element = 0; element < elements; element++) {
196  p[element] = (buf[pos]<<8) + buf[pos+1];
197  pos+=2;
198  }
199 
200  return total_size;
201 }
202 
203 static inline int __int16_t_clone_array(const int16_t *p, int16_t *q, int elements)
204 {
205  memcpy(q, p, elements * sizeof(int16_t));
206  return 0;
207 }
208 
212 #define __int32_t_hash_recursive(p) 0
213 #define __int32_t_decode_array_cleanup(p, sz) {}
214 #define int32_t_encoded_size(p) ( sizeof(int64_t) + sizeof(int32_t) )
215 
216 static inline int __int32_t_encoded_array_size(const int32_t *p, int elements)
217 {
218  return sizeof(int32_t) * elements;
219 }
220 
221 static inline int __int32_t_encode_array(void *_buf, int offset, int maxlen, const int32_t *p, int elements)
222 {
223  int total_size = sizeof(int32_t) * elements;
224  uint8_t *buf = (uint8_t*) _buf;
225  int pos = offset;
226  int element;
227 
228  if (maxlen < total_size)
229  return -1;
230 
231  for (element = 0; element < elements; element++) {
232  int32_t v = p[element];
233  buf[pos++] = (v>>24)&0xff;
234  buf[pos++] = (v>>16)&0xff;
235  buf[pos++] = (v>>8)&0xff;
236  buf[pos++] = (v & 0xff);
237  }
238 
239  return total_size;
240 }
241 
242 static inline int __int32_t_decode_array(const void *_buf, int offset, int maxlen, int32_t *p, int elements)
243 {
244  int total_size = sizeof(int32_t) * elements;
245  uint8_t *buf = (uint8_t*) _buf;
246  int pos = offset;
247  int element;
248 
249  if (maxlen < total_size)
250  return -1;
251 
252  for (element = 0; element < elements; element++) {
253  p[element] = (buf[pos+0]<<24) + (buf[pos+1]<<16) + (buf[pos+2]<<8) + buf[pos+3];
254  pos+=4;
255  }
256 
257  return total_size;
258 }
259 
260 static inline int __int32_t_clone_array(const int32_t *p, int32_t *q, int elements)
261 {
262  memcpy(q, p, elements * sizeof(int32_t));
263  return 0;
264 }
265 
269 #define __int64_t_hash_recursive(p) 0
270 #define __int64_t_decode_array_cleanup(p, sz) {}
271 #define int64_t_encoded_size(p) ( sizeof(int64_t) + sizeof(int64_t) )
272 
273 static inline int __int64_t_encoded_array_size(const int64_t *p, int elements)
274 {
275  return sizeof(int64_t) * elements;
276 }
277 
278 static inline int __int64_t_encode_array(void *_buf, int offset, int maxlen, const int64_t *p, int elements)
279 {
280  int total_size = sizeof(int64_t) * elements;
281  uint8_t *buf = (uint8_t*) _buf;
282  int pos = offset;
283  int element;
284 
285  if (maxlen < total_size)
286  return -1;
287 
288  for (element = 0; element < elements; element++) {
289  int64_t v = p[element];
290  buf[pos++] = (v>>56)&0xff;
291  buf[pos++] = (v>>48)&0xff;
292  buf[pos++] = (v>>40)&0xff;
293  buf[pos++] = (v>>32)&0xff;
294  buf[pos++] = (v>>24)&0xff;
295  buf[pos++] = (v>>16)&0xff;
296  buf[pos++] = (v>>8)&0xff;
297  buf[pos++] = (v & 0xff);
298  }
299 
300  return total_size;
301 }
302 
303 static inline int __int64_t_decode_array(const void *_buf, int offset, int maxlen, int64_t *p, int elements)
304 {
305  int total_size = sizeof(int64_t) * elements;
306  uint8_t *buf = (uint8_t*) _buf;
307  int pos = offset;
308  int element;
309 
310  if (maxlen < total_size)
311  return -1;
312 
313  for (element = 0; element < elements; element++) {
314  int64_t a = (buf[pos+0]<<24) + (buf[pos+1]<<16) + (buf[pos+2]<<8) + buf[pos+3];
315  pos+=4;
316  int64_t b = (buf[pos+0]<<24) + (buf[pos+1]<<16) + (buf[pos+2]<<8) + buf[pos+3];
317  pos+=4;
318  p[element] = (a<<32) + (b&0xffffffff);
319  }
320 
321  return total_size;
322 }
323 
324 static inline int __int64_t_clone_array(const int64_t *p, int64_t *q, int elements)
325 {
326  memcpy(q, p, elements * sizeof(int64_t));
327  return 0;
328 }
329 
333 #define __float_hash_recursive(p) 0
334 #define __float_decode_array_cleanup(p, sz) {}
335 #define float_encoded_size(p) ( sizeof(int64_t) + sizeof(float) )
336 
337 static inline int __float_encoded_array_size(const float *p, int elements)
338 {
339  return sizeof(float) * elements;
340 }
341 
342 static inline int __float_encode_array(void *_buf, int offset, int maxlen, const float *p, int elements)
343 {
344  return __int32_t_encode_array(_buf, offset, maxlen, (int32_t*) p, elements);
345 }
346 
347 static inline int __float_decode_array(const void *_buf, int offset, int maxlen, float *p, int elements)
348 {
349  return __int32_t_decode_array(_buf, offset, maxlen, (int32_t*) p, elements);
350 }
351 
352 static inline int __float_clone_array(const float *p, float *q, int elements)
353 {
354  memcpy(q, p, elements * sizeof(float));
355  return 0;
356 }
357 
361 #define __double_hash_recursive(p) 0
362 #define __double_decode_array_cleanup(p, sz) {}
363 #define double_encoded_size(p) ( sizeof(int64_t) + sizeof(double) )
364 
365 static inline int __double_encoded_array_size(const double *p, int elements)
366 {
367  return sizeof(double) * elements;
368 }
369 
370 static inline int __double_encode_array(void *_buf, int offset, int maxlen, const double *p, int elements)
371 {
372  return __int64_t_encode_array(_buf, offset, maxlen, (int64_t*) p, elements);
373 }
374 
375 static inline int __double_decode_array(const void *_buf, int offset, int maxlen, double *p, int elements)
376 {
377  return __int64_t_decode_array(_buf, offset, maxlen, (int64_t*) p, elements);
378 }
379 
380 static inline int __double_clone_array(const double *p, double *q, int elements)
381 {
382  memcpy(q, p, elements * sizeof(double));
383  return 0;
384 }
385 
389 #define __string_hash_recursive(p) 0
390 
391 static inline int __string_decode_array_cleanup(char **s, int elements)
392 {
393  int element;
394  for (element = 0; element < elements; element++)
395  free(s[element]);
396  return 0;
397 }
398 
399 static inline int __string_encoded_array_size(char * const *s, int elements)
400 {
401  int size = 0;
402  int element;
403  for (element = 0; element < elements; element++)
404  size += 4 + strlen(s[element]) + 1;
405 
406  return size;
407 }
408 
409 static inline int __string_encoded_size(char * const *s)
410 {
411  return sizeof(int64_t) + __string_encoded_array_size(s, 1);
412 }
413 
414 static inline int __string_encode_array(void *_buf, int offset, int maxlen, char * const *p, int elements)
415 {
416  int pos = 0, thislen;
417  int element;
418 
419  for (element = 0; element < elements; element++) {
420  int length = strlen(p[element]) + 1; // length includes \0
421 
422  thislen = __int32_t_encode_array(_buf, offset + pos, maxlen - pos, &length, 1);
423  if (thislen < 0) return thislen; else pos += thislen;
424 
425  thislen = __int8_t_encode_array(_buf, offset + pos, maxlen - pos, (int8_t*) p[element], length);
426  if (thislen < 0) return thislen; else pos += thislen;
427  }
428 
429  return pos;
430 }
431 
432 static inline int __string_decode_array(const void *_buf, int offset, int maxlen, char **p, int elements)
433 {
434  int pos = 0, thislen;
435  int element;
436 
437  for (element = 0; element < elements; element++) {
438  int length;
439 
440  // read length including \0
441  thislen = __int32_t_decode_array(_buf, offset + pos, maxlen - pos, &length, 1);
442  if (thislen < 0) return thislen; else pos += thislen;
443 
444  p[element] = (char*) malloc(length);
445  thislen = __int8_t_decode_array(_buf, offset + pos, maxlen - pos, (int8_t*) p[element], length);
446  if (thislen < 0) return thislen; else pos += thislen;
447  }
448 
449  return pos;
450 }
451 
452 static inline int __string_clone_array(char * const *p, char **q, int elements)
453 {
454  int element;
455  for (element = 0; element < elements; element++) {
456  // because strdup is not C99
457  size_t len = strlen(p[element]) + 1;
458  q[element] = (char*) malloc (len);
459  memcpy (q[element], p[element], len);
460  }
461  return 0;
462 }
463 
464 static inline void *lcm_malloc(size_t sz)
465 {
466  if (sz)
467  return malloc(sz);
468  return NULL;
469 }
470 
471 #ifdef __cplusplus
472 }
473 #endif
474 
475 #endif
476 
static int __string_clone_array(char *const *p, char **q, int elements)
static void * lcm_malloc(size_t sz)
static int __int16_t_clone_array(const int16_t *p, int16_t *q, int elements)
static int __int32_t_encoded_array_size(const int32_t *p, int elements)
static int __int64_t_decode_array(const void *_buf, int offset, int maxlen, int64_t *p, int elements)
static int __byte_encode_array(void *_buf, int offset, int maxlen, const uint8_t *p, int elements)
Definition: lcm_coretypes.h:87
static int __int16_t_encode_array(void *_buf, int offset, int maxlen, const int16_t *p, int elements)
static int __string_encoded_size(char *const *s)
static int __int8_t_decode_array(const void *_buf, int offset, int maxlen, int8_t *p, int elements)
static int __float_decode_array(const void *_buf, int offset, int maxlen, float *p, int elements)
static int __float_encoded_array_size(const float *p, int elements)
static int __string_encoded_array_size(char *const *s, int elements)
static int __int8_t_encoded_array_size(const int8_t *p, int elements)
static int __int64_t_encode_array(void *_buf, int offset, int maxlen, const int64_t *p, int elements)
static int __string_decode_array(const void *_buf, int offset, int maxlen, char **p, int elements)
static int __double_encoded_array_size(const double *p, int elements)
static int __int32_t_clone_array(const int32_t *p, int32_t *q, int elements)
static int __int32_t_decode_array(const void *_buf, int offset, int maxlen, int32_t *p, int elements)
static int __int64_t_clone_array(const int64_t *p, int64_t *q, int elements)
static int __int16_t_decode_array(const void *_buf, int offset, int maxlen, int16_t *p, int elements)
uint32_t i
Definition: lcm_coretypes.h:48
static int __int8_t_encode_array(void *_buf, int offset, int maxlen, const int8_t *p, int elements)
static int __float_encode_array(void *_buf, int offset, int maxlen, const float *p, int elements)
static int __int32_t_encode_array(void *_buf, int offset, int maxlen, const int32_t *p, int elements)
static int __string_decode_array_cleanup(char **s, int elements)
static int __string_encode_array(void *_buf, int offset, int maxlen, char *const *p, int elements)
static int __byte_encoded_array_size(const uint8_t *p, int elements)
Definition: lcm_coretypes.h:82
static int __int16_t_encoded_array_size(const int16_t *p, int elements)
static int __double_clone_array(const double *p, double *q, int elements)
static int __int64_t_encoded_array_size(const int64_t *p, int elements)
static int __double_decode_array(const void *_buf, int offset, int maxlen, double *p, int elements)
static int __double_encode_array(void *_buf, int offset, int maxlen, const double *p, int elements)
static int __byte_decode_array(const void *_buf, int offset, int maxlen, uint8_t *p, int elements)
Definition: lcm_coretypes.h:98
const __lcm_hash_ptr * parent
Definition: lcm_coretypes.h:60
static int __int8_t_clone_array(const int8_t *p, int8_t *q, int elements)
static int __byte_clone_array(const uint8_t *p, uint8_t *q, int elements)
static int __float_clone_array(const float *p, float *q, int elements)


mit_darpa_logs_player
Author(s): Miguel Oliveira
autogenerated on Mon Mar 2 2015 01:32:15