rntviewer/src/lists.h

33 lines
729 B
C

#define push_to_sll(lhead, ltail, new) \
if ((ltail)) { \
assert((lhead)); \
(ltail)->next = (new); \
} else { \
assert(!(ltail)); \
(lhead) = (new); \
} \
(ltail) = (new)
#define push_to_dll(lhead, ltail, new) \
if ((ltail)) { \
assert((lhead)); \
(ltail)->next = (new); \
(new)->prev = (ltail); \
} else { \
assert(!(ltail)); \
(lhead) = (new); \
} \
(ltail) = (new)
#define pop_from_dll(lhead, ltail, popped) do { \
if ((popped)->prev) { \
(popped)->prev->next = (popped)->next; \
} else { \
(lhead) = (popped)->next; \
} \
if ((popped)->next) { \
(popped)->next->prev = (popped)->prev; \
} else { \
(ltail) = (popped)->prev; \
} \
} while (0)