36 #define bflb_container_of(ptr, type, member) \ 37 ((type *)((char *)(ptr) - (unsigned long)(&((type *)0)->member))) 135 unsigned int len = 0;
138 while (p->
next != l) {
149 #define DLIST_OBJECT_INIT(object) \ 151 &(object), &(object) \ 156 #define DLIST_DEFINE(list) \ 157 bflb_dlist_t list = { &(list), &(list) } 165 #define bflb_dlist_entry(node, type, member) \ 166 bflb_container_of(node, type, member) 176 #define bflb_dlist_first_entry(ptr, type, member) \ 177 bflb_dlist_entry((ptr)->next, type, member) 186 #define bflb_dlist_first_entry_or_null(ptr, type, member) \ 187 (bflb_dlist_isempty(ptr) ? NULL : bflb_dlist_first_entry(ptr, type, member)) 194 #define bflb_dlist_for_each(pos, head) \ 195 for (pos = (head)->next; pos != (head); pos = pos->next) 202 #define bflb_dlist_for_each_prev(pos, head) \ 203 for (pos = (head)->prev; pos != (head); pos = pos->prev) 211 #define bflb_dlist_for_each_safe(pos, n, head) \ 212 for (pos = (head)->next, n = pos->next; pos != (head); \ 213 pos = n, n = pos->next) 215 #define bflb_dlist_for_each_prev_safe(pos, n, head) \ 216 for (pos = (head)->prev, n = pos->prev; pos != (head); \ 217 pos = n, n = pos->prev) 224 #define bflb_dlist_for_each_entry(pos, head, member) \ 225 for (pos = bflb_dlist_entry((head)->next, typeof(*pos), member); \ 226 &pos->member != (head); \ 227 pos = bflb_dlist_entry(pos->member.next, typeof(*pos), member)) 235 #define bflb_dlist_for_each_entry_reverse(pos, head, member) \ 236 for (pos = bflb_dlist_entry((head)->prev, typeof(*pos), member); \ 237 &pos->member != (head); \ 238 pos = bflb_dlist_entry(pos->member.prev, typeof(*pos), member)) 247 #define bflb_dlist_for_each_entry_safe(pos, n, head, member) \ 248 for (pos = bflb_dlist_entry((head)->next, typeof(*pos), member), \ 249 n = bflb_dlist_entry(pos->member.next, typeof(*pos), member); \ 250 &pos->member != (head); \ 251 pos = n, n = bflb_dlist_entry(n->member.next, typeof(*n), member)) 260 #define bflb_dlist_for_each_entry_safe_reverse(pos, n, head, member) \ 261 for (pos = bflb_dlist_entry((head)->prev, typeof(*pos), field), \ 262 n = bflb_dlist_entry(pos->member.prev, typeof(*pos), member); \ 263 &pos->member != (head); \ 264 pos = n, n = bflb_dlist_entry(pos->member.prev, typeof(*pos), member)) static void bflb_dlist_move_tail(bflb_dlist_t *l, bflb_dlist_t *n)
move node from list.
static void bflb_dlist_insert_before(bflb_dlist_t *l, bflb_dlist_t *n)
insert a node before a list
static unsigned int bflb_dlist_len(const bflb_dlist_t *l)
get the list length
static void bflb_dlist_init(bflb_dlist_t *l)
initialize a list
struct bflb_dlist_node * prev
static void bflb_dlist_insert_after(bflb_dlist_t *l, bflb_dlist_t *n)
insert a node after a list
struct bflb_dlist_node * next
static void bflb_dlist_move_head(bflb_dlist_t *l, bflb_dlist_t *n)
move node from list.
static void bflb_dlist_remove(bflb_dlist_t *n)
remove node from list.
static int bflb_dlist_isempty(const bflb_dlist_t *l)
tests whether a list is empty