Go to the documentation of this file.
30#define CIRC_LIST(name, type) \
40#define CIRC_LIST_PUSH(obj, item) \
42 (obj)->x_head = modulo_add((obj)->x_head, -1, (obj)->x_cap); \
43 (obj)->x_list[(obj)->x_head] = (item); \
44 (obj)->x_size = min_int((obj)->x_size + 1, (obj)->x_cap); \
47#define CIRC_LIST_SIZE(obj) ((obj)->x_size)
49#define CIRC_LIST_INDEX(obj, index) \
50 modulo_add((obj)->x_head, index_verify((index), (obj)->x_size, __FILE__, __LINE__), \
53#define CIRC_LIST_ITEM(obj, index) ((obj)->x_list[CIRC_LIST_INDEX((obj), (index))])
55#define CIRC_LIST_RESET(obj) \
61#define CIRC_LIST_ALLOC(dest, list_type, size) \
63 const int so = sizeof(list_type) + sizeof((dest)->x_list[0]) * (size); \
64 (dest) = (list_type *)malloc(so); \
65 check_malloc_return(dest); \
66 memset((dest), 0, so); \
67 (dest)->x_cap = size; \
68 (dest)->x_sizeof = so; \
71#define CIRC_LIST_FREE(dest) free(dest)