Go to the documentation of this file.
41 #define csnip_arr_Init(a, n, cap, initial_cap, err) \
44 if (((cap) = (initial_cap)) > 0) { \
45 csnip_mem_Alloc(initial_cap, a, err); \
65 #define csnip_arr_Reserve(a, n, cap, least_cap, err) \
66 csnip_arr__Reserve((a), (n), (cap), (least_cap), (err), \
67 csnip__i, csnip__err2)
70 #define csnip_arr__Reserve(a, n, cap, least_cap, err, i, err2) \
72 size_t i = csnip_next_pow_of_2(csnip_Max(least_cap, n)); \
73 if(i != (size_t)cap) { \
75 csnip_mem_Realloc(i, a, err2); \
77 csnip_err_Raise(err2, err); \
89 #define csnip_arr_Push(a, n, cap, value, err) \
92 csnip_arr_Reserve(a, n, cap, (n) + 1, csnip_err); \
94 csnip_err_Raise(csnip_err, err); \
97 (a)[(n)++] = (value); \
107 #define csnip_arr_Pop(a, n, cap, err) \
110 csnip_err_Raise(csnip_err_UNDERFLOW, err); \
124 #define csnip_arr_InsertAt(a, n, cap, index, val, err) \
127 csnip_arr_Reserve(a, n, cap, (n) + 1, csnip_err); \
129 csnip_err_Raise(csnip_err, err); \
132 for (int csnip_i = (n); csnip_i > (index); --csnip_i)\
134 (a)[csnip_i] = (a)[csnip_i - 1]; \
136 (a)[(index)] = (val); \
146 #define csnip_arr_DeleteAt(a, n, cap, index, err) \
150 for (csnip_i = (index); csnip_i < (n); ++csnip_i) \
152 (a)[csnip_i] = (a)[csnip_i + 1]; \
163 #define csnip_arr_Free(a, n, cap) \
191 #define CSNIP_ARR_DECL_FUNCS(scope, prefix, val_type, gen_args) \
192 scope void prefix ## init(csnip_pp_prepend_##gen_args \
194 scope void prefix ## reserve(csnip_pp_prepend_##gen_args \
196 scope void prefix ## push(csnip_pp_prepend_##gen_args \
198 scope void prefix ## pop(csnip_pp_list_##gen_args); \
199 scope void prefix ## insert_at(csnip_pp_prepend_##gen_args \
200 size_t i, val_type v); \
201 scope void prefix ## delete_at(csnip_pp_prepend_##gen_args \
203 scope void prefix ## free(csnip_pp_list_##gen_args);
227 #define CSNIP_ARR_DEF_FUNCS(scope, prefix, val_type, gen_args, a, n, cap, err) \
228 scope void prefix ## init(csnip_pp_prepend_##gen_args \
231 csnip_arr_Init(a, n, cap, cs, err); \
234 scope void prefix ## reserve(csnip_pp_prepend_##gen_args \
237 csnip_arr_Reserve(a, n, cap, least_cap, err); \
240 scope void prefix ## push(csnip_pp_prepend_##gen_args \
243 csnip_arr_Push(a, n, cap, v, err); \
246 scope void prefix ## pop(csnip_pp_list_##gen_args) \
248 csnip_arr_Pop(a, n, cap, err); \
251 scope void prefix ## insert_at(csnip_pp_prepend_##gen_args \
252 size_t i, val_type v) \
254 csnip_arr_InsertAt(a, n, cap, i, v, err); \
257 scope void prefix ## delete_at(csnip_pp_prepend_##gen_args \
260 csnip_arr_DeleteAt(a, n, cap, i, err); \
262 scope void prefix ## free(csnip_pp_list_##gen_args) \
264 csnip_arr_Free(a, n, cap); \
270 #if defined(CSNIP_SHORT_NAMES) && !defined(CSNIP_ARR_HAVE_SHORT_NAMES)
271 #define arr_Init csnip_arr_Init
272 #define arr_Reserve csnip_arr_Reserve
273 #define arr_Push csnip_arr_Push
274 #define arr_Pop csnip_arr_Pop
275 #define arr_InsertAt csnip_arr_InsertAt
276 #define arr_DeleteAt csnip_arr_DeleteAt
277 #define arr_Free csnip_arr_Free
278 #define CSNIP_ARR_HAVE_SHORT_NAMES