33#define H2O_DA_HEADER_SIZE \
34 ((sizeof(h2o_da_header_t) + _Alignof(max_align_t) - 1) & \
35 ~(_Alignof(max_align_t) - 1))
58#define h2o_da_len(darray) ((darray) ? h2o_da__hdr(darray)->len : 0)
61#define h2o_da_cap(darray) ((darray) ? h2o_da__hdr(darray)->cap : 0)
78#define h2o_da_new(pool, darray, intitial_capacity) \
80 htils_assert(pool != null && "pool cannot be null."); \
81 htils_assert(intitial_capacity > 0 && \
82 "Initial capacity must be greater than 0"); \
84 u64 capacity = (intitial_capacity); \
85 u64 alloc_size = H2O_DA_HEADER_SIZE + capacity; \
87 h2o_da_header_t *header = h2o_mem_alloc_pool((pool), darray, alloc_size); \
88 header->cap = capacity; \
89 (darray) = (void *)(header + 1); \
109#define h2o_da_append(pool, darray, item) \
111 htils_assert(pool != null && "Pool cannot be null."); \
112 htils_assert(darray != null && "Darray cannot be null."); \
113 htils_assert(item != null && "Item cannot be null."); \
115 if (!(darray) || h2o_da__hdr(darray)->len >= h2o_da__hdr(darray)->cap) { \
116 u64 old_capacity = h2o_da__hdr(darray)->cap; \
117 u64 new_capacity = old_capacity ? old_capacity * 2 : 8; \
118 u64 old_len = h2o_da__hdr(darray)->len; \
119 u64 alloc_size = H2O_DA_HEADER_SIZE + new_capacity; \
121 h2o_da_header_t *header = \
122 h2o_mem_alloc_pool((pool), darray, alloc_size); \
124 header->cap = new_capacity; \
125 header->len = old_len; \
128 memcpy(header + 1, (darray), old_len * sizeof(*(darray))); \
130 (darray) = (void *)(header + 1); \
133 (darray)[h2o_da__hdr(darray)->len++] = (item); \
144#define h2o_da_pop(darray) \
146 if (darray && h2o_da__hdr(darray)->len > 0) \
147 h2o_da__hdr(darray)->len--; \
158#define h2o_da_last(darray) \
159 (htils_assert(h2o_da__hdr(darray)->len > 0), \
160 (darray)[da__hdr(darray)->len - 1])
170#define h2o_da_clear(darray) \
173 h2o_da__hdr(darray)->len = 0; \
uint64_t u64
Definition basictypes.h:17
char cstr
Definition basictypes.h:50
#define H2O_DA_HEADER_SIZE
Definition darray.h:33
struct h2o_h2o_da_header h2o_da_header_t
The header of a dynamic array.
static h2o_da_header_t * h2o_da__hdr(void *h2o_da)
Get the dynamic array header.
Definition darray.h:53