16#ifndef ZITI_SDK_MODEL_COLLECTIONS_H
17#define ZITI_SDK_MODEL_COLLECTIONS_H
69#define line_var(v) var(v,__LINE__)
70#define var(x, y) _var(x,y)
71#define _var(x,y) x ## y
74#define z_typeof(v) decltype(v)
76#define z_typeof(v) __typeof__(v)
79#define MODEL_MAP_FOREACH(k, v, map) \
80model_map_iter line_var(e);\
81for (line_var(e) = model_map_iterator(map), \
82 (k) = (z_typeof(k))(uintptr_t)model_map_it_key(line_var(e)), \
83 (v) = (z_typeof(v))model_map_it_value(line_var(e)), \
84 line_var(e) = model_map_it_next(line_var(e)); \
86 (k) = (z_typeof(k))(uintptr_t)model_map_it_key(line_var(e)), \
87 (v) = (z_typeof(v))model_map_it_value(line_var(e)), \
88 line_var(e) = model_map_it_next(line_var(e))\
91#define MODEL_MAP_FOR(it, m)\
92model_map_iter line_var(itn) = model_map_it_next(model_map_iterator(&(m)));\
93for(model_map_iter it = model_map_iterator(&(m)); \
95 (it) = line_var(itn), line_var(itn) = model_map_it_next(line_var(itn)))
97typedef struct model_list_s {
98 struct model_list_impl_s *
impl;
126#define MODEL_LIST_FOR(it, m)\
127model_list_iter line_var(itn) = model_list_it_next(model_list_iterator(&(m))); \
128for(model_list_iter it = model_list_iterator(&(m)); (it) != NULL; \
129(it) = line_var(itn), line_var(itn) = model_list_it_next(line_var(itn)))
132#define MODEL_LIST_FOREACH(el, list) \
133model_list_iter line_var(it); \
134for(line_var(it) = model_list_iterator((model_list*)&(list)); \
135line_var(it) != NULL && ((el) = (z_typeof(el))model_list_it_element(line_var(it)), true); \
136line_var(it) = model_list_it_next(line_var(it)))
#define ZITI_FUNC
Definition externs.h:38
void * model_map_it_value(model_map_iter it)
model_map_iter model_map_it_remove(model_map_iter it)
void * model_map_removel(model_map *map, long key)
model_list_iter model_list_it_next(model_list_iter it)
void * model_map_set_key(model_map *m, const void *key, size_t key_len, const void *val)
void * model_map_getl(const model_map *map, long key)
model_list_iter model_list_iterator(model_list *l)
void * model_list_iter
Definition model_collections.h:101
size_t model_map_size(const model_map *map)
model_map_iter model_map_it_next(model_map_iter it)
void model_list_push(model_list *l, const void *el)
size_t model_list_size(const model_list *l)
const char * model_map_it_key(model_map_iter it)
const void * model_map_it_key_s(model_map_iter it, size_t *key_len)
void * model_map_iter
Definition model_collections.h:27
model_map_iter model_map_iterator(const model_map *map)
const void * model_list_it_element(model_list_iter it)
void model_map_clear(model_map *map, void(*val_free_func)(void *))
model_list_iter model_list_it_remove(model_list_iter it)
const void * model_list_head(const model_list *l)
void * model_map_get(const model_map *map, const char *key)
void * model_map_remove(model_map *map, const char *key)
void * model_map_get_key(const model_map *map, const void *key, size_t key_len)
void * model_list_pop(model_list *l)
long model_map_it_lkey(model_map_iter it)
void * model_map_set(model_map *map, const char *key, const void *val)
void * model_map_setl(model_map *map, long key, const void *val)
void model_list_append(model_list *l, const void *el)
void * model_map_remove_key(model_map *map, const void *key, size_t key_len)
void model_list_clear(model_list *l, void(*clear_f)(void *))
#define map(t)
Definition model_support.h:75
Definition model_collections.h:97
struct model_list_impl_s * impl
Definition model_collections.h:98
Definition model_collections.h:29
struct model_impl_s * impl
Definition model_collections.h:30