PX4 Firmware
PX4 Autopilot Software http://px4.io
utarray.h File Reference
#include <stddef.h>
#include <string.h>
#include <stdlib.h>
Include dependency graph for utarray.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  UT_icd
 
struct  UT_array
 

Macros

#define UTARRAY_VERSION   1.9.6
 
#define _UNUSED_   = {sizeof(int),NULL,NULL,NULL}
 
#define oom()   system_exit(-1)
 
#define utarray_init(a, _icd)
 
#define utarray_done(a)
 
#define utarray_new(a, _icd)
 
#define utarray_free(a)
 
#define utarray_reserve(a, by)
 
#define utarray_push_back(a, p)
 
#define utarray_pop_back(a)
 
#define utarray_extend_back(a)
 
#define utarray_len(a)   ((a)->i)
 
#define utarray_eltptr(a, j)   (((j) < (a)->i) ? _utarray_eltptr(a,j) : NULL)
 
#define _utarray_eltptr(a, j)   ((char*)((a)->d + ((a)->icd.sz*(j) )))
 
#define utarray_insert(a, p, j)
 
#define utarray_inserta(a, w, j)
 
#define utarray_resize(dst, num)
 
#define utarray_concat(dst, src)
 
#define utarray_erase(a, pos, len)
 
#define utarray_renew(a, u)
 
#define utarray_clear(a)
 
#define utarray_sort(a, cmp)
 
#define utarray_find(a, v, cmp)   bsearch((v),(a)->d,(a)->i,(a)->icd.sz,cmp)
 
#define utarray_front(a)   (((a)->i) ? (_utarray_eltptr(a,0)) : NULL)
 
#define utarray_next(a, e)   (((e)==NULL) ? utarray_front(a) : ((((a)->i) > (utarray_eltidx(a,e)+1)) ? _utarray_eltptr(a,utarray_eltidx(a,e)+1) : NULL))
 
#define utarray_prev(a, e)   (((e)==NULL) ? utarray_back(a) : ((utarray_eltidx(a,e) > 0) ? _utarray_eltptr(a,utarray_eltidx(a,e)-1) : NULL))
 
#define utarray_back(a)   (((a)->i) ? (_utarray_eltptr(a,(a)->i-1)) : NULL)
 
#define utarray_eltidx(a, e)   (((char*)(e) >= (char*)((a)->d)) ? (((char*)(e) - (char*)((a)->d))/(a)->icd.sz) : -1)
 

Typedefs

typedef void() ctor_f(void *dst, const void *src)
 
typedef void() dtor_f(void *elt)
 
typedef void() init_f(void *elt)
 

Functions

static void utarray_str_cpy (void *dst, const void *src)
 
static void utarray_str_dtor (void *elt)
 

Variables

static const UT_icd ut_str_icd _UNUSED_ = {sizeof(char*),NULL,utarray_str_cpy,utarray_str_dtor}
 

Macro Definition Documentation

◆ _UNUSED_

static const UT_icd ut_ptr_icd _UNUSED_   = {sizeof(int),NULL,NULL,NULL}

Definition at line 35 of file utarray.h.

◆ _utarray_eltptr

#define _utarray_eltptr (   a,
 
)    ((char*)((a)->d + ((a)->icd.sz*(j) )))

Definition at line 117 of file utarray.h.

◆ oom

#define oom ( )    system_exit(-1)

Definition at line 43 of file utarray.h.

◆ utarray_back

#define utarray_back (   a)    (((a)->i) ? (_utarray_eltptr(a,(a)->i-1)) : NULL)

Definition at line 217 of file utarray.h.

◆ utarray_clear

#define utarray_clear (   a)
Value:
do { \
if ((a)->i > 0) { \
if ((a)->icd.dtor) { \
size_t _ut_i; \
for(_ut_i=0; _ut_i < (a)->i; _ut_i++) { \
(a)->icd.dtor(utarray_eltptr(a,_ut_i)); \
} \
} \
(a)->i = 0; \
} \
} while(0)
#define utarray_eltptr(a, j)
Definition: utarray.h:116

Definition at line 196 of file utarray.h.

◆ utarray_concat

#define utarray_concat (   dst,
  src 
)
Value:
do { \
utarray_inserta((dst),(src),utarray_len(dst)); \
} while(0)
#define utarray_len(a)
Definition: utarray.h:114

Definition at line 173 of file utarray.h.

◆ utarray_done

#define utarray_done (   a)
Value:
do { \
if ((a)->n) { \
if ((a)->icd.dtor) { \
size_t _ut_i; \
for(_ut_i=0; _ut_i < (a)->i; _ut_i++) { \
(a)->icd.dtor(utarray_eltptr(a,_ut_i)); \
} \
} \
free((a)->d); \
} \
(a)->n=0; \
} while(0)
#define utarray_eltptr(a, j)
Definition: utarray.h:116

Definition at line 66 of file utarray.h.

◆ utarray_eltidx

#define utarray_eltidx (   a,
 
)    (((char*)(e) >= (char*)((a)->d)) ? (((char*)(e) - (char*)((a)->d))/(a)->icd.sz) : -1)

Definition at line 218 of file utarray.h.

Referenced by param_reset().

◆ utarray_eltptr

#define utarray_eltptr (   a,
 
)    (((j) < (a)->i) ? _utarray_eltptr(a,j) : NULL)

Definition at line 116 of file utarray.h.

◆ utarray_erase

#define utarray_erase (   a,
  pos,
  len 
)
Value:
do { \
if ((a)->icd.dtor) { \
size_t _ut_i; \
for(_ut_i=0; _ut_i < len; _ut_i++) { \
(a)->icd.dtor(utarray_eltptr((a),pos+_ut_i)); \
} \
} \
if ((a)->i > (pos+len)) { \
memmove( _utarray_eltptr((a),pos), _utarray_eltptr((a),pos+len), \
(((a)->i)-(pos+len))*((a)->icd.sz)); \
} \
(a)->i -= (len); \
} while(0)
#define utarray_eltptr(a, j)
Definition: utarray.h:116
#define _utarray_eltptr(a, j)
Definition: utarray.h:117

Definition at line 177 of file utarray.h.

Referenced by param_reset().

◆ utarray_extend_back

#define utarray_extend_back (   a)
Value:
do { \
utarray_reserve(a,1); \
if ((a)->icd.init) { (a)->icd.init(_utarray_eltptr(a,(a)->i)); } \
else { memset(_utarray_eltptr(a,(a)->i),0,(a)->icd.sz); } \
(a)->i++; \
} while(0)
#define _utarray_eltptr(a, j)
Definition: utarray.h:117

Definition at line 107 of file utarray.h.

◆ utarray_find

#define utarray_find (   a,
  v,
  cmp 
)    bsearch((v),(a)->d,(a)->i,(a)->icd.sz,cmp)

Definition at line 212 of file utarray.h.

Referenced by param_find_changed().

◆ utarray_free

#define utarray_free (   a)
Value:
do { \
utarray_done(a); \
free(a); \
} while(0)

Definition at line 84 of file utarray.h.

Referenced by param_reset_all_internal().

◆ utarray_front

#define utarray_front (   a)    (((a)->i) ? (_utarray_eltptr(a,0)) : NULL)

Definition at line 214 of file utarray.h.

◆ utarray_init

#define utarray_init (   a,
  _icd 
)
Value:
do { \
memset(a,0,sizeof(UT_array)); \
(a)->icd=*_icd; \
} while(0)

Definition at line 61 of file utarray.h.

◆ utarray_insert

#define utarray_insert (   a,
  p,
 
)
Value:
do { \
utarray_reserve(a,1); \
if (j > (a)->i) break; \
if ((j) < (a)->i) { \
memmove( _utarray_eltptr(a,(j)+1), _utarray_eltptr(a,j), \
((a)->i - (j))*((a)->icd.sz)); \
} \
if ((a)->icd.copy) { (a)->icd.copy( _utarray_eltptr(a,j), p); } \
else { memcpy(_utarray_eltptr(a,j), p, (a)->icd.sz); }; \
(a)->i++; \
} while(0)
#define _utarray_eltptr(a, j)
Definition: utarray.h:117

Definition at line 119 of file utarray.h.

◆ utarray_inserta

#define utarray_inserta (   a,
  w,
 
)
Value:
do { \
if (utarray_len(w) == 0) break; \
if (j > (a)->i) break; \
if ((j) < (a)->i) { \
memmove(_utarray_eltptr(a,(j)+utarray_len(w)), \
((a)->i - (j))*((a)->icd.sz)); \
} \
if ((a)->icd.copy) { \
size_t _ut_i; \
for(_ut_i=0;_ut_i<(w)->i;_ut_i++) { \
(a)->icd.copy(_utarray_eltptr(a,j+_ut_i), _utarray_eltptr(w,_ut_i)); \
} \
} else { \
memcpy(_utarray_eltptr(a,j), _utarray_eltptr(w,0), \
utarray_len(w)*((a)->icd.sz)); \
} \
(a)->i += utarray_len(w); \
} while(0)
#define utarray_reserve(a, by)
Definition: utarray.h:89
#define _utarray_eltptr(a, j)
Definition: utarray.h:117
#define utarray_len(a)
Definition: utarray.h:114

Definition at line 131 of file utarray.h.

◆ utarray_len

#define utarray_len (   a)    ((a)->i)

Definition at line 114 of file utarray.h.

Referenced by param_print_status().

◆ utarray_new

#define utarray_new (   a,
  _icd 
)
Value:
do { \
a=(UT_array*)malloc(sizeof(UT_array)); \
utarray_init(a,_icd); \
} while(0)

Definition at line 79 of file utarray.h.

Referenced by param_set_internal().

◆ utarray_next

#define utarray_next (   a,
 
)    (((e)==NULL) ? utarray_front(a) : ((((a)->i) > (utarray_eltidx(a,e)+1)) ? _utarray_eltptr(a,utarray_eltidx(a,e)+1) : NULL))

Definition at line 215 of file utarray.h.

Referenced by param_export(), and param_export_internal().

◆ utarray_pop_back

#define utarray_pop_back (   a)
Value:
do { \
if ((a)->icd.dtor) { (a)->icd.dtor( _utarray_eltptr(a,--((a)->i))); } \
else { (a)->i--; } \
} while(0)
#define _utarray_eltptr(a, j)
Definition: utarray.h:117

Definition at line 102 of file utarray.h.

◆ utarray_prev

#define utarray_prev (   a,
 
)    (((e)==NULL) ? utarray_back(a) : ((utarray_eltidx(a,e) > 0) ? _utarray_eltptr(a,utarray_eltidx(a,e)-1) : NULL))

Definition at line 216 of file utarray.h.

◆ utarray_push_back

#define utarray_push_back (   a,
 
)
Value:
do { \
utarray_reserve(a,1); \
if ((a)->icd.copy) { (a)->icd.copy( _utarray_eltptr(a,(a)->i++), p); } \
else { memcpy(_utarray_eltptr(a,(a)->i++), p, (a)->icd.sz); }; \
} while(0)
#define _utarray_eltptr(a, j)
Definition: utarray.h:117

Definition at line 96 of file utarray.h.

Referenced by param_set_internal().

◆ utarray_renew

#define utarray_renew (   a,
 
)
Value:
do { \
if (a) utarray_clear(a); \
else utarray_new((a),(u)); \
} while(0)
#define utarray_clear(a)
Definition: utarray.h:196
#define utarray_new(a, _icd)
Definition: utarray.h:79

Definition at line 191 of file utarray.h.

◆ utarray_reserve

#define utarray_reserve (   a,
  by 
)
Value:
do { \
if (((a)->i+by) > ((a)->n)) { \
while(((a)->i+by) > ((a)->n)) { (a)->n = ((a)->n ? (2*(a)->n) : 8); } \
if ( ((a)->d=(char*)realloc((a)->d, (a)->n*(a)->icd.sz)) == NULL) oom(); \
} \
} while(0)
#define oom()
Definition: utarray.h:43

Definition at line 89 of file utarray.h.

◆ utarray_resize

#define utarray_resize (   dst,
  num 
)
Value:
do { \
size_t _ut_i; \
if (dst->i > (size_t)(num)) { \
if ((dst)->icd.dtor) { \
for(_ut_i=num; _ut_i < dst->i; _ut_i++) { \
(dst)->icd.dtor(utarray_eltptr(dst,_ut_i)); \
} \
} \
} else if (dst->i < (size_t)(num)) { \
utarray_reserve(dst,num-dst->i); \
if ((dst)->icd.init) { \
for(_ut_i=dst->i; _ut_i < num; _ut_i++) { \
(dst)->icd.init(utarray_eltptr(dst,_ut_i)); \
} \
} else { \
memset(_utarray_eltptr(dst,dst->i),0,(dst)->icd.sz*(num-dst->i)); \
} \
} \
dst->i = num; \
} while(0)
#define utarray_eltptr(a, j)
Definition: utarray.h:116
#define _utarray_eltptr(a, j)
Definition: utarray.h:117

Definition at line 152 of file utarray.h.

◆ utarray_sort

#define utarray_sort (   a,
  cmp 
)
Value:
do { \
qsort((a)->d, (a)->i, (a)->icd.sz, cmp); \
} while(0)

Definition at line 208 of file utarray.h.

Referenced by param_set_internal().

◆ UTARRAY_VERSION

#define UTARRAY_VERSION   1.9.6

Definition at line 30 of file utarray.h.

Typedef Documentation

◆ ctor_f

typedef void() ctor_f(void *dst, const void *src)

Definition at line 45 of file utarray.h.

◆ dtor_f

typedef void() dtor_f(void *elt)

Definition at line 46 of file utarray.h.

◆ init_f

typedef void() init_f(void *elt)

Definition at line 47 of file utarray.h.

Function Documentation

◆ utarray_str_cpy()

static void utarray_str_cpy ( void *  dst,
const void *  src 
)
static

Definition at line 221 of file utarray.h.

◆ utarray_str_dtor()

static void utarray_str_dtor ( void *  elt)
static

Definition at line 225 of file utarray.h.

Variable Documentation

◆ _UNUSED_

const UT_icd ut_ptr_icd _UNUSED_ = {sizeof(char*),NULL,utarray_str_cpy,utarray_str_dtor}
static

Definition at line 229 of file utarray.h.