EE445M RTOS
Taken at the University of Texas Spring 2015
utarray.h File Reference
#include <stddef.h>
#include <string.h>
#include <stdlib.h>
Include dependency graph for utarray.h:

Go to the source code of this file.

Data Structures

struct  UT_icd
 
struct  UT_array
 

Macros

#define UTARRAY_VERSION   1.9.9
 
#define _UNUSED_
 
#define oom()   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))/(size_t)(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 = {sizeof(char*),NULL,utarray_str_cpy,utarray_str_dtor}
 
static const UT_icd ut_int_icd = {sizeof(int),NULL,NULL,NULL}
 
static const UT_icd ut_ptr_icd = {sizeof(void*),NULL,NULL,NULL}
 

Macro Definition Documentation

#define _UNUSED_

Definition at line 34 of file utarray.h.

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

Definition at line 115 of file utarray.h.

#define oom ( )    exit(-1)

Definition at line 41 of file utarray.h.

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

Definition at line 215 of file utarray.h.

#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:114

Definition at line 194 of file utarray.h.

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

Definition at line 171 of file utarray.h.

#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:114

Definition at line 64 of file utarray.h.

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

Definition at line 216 of file utarray.h.

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

Definition at line 114 of file utarray.h.

#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:114
#define _utarray_eltptr(a, j)
Definition: utarray.h:115

Definition at line 175 of file utarray.h.

#define utarray_extend_back (   a)
Value:
do { \
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_reserve(a, by)
Definition: utarray.h:87
void * memset(void *b, int c, int len)
Definition: nexus.c:4
#define _utarray_eltptr(a, j)
Definition: utarray.h:115

Definition at line 105 of file utarray.h.

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

Definition at line 210 of file utarray.h.

#define utarray_free (   a)
Value:
do { \
free(a); \
} while(0)
#define utarray_done(a)
Definition: utarray.h:64

Definition at line 82 of file utarray.h.

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

Definition at line 212 of file utarray.h.

#define utarray_init (   a,
  _icd 
)
Value:
do { \
memset(a,0,sizeof(UT_array)); \
(a)->icd=*_icd; \
} while(0)
void * memset(void *b, int c, int len)
Definition: nexus.c:4

Definition at line 59 of file utarray.h.

#define utarray_insert (   a,
  p,
 
)
Value:
do { \
if (j > (a)->i) utarray_resize(a,j); \
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_resize(dst, num)
Definition: utarray.h:150
#define utarray_reserve(a, by)
Definition: utarray.h:87
#define _utarray_eltptr(a, j)
Definition: utarray.h:115
void * memcpy(void *str1, const void *str2, long n)
Definition: nexus.c:25

Definition at line 117 of file utarray.h.

#define utarray_inserta (   a,
  w,
 
)
Value:
do { \
if (utarray_len(w) == 0) break; \
if (j > (a)->i) utarray_resize(a,j); \
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 { \
utarray_len(w)*((a)->icd.sz)); \
} \
(a)->i += utarray_len(w); \
} while(0)
#define utarray_resize(dst, num)
Definition: utarray.h:150
#define utarray_reserve(a, by)
Definition: utarray.h:87
#define _utarray_eltptr(a, j)
Definition: utarray.h:115
void * memcpy(void *str1, const void *str2, long n)
Definition: nexus.c:25
#define utarray_len(a)
Definition: utarray.h:112

Definition at line 129 of file utarray.h.

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

Definition at line 112 of file utarray.h.

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

Definition at line 77 of file utarray.h.

#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 213 of file utarray.h.

#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:115

Definition at line 100 of file utarray.h.

#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 214 of file utarray.h.

#define utarray_push_back (   a,
 
)
Value:
do { \
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_reserve(a, by)
Definition: utarray.h:87
#define _utarray_eltptr(a, j)
Definition: utarray.h:115
void * memcpy(void *str1, const void *str2, long n)
Definition: nexus.c:25

Definition at line 94 of file utarray.h.

#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:194
#define utarray_new(a, _icd)
Definition: utarray.h:77

Definition at line 189 of file utarray.h.

#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:41
#define NULL
Definition: defines.h:32

Definition at line 87 of file utarray.h.

#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_reserve(a, by)
Definition: utarray.h:87
void * memset(void *b, int c, int len)
Definition: nexus.c:4
#define utarray_eltptr(a, j)
Definition: utarray.h:114
#define _utarray_eltptr(a, j)
Definition: utarray.h:115

Definition at line 150 of file utarray.h.

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

Definition at line 206 of file utarray.h.

#define UTARRAY_VERSION   1.9.9

Definition at line 29 of file utarray.h.

Typedef Documentation

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

Definition at line 43 of file utarray.h.

typedef void( dtor_f) (void *elt)

Definition at line 44 of file utarray.h.

typedef void( init_f) (void *elt)

Definition at line 45 of file utarray.h.

Function Documentation

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

Definition at line 219 of file utarray.h.

References NULL, and strdup().

219  {
220  char **_src = (char**)src, **_dst = (char**)dst;
221  *_dst = (*_src == NULL) ? NULL : strdup(*_src);
222 }
char * strdup(const char *str)
Definition: graphlib.c:15
#define NULL
Definition: defines.h:32

Here is the call graph for this function:

static void utarray_str_dtor ( void *  elt)
static

Definition at line 223 of file utarray.h.

223  {
224  char **eltc = (char**)elt;
225  if (*eltc) free(*eltc);
226 }

Variable Documentation

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

Definition at line 228 of file utarray.h.

const UT_icd ut_ptr_icd = {sizeof(void*),NULL,NULL,NULL}
static

Definition at line 229 of file utarray.h.

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

Definition at line 227 of file utarray.h.