48#define lws_start_foreach_ll(type, it, start)\
52 int _c_##it = 0, _b_##it = 0; \
53 for (; !_c_##it; _c_##it = 1) {
69#define lws_end_foreach_ll(it, nxt) \
72 if (!_b_##it) break; \
96#define lws_start_foreach_ll_safe(type, it, start, nxt)\
99 for (type it = start; it && ((next_##it = it->nxt), 1); it = next_##it) {
115#define lws_end_foreach_ll_safe(it) \
139#define lws_start_foreach_llp(type, it, start)\
141 type it = &(start); \
143 int _c_##it = 0, _b_##it = 0; \
144 for (; !_c_##it; _c_##it = 1) {
146#define lws_start_foreach_llp_safe(type, it, start, nxt)\
149 for (type it = &(start); *(it) && ((next = &((*(it))->nxt)), 1); it = next) {
165#define lws_end_foreach_llp(it, nxt) \
168 if (!_b_##it) break; \
169 it = &(*(it))->nxt; \
173#define lws_end_foreach_llp_safe(it) \
177#define lws_ll_fwd_insert(\
182 ___new_object->___m_list = ___list_head; \
183 ___list_head = ___new_object; \
186#define lws_ll_fwd_remove(\
192 lws_start_foreach_llp(___type **, ___ppss, ___list_head) { \
193 if (*___ppss == ___target) { \
194 *___ppss = ___target->___m_list; \
197 } lws_end_foreach_llp(___ppss, ___m_list); \
284 int (*compare3)(
void *priv,
const lws_dll2_t *d,
289 size_t dll2_ofs,
size_t ptr_ofs);
297#define lws_dll2_search_sz_pl(own, name, namelen, type, membd2list, membptr) \
298 ((type *)_lws_dll2_search_sz_pl(own, name, namelen, \
299 offsetof(type, membd2list), \
300 offsetof(type, membptr)))
306#define lws_dll2_describe(x, y)
315#define lws_start_foreach_dll_safe(___type, ___it, ___tmp, ___start) \
318 for (___type ___it = ___start; ___it && (((___tmp) = (___it)->next), 1); ___it = ___tmp) {
320#define lws_end_foreach_dll_safe(___it, ___tmp) \
324#define lws_start_foreach_dll(___type, ___it, ___start) \
326 for (___type ___it = ___start; ___it; ___it = (___it)->next) {
328#define lws_end_foreach_dll(___it) \
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)