34 #ifndef reda_circularlist_h
35 #define reda_circularlist_h
66 struct REDA_CircularListNode
68 struct REDA_CircularListNode *_prev;
69 struct REDA_CircularListNode *_next;
75 typedef struct REDA_CircularListNode REDA_CircularList_T;
80 typedef struct REDA_CircularListNode REDA_CircularListNode_T;
93 REDA_CircularList_init(REDA_CircularList_T *list);
108 REDA_CircularListNode_init(
struct REDA_CircularListNode *node);
124 REDA_CircularList_link_node_after(
struct REDA_CircularListNode *after,
125 struct REDA_CircularListNode *node);
141 REDA_CircularList_unlink_node(
struct REDA_CircularListNode *node);
155 REDA_CircularList_append(REDA_CircularList_T *list,
156 REDA_CircularListNode_T *node);
158 #define REDA_CircularList_append(list_,node_) \
159 REDA_CircularList_link_node_after((list_)->_prev,node_)
173 REDA_CircularList_prepend(REDA_CircularList_T *list,
174 REDA_CircularListNode_T *node);
176 #define REDA_CircularList_prepend(list_,node_) \
177 REDA_CircularList_link_node_after((list_),node_)
191 REDA_CircularList_is_empty(REDA_CircularList_T *list);
193 #define REDA_CircularList_is_empty(c_list_) \
194 ((c_list_)->_next == (c_list_) ? 1 : 0)
209 REDA_CircularList_node_at_head(REDA_CircularList_T *list,
210 REDA_CircularListNode_T *node);
212 #define REDA_CircularList_node_at_head(c_list_,c_node_) \
213 ((void*)(c_list_) == (void*)(c_node_))
226 REDADllExport REDA_CircularListNode_T*
227 REDA_CircularList_get_first(REDA_CircularList_T *list);
229 #define REDA_CircularList_get_first(c_list_) ((c_list_)->_next)
242 REDADllExport REDA_CircularListNode_T*
243 REDA_CircularList_get_last(REDA_CircularList_T *list);
245 #define REDA_CircularList_get_last(c_list_) ((c_list_)->_prev)
258 REDADllExport REDA_CircularListNode_T*
259 REDA_CircularListNode_get_next(REDA_CircularListNode_T *node);
261 #define REDA_CircularListNode_get_next(c_node_) ((c_node_)->_next)
274 REDADllExport REDA_CircularListNode_T*
275 REDA_CircularListNode_get_prev(REDA_CircularListNode_T *node);
277 #define REDA_CircularListNode_get_prev(c_node_) ((c_node_)->_prev)
291 REDA_CircularListNode_is_linked(REDA_CircularListNode_T *node);
293 #define REDA_CircularListNode_is_linked(c_node_) \
294 (((c_node_)->_next || (c_node_)->_prev) ? 1 : 0)