NAME
rlist - Roy doublely linked list implementation
SYNOPSIS
#include <roy.h>
DESCRIPTION
The rlist code strings together list entries wihout having the over head of the extra pointer dereference. These list entries are defined and allocated by the user.
- The User Defined Entry
-
In order to use these lists, you must create your own structure to be used as the entrys of the list. This structure *MUST* start with the first entry as 'RLIST_HEADER;'.
struct FooEntry {RLIST_HEADER;char *foodata;/* ... */};You can create the toplevel RList structure by using rlist_new(3) (free with rlist_free(3)), or you can allocate the list structure yourself, and call RLIST_INIT(list) on it. This initializes the list, setting up the tail and head pointers.
- RLIST_INIT (list)
-
Initialize a newly created list structure. The 'list' argument needs to be an RList struct.
{RList list;RLIST_INIT (&list);/* ... rlist functions ... */}
- RLIST_DESTRUCT (list)
-
Set the head and tail pointers of the 'list' argument to point to NULL, effectivly destorying the list.
{RList list;RLIST_INIT (&list);/* ... */RLIST_DESTRUCT (&list);}
- RLIST_FOREACH (list, entry)
-
This macro walks through a list, assigning 'entry' to the list item through each iteration. The programmer can use
"break","continue", or"goto"safely. All rlist functions except rlist_free(3) can be called safely inside the RLIST_FOREACH macro. Note that this includes rlist_remove(3) on the current item. Operations should not be performed on the next item in the list however, as a pointer is kept to that item through each iteration.RLIST_FOREACH (list, entry) {if (entry->foodata == NULL)break;printf ("Data: %s.\n", entry->foodata);} RFOREACH_CLOSE;
- RLIST_FOREACH_REVERSE (list, entry)
-
Same as RLIST_FOREACH, but start at the end of the list, and walk backwards.
SEE ALSO
rlist_append(3), rlist_compare(3), rlist_first(3), rlist_free(3), rlist_last(3), rlist_new(3), rlist_next(3), rlist_nth(3), rlist_prepend(3), rlist_prev(3), rlist_remove(3), roy(3)