18#define A_LIST_INIT(node) {&(node), &(node)}
26 struct a_list *next, *prev;
35#define a_list_(_, x) a_cast_s(a_list _, a_cast_s(void _, x))
43#define a_list_entry(ptr, type, member) a_container_of(ptr, type, member)
44#define a_list_entry_next(ptr, type, member) a_list_entry((ptr)->next, type, member)
45#define a_list_entry_prev(ptr, type, member) a_list_entry((ptr)->prev, type, member)
55#define a_list_foreach_(it, ctx, next) \
56 for (a_list *it = (ctx)->next; it != (ctx); it = it->next)
57#define a_list_foreach_next(it, ctx) a_list_foreach_(it, ctx, next)
58#define a_list_foreach_prev(it, ctx) a_list_foreach_(it, ctx, prev)
69#define a_list_forsafe_(it, at, ctx, next) \
70 for (a_list *it = (ctx)->next, *at = it->next; it != (ctx); it = at, at = it->next)
71#define a_list_forsafe_next(it, at, ctx) a_list_forsafe_(it, at, ctx, next)
72#define a_list_forsafe_prev(it, at, ctx) a_list_forsafe_(it, at, ctx, prev)
335 a_list_add_(tail1->next, head1->prev, head2, tail2);
416 a_list *
const node = ctx->prev;
443 a_list *
const node = ctx->next;
472 a_list *
const head = tail2->next, *
const tail = head2->prev;
473 a_list_add_(tail1->next, head1->prev, head2, tail2);
void a_list_dtor(a_list *ctx)
destructor for circular doubly linked list
Definition list.h:90
void a_list_swap_(a_list *head1, a_list *tail1, a_list *head2, a_list *tail2)
swap a section of one list and a section of another list
Definition list.h:470
void a_list_ctor(a_list *ctx)
constructor for circular doubly linked list
Definition list.h:78
void a_list_add_node(a_list *head, a_list *tail, a_list *node)
insert a node to a list
Definition list.h:183
void a_list_set_(a_list const *head1, a_list const *tail1, a_list *head2, a_list *tail2)
modify a section of a list
Definition list.h:333
void a_list_set_node(a_list const *ctx, a_list *rhs)
modify a node of a list
Definition list.h:343
void a_list_init(a_list *ctx)
initialize for circular doubly linked list
Definition list.h:84
void a_list_rot_next(a_list *ctx)
rotate a node in the list backward
Definition list.h:414
void a_list_link(a_list *head, a_list *tail)
link head node and tail node
Definition list.h:107
struct a_list a_list
instance structure for circular doubly linked list
void a_list_del_node(a_list const *node)
delete a node from a list
Definition list.h:273
void a_list_swap_node(a_list *lhs, a_list *rhs)
swap the node lhs and the node rhs
Definition list.h:482
void a_list_mov_next(a_list *ctx, a_list const *rhs)
moving a list from another list forward
Definition list.h:366
void a_list_rot_prev(a_list *ctx)
rotate a node in the list forward
Definition list.h:441
void a_list_del_prev(a_list const *node)
remove a node from a list backward
Definition list.h:311
void a_list_add_prev(a_list *ctx, a_list *node)
append a node to a list backward
Definition list.h:229
void a_list_loop(a_list *head, a_list *tail)
loop head node to tail node
Definition list.h:128
void a_list_del_(a_list const *head, a_list const *tail)
delete a section of a list
Definition list.h:251
void a_list_add_(a_list *head1, a_list *tail1, a_list *head2, a_list *tail2)
connect list1 and list2
Definition list.h:158
void a_list_add_next(a_list *ctx, a_list *node)
append a node to a list forward
Definition list.h:206
void a_list_del_next(a_list const *node)
remove a node from a list forward
Definition list.h:292
void a_list_mov_prev(a_list *ctx, a_list const *rhs)
moving a list from another list backward
Definition list.h:389
instance structure for circular doubly linked list
Definition list.h:25