Files
zinnia/include/zinnia/list.h
T
2026-07-20 01:53:04 +02:00

30 lines
790 B
C

#pragma once
#define list_head(type) \
struct { \
type _sl_head; \
}
#define list_link(type) \
struct { \
type _sl_link; \
}
#define list_is_empty(head) ((head)->_sl_head == NULL)
#define list_first(head) ((head)->_sl_head)
#define list_next(elm, field) ((elm)->field._sl_link)
#define list_insert_end(slistelm, elm, field) \
do { \
list_next((elm), field) = list_next((slistelm), field); \
list_next((slistelm), field) = (elm); \
} while (0)
#define list_insert_head(head, elm, field) \
do { \
list_next((elm), field) = list_first((head)); \
list_first((head)) = (elm); \
} while (0)
#define list_foreach(var, head, field) for ((var) = list_first((head)); (var); (var) = list_next((var), field))