47#define lws_start_foreach_ll(type, it, start)\
65#define lws_end_foreach_ll(it, nxt) \
88#define lws_start_foreach_ll_safe(type, it, start, nxt)\
92 type next_##it = it->nxt;
107#define lws_end_foreach_ll_safe(it) \
131#define lws_start_foreach_llp(type, it, start)\
133 type it = &(start); \
136#define lws_start_foreach_llp_safe(type, it, start, nxt)\
138 type it = &(start); \
141 next = &((*(it))->nxt); \
156#define lws_end_foreach_llp(it, nxt) \
157 it = &(*(it))->nxt; \
161#define lws_end_foreach_llp_safe(it) \
166#define lws_ll_fwd_insert(\
171 ___new_object->___m_list = ___list_head; \
172 ___list_head = ___new_object; \
175#define lws_ll_fwd_remove(\
181 lws_start_foreach_llp(___type **, ___ppss, ___list_head) { \
182 if (*___ppss == ___target) { \
183 *___ppss = ___target->___m_list; \
186 } lws_end_foreach_llp(___ppss, ___m_list); \
273 int (*compare3)(
void *priv,
const lws_dll2_t *d,
278 size_t dll2_ofs,
size_t ptr_ofs);
286#define lws_dll2_search_sz_pl(own, name, namelen, type, membd2list, membptr) \
287 ((type *)_lws_dll2_search_sz_pl(own, name, namelen, \
288 offsetof(type, membd2list), \
289 offsetof(type, membptr)))
295#define lws_dll2_describe(x, y)
304#define lws_start_foreach_dll_safe(___type, ___it, ___tmp, ___start) \
306 ___type ___it = ___start; \
308 ___type ___tmp = (___it)->next;
310#define lws_end_foreach_dll_safe(___it, ___tmp) \
315#define lws_start_foreach_dll(___type, ___it, ___start) \
317 ___type ___it = ___start; \
320#define lws_end_foreach_dll(___it) \
321 ___it = (___it)->next; \
struct lws_dll2_owner * owner
struct lws_dll2 lws_dll2_t
LWS_VISIBLE LWS_EXTERN void lws_dll2_add_tail(struct lws_dll2 *d, struct lws_dll2_owner *owner)
LWS_VISIBLE LWS_EXTERN void lws_dll2_owner_clear(struct lws_dll2_owner *d)
LWS_VISIBLE LWS_EXTERN void lws_dll2_add_sorted_priv(lws_dll2_t *d, lws_dll2_owner_t *own, void *priv, int(*compare3)(void *priv, const lws_dll2_t *d, const lws_dll2_t *i))
#define lws_dll2_describe(x, y)
LWS_VISIBLE LWS_EXTERN void lws_dll2_add_sorted(lws_dll2_t *d, lws_dll2_owner_t *own, int(*compare)(const lws_dll2_t *d, const lws_dll2_t *i))
struct lws_dll2_owner lws_dll2_owner_t
LWS_VISIBLE LWS_EXTERN void lws_dll2_add_insert(struct lws_dll2 *d, struct lws_dll2 *prev)
LWS_VISIBLE LWS_EXTERN void * _lws_dll2_search_sz_pl(lws_dll2_owner_t *own, const char *name, size_t namelen, size_t dll2_ofs, size_t ptr_ofs)
LWS_VISIBLE LWS_EXTERN void lws_dll2_add_before(struct lws_dll2 *d, struct lws_dll2 *after)
int(* lws_dll2_foreach_cb_t)(struct lws_dll2 *d, void *user)
LWS_VISIBLE LWS_EXTERN int lws_dll2_is_detached(const struct lws_dll2 *d)
LWS_VISIBLE LWS_EXTERN void lws_dll2_remove(struct lws_dll2 *d)
LWS_VISIBLE LWS_EXTERN void lws_dll2_clear(struct lws_dll2 *d)
LWS_VISIBLE LWS_EXTERN int lws_dll2_foreach_safe(struct lws_dll2_owner *owner, void *user, lws_dll2_foreach_cb_t cb)
LWS_VISIBLE LWS_EXTERN void lws_dll2_add_head(struct lws_dll2 *d, struct lws_dll2_owner *owner)