Ziti C SDK
Loading...
Searching...
No Matches
model_collections.h
Go to the documentation of this file.
1// Copyright (c) 2022. NetFoundry Inc.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// https://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15
16#ifndef ZITI_SDK_MODEL_COLLECTIONS_H
17#define ZITI_SDK_MODEL_COLLECTIONS_H
18
19#include "externs.h"
20
21#include <stddef.h>
22
23#ifdef __cplusplus
24extern "C" {
25#endif
26
27typedef void *model_map_iter;
28
29typedef struct model_map {
30 struct model_impl_s *impl;
31} model_map;
32
34
35ZITI_FUNC void *model_map_set_key(model_map *m, const void *key, size_t key_len, const void *val);
36
37ZITI_FUNC void *model_map_set(model_map *map, const char *key, const void *val);
38
39ZITI_FUNC void *model_map_setl(model_map *map, long key, const void *val);
40
41ZITI_FUNC void *model_map_get_key(const model_map *map, const void *key, size_t key_len);
42
43ZITI_FUNC void *model_map_get(const model_map *map, const char *key);
44
45ZITI_FUNC void *model_map_getl(const model_map *map, long key);
46
47ZITI_FUNC void *model_map_remove_key(model_map *map, const void *key, size_t key_len);
48
49ZITI_FUNC void *model_map_remove(model_map *map, const char *key);
50
52
53ZITI_FUNC void model_map_clear(model_map *map, void (*val_free_func)(void *));
54
56
58
59ZITI_FUNC const void *model_map_it_key_s(model_map_iter it, size_t *key_len);
60
62
64
66
68
69#define line_var(v) var(v,__LINE__)
70#define var(x, y) _var(x,y)
71#define _var(x,y) x ## y
72
73#ifdef __cplusplus
74#define z_typeof(v) decltype(v)
75#else
76#define z_typeof(v) __typeof__(v)
77#endif
78
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)); \
85 (k) != NULL; \
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))\
89 )
90
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)); \
94 (it) != NULL; \
95 (it) = line_var(itn), line_var(itn) = model_map_it_next(line_var(itn)))
96
97typedef struct model_list_s {
98 struct model_list_impl_s *impl;
100
101typedef void *model_list_iter;
102
104
105// insert at the head
106ZITI_FUNC void model_list_push(model_list *l, const void *el);
107
108// append to the end
109ZITI_FUNC void model_list_append(model_list *l, const void *el);
110
111// remove from the head
113
115
116ZITI_FUNC void model_list_clear(model_list *l, void (*clear_f)(void *));
117
119
121
123
125
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)))
130
131
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)))
137
138#ifdef __cplusplus
139}
140#endif
141
142#endif //ZITI_SDK_MODEL_COLLECTIONS_H
#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