## camel-list-utils camel-list-utils |

## Synopsis

    struct              CamelDList;
    struct              CamelDListNode;
    #define             CAMEL_DLIST_INITIALISER             (l)
    void                camel_dlist_init                    (CamelDList *v);
    CamelDListNode *    camel_dlist_addhead                 (CamelDList *l,
                                                             CamelDListNode *n);
    CamelDListNode *    camel_dlist_addtail                 (CamelDList *l,
                                                             CamelDListNode *n);
    CamelDListNode *    camel_dlist_remove                  (CamelDListNode *n);
    CamelDListNode *    camel_dlist_remhead                 (CamelDList *l);
    CamelDListNode *    camel_dlist_remtail                 (CamelDList *l);
    gint                camel_dlist_empty                   (CamelDList *l);
    gint                camel_dlist_length                  (CamelDList *l);
    struct              CamelSListNode;
    struct              CamelSList;
    #define             CAMEL_SLIST_INITIALISER             (l)
    void                camel_slist_init                    (CamelSList *l);
    CamelSListNode *    camel_slist_addhead                 (CamelSList *l,
                                                             CamelSListNode *n);
    CamelSListNode *    camel_slist_addtail                 (CamelSList *l,
                                                             CamelSListNode *n);
    CamelSListNode *    camel_slist_remove                  (CamelSList *l,
                                                             CamelSListNode *n);
    CamelSListNode *    camel_slist_remhead                 (CamelSList *l);
    CamelSListNode *    camel_slist_remtail                 (CamelSList *l);
    gint                camel_slist_empty                   (CamelSList *l);
    gint                camel_slist_length                  (CamelSList *l);

## Description

## Details

### struct CamelDList

    struct CamelDList {
    	struct _CamelDListNode *head;
    	struct _CamelDListNode *tail;
    	struct _CamelDListNode *tailpred;
    };

### struct CamelDListNode

    struct CamelDListNode {
    	struct _CamelDListNode *next;
    	struct _CamelDListNode *prev;
    };

### CAMEL_DLIST_INITIALISER()

    #define CAMEL_DLIST_INITIALISER(l) { (CamelDListNode *)&l.tail, NULL, (CamelDListNode *)&l.head }

### camel_dlist_init ()

    void                camel_dlist_init                    (CamelDList *v);

Initialise a double-linked list header. All list headers must be initialised before use.

### camel_dlist_addhead ()

    CamelDListNode *    camel_dlist_addhead                 (CamelDList *l,
                                                             CamelDListNode *n);

Add the list node `n` to the head (start) of the list `l`.

`l` : | An initialised list header.
`n` : | A node, the next and prev pointers will be overwritten.
Returns : | `n`.

### camel_dlist_addtail ()

    CamelDListNode *    camel_dlist_addtail                 (CamelDList *l,
                                                             CamelDListNode *n);

Add the list onde `n` to the tail (end) of the list `l`.

`l` : | An intialised list header.
`n` : | A node, the next and prev pointers will be overwritten.
Returns : | `n`.

### camel_dlist_remove ()

    CamelDListNode *    camel_dlist_remove                  (CamelDListNode *n);

Remove `n` from the list it's in. `n` must belong to a list.

`n` : | A node which is part of a list.
Returns : | `n`.

### camel_dlist_remhead ()

    CamelDListNode *    camel_dlist_remhead                 (CamelDList *l);

Remove the head node (start) of the list.

xReturn value: The previously first-node in the list, or NULLif `l` is an empty list.

`l` : | An initialised list, maybe containing items.

### camel_dlist_remtail ()

    CamelDListNode *    camel_dlist_remtail                 (CamelDList *l);

Remove the last node in the list.

`l` : | An initialised list, maybe containing items.
Returns : | The previously last-node in the list, or NULL if `l` is an empty list.

### camel_dlist_empty ()

    gint                camel_dlist_empty                   (CamelDList *l);

Returns `TRUE` if `l` is an empty list.

`l` : | An initialised list header.
Returns : | `TRUE` if `l` is an empty list, `FALSE` otherwise.

### camel_dlist_length ()

    gint                camel_dlist_length                  (CamelDList *l);

Returns the number of nodes in the list `l`.

`l` : | An initialised list header.
Returns : | The number of nodes.

### struct CamelSListNode

    struct CamelSListNode {
    	struct _CamelSListNode *next;
    };

### struct CamelSList

    struct CamelSList {
    	struct _CamelSListNode *head;
    };

### CAMEL_SLIST_INITIALISER()

    #define CAMEL_SLIST_INITIALISER(l) { 0 }

### camel_slist_init ()

    void                camel_slist_init                    (CamelSList *l);

### camel_slist_addhead ()

    CamelSListNode *    camel_slist_addhead                 (CamelSList *l,
                                                             CamelSListNode *n);

### camel_slist_addtail ()

    CamelSListNode *    camel_slist_addtail                 (CamelSList *l,
                                                             CamelSListNode *n);

### camel_slist_remove ()

    CamelSListNode *    camel_slist_remove                  (CamelSList *l,
                                                             CamelSListNode *n);

### camel_slist_remhead ()

    CamelSListNode *    camel_slist_remhead                 (CamelSList *l);

### camel_slist_remtail ()

    CamelSListNode *    camel_slist_remtail                 (CamelSList *l);

### camel_slist_empty ()

    gint                camel_slist_empty                   (CamelSList *l);

### camel_slist_length ()

    gint                camel_slist_length                  (CamelSList *l);