Go to the documentation of this file. 19 #ifndef __XDELTA3_LIST__ 20 #define __XDELTA3_LIST__ 22 #define XD3_MAKELIST(LTYPE,ETYPE,LNAME) \ 24 static inline ETYPE* \ 25 LTYPE ## _entry (LTYPE* l) \ 27 return (ETYPE*) ((char*) l - (ptrdiff_t) &((ETYPE*) 0)->LNAME); \ 31 LTYPE ## _init (LTYPE *l) \ 38 LTYPE ## _add (LTYPE *prev, LTYPE *next, LTYPE *ins) \ 47 LTYPE ## _push_back (LTYPE *l, ETYPE *i) \ 49 LTYPE ## _add (l->prev, l, & i->LNAME); \ 53 LTYPE ## _del (LTYPE *next, \ 60 static inline ETYPE* \ 61 LTYPE ## _remove (ETYPE *f) \ 63 LTYPE *i = f->LNAME.next; \ 64 LTYPE ## _del (f->LNAME.next, f->LNAME.prev); \ 65 return LTYPE ## _entry (i); \ 68 static inline ETYPE* \ 69 LTYPE ## _pop_back (LTYPE *l) \ 72 LTYPE ## _del (i->next, i->prev); \ 73 return LTYPE ## _entry (i); \ 76 static inline ETYPE* \ 77 LTYPE ## _pop_front (LTYPE *l) \ 80 LTYPE ## _del (i->next, i->prev); \ 81 return LTYPE ## _entry (i); \ 85 LTYPE ## _empty (LTYPE *l) \ 87 return l == l->next; \ 90 static inline ETYPE* \ 91 LTYPE ## _front (LTYPE *f) \ 93 return LTYPE ## _entry (f->next); \ 96 static inline ETYPE* \ 97 LTYPE ## _back (LTYPE *f) \ 99 return LTYPE ## _entry (f->prev); \ 103 LTYPE ## _end (LTYPE *f, ETYPE *i) \ 105 return f == & i->LNAME; \ 108 static inline ETYPE* \ 109 LTYPE ## _next (ETYPE *f) \ 111 return LTYPE ## _entry (f->LNAME.next); \ 114 static inline usize_t \ 115 LTYPE ## _length (LTYPE *l) \ 120 for (p = l->next; p != l; p = p->next) \ 128 typedef int unused_ ## LTYPE