## libkmod-list libkmod-list — general purpose list |

## Synopsis

    struct              kmod_list;
    #define             kmod_list_foreach                   (list_entry,
                                                             first_entry)
    #define             kmod_list_foreach_reverse           (list_entry,
                                                             first_entry)
    struct kmod_list *  kmod_list_last                      (const struct kmod_list *list);
    struct kmod_list *  kmod_list_next                      (const struct kmod_list *list,
                                                             const struct kmod_list *curr);
    struct kmod_list *  kmod_list_prev                      (const struct kmod_list *list,
                                                             const struct kmod_list *curr);

## Description

## Details

### struct kmod_list

    struct kmod_list;

### kmod_list_foreach()

    #define             kmod_list_foreach(list_entry, first_entry)

### kmod_list_foreach_reverse()

    #define             kmod_list_foreach_reverse(list_entry, first_entry)

### kmod_list_last ()

    struct kmod_list *  kmod_list_last                      (const struct kmod_list *list);

Get the last element of the `list`. As `list` is a circular list, this is a cheap operation O(1) with the last element being the previous element.

If the list has a single element it will return the list itself (as expected, and this is what differentiates from `kmod_list_prev()`).

`list` : | the head of the list
Returns : | last node at `list` or NULL if the list is empty.

### kmod_list_next ()

    struct kmod_list *  kmod_list_next                      (const struct kmod_list *list,
                                                             const struct kmod_list *curr);

Get the next node in `list` relative to `curr` as if `list` was not a circular list. I.e. calling this function in the last node of the list returns NULL.. It can be used to iterate a list by checking for NULL return to know when all elements were iterated.

`list` : | the head of the list
`curr` : | the current node in the list
Returns : | node next to `curr` or NULL if either this node is the last of or list is empty.

### kmod_list_prev ()

    struct kmod_list *  kmod_list_prev                      (const struct kmod_list *list,
                                                             const struct kmod_list *curr);

Get the previous node in `list` relative to `curr` as if `list` was not a circular list. I.e.: the previous of the head is NULL. It can be used to iterate a list by checking for NULL return to know when all elements were iterated.

`list` : | the head of the list
`curr` : | the current node in the list
Returns : | node previous to `curr` or NULL if either this node is the head of the list or the list is empty.