38 #ifndef reda_circularlist_h
39 #define reda_circularlist_h
70 struct REDA_CircularListNode
72 struct REDA_CircularListNode *_prev;
73 struct REDA_CircularListNode *_next;
79 typedef struct REDA_CircularListNode REDA_CircularList_T;
84 typedef struct REDA_CircularListNode REDA_CircularListNode_T;
97 REDA_CircularList_init(REDA_CircularList_T *list);
112 REDA_CircularListNode_init(
struct REDA_CircularListNode *node);
128 REDA_CircularList_link_node_after(
struct REDA_CircularListNode *after,
129 struct REDA_CircularListNode *node);
144 REDA_CircularList_unlink_node(
struct REDA_CircularListNode *node);
158 REDA_CircularList_append(REDA_CircularList_T *list,
159 REDA_CircularListNode_T *node);
161 #define REDA_CircularList_append(list_,node_) \
162 REDA_CircularList_link_node_after((list_)->_prev,node_)
176 REDA_CircularList_prepend(REDA_CircularList_T *list,
177 REDA_CircularListNode_T *node);
179 #define REDA_CircularList_prepend(list_,node_) \
180 REDA_CircularList_link_node_after((list_),node_)
194 REDA_CircularList_is_empty(REDA_CircularList_T *list);
210 REDA_CircularList_node_at_head(REDA_CircularList_T *list,
211 REDA_CircularListNode_T *node);
213 #define REDA_CircularList_node_at_head(c_list_,c_node_) \
214 ((void*)(c_list_) == (void*)(c_node_))
227 REDADllExport REDA_CircularListNode_T*
228 REDA_CircularList_get_first(REDA_CircularList_T *list);
230 #define REDA_CircularList_get_first(c_list_) ((c_list_)->_next)
243 REDADllExport REDA_CircularListNode_T*
244 REDA_CircularList_get_last(REDA_CircularList_T *list);
246 #define REDA_CircularList_get_last(c_list_) ((c_list_)->_prev)
259 REDADllExport REDA_CircularListNode_T*
260 REDA_CircularListNode_get_next(REDA_CircularListNode_T *node);
262 #define REDA_CircularListNode_get_next(c_node_) ((c_node_)->_next)
275 REDADllExport REDA_CircularListNode_T*
276 REDA_CircularListNode_get_prev(REDA_CircularListNode_T *node);
278 #define REDA_CircularListNode_get_prev(c_node_) ((c_node_)->_prev)
296 REDA_CircularListNode_is_linked(REDA_CircularListNode_T *node);