Simple doubly linked list implementation. More...
Go to the source code of this file.
Data Structures | |
| struct | list_head |
Macros | |
| #define | ATALK_LIST_HEAD_INIT(name) { &(name), &(name) } |
| #define | ATALK_LIST_HEAD(name) struct list_head name = ATALK_LIST_HEAD_INIT(name) |
| #define | ATALK_INIT_LIST_HEAD(ptr) |
| #define | list_entry(ptr, type, member) ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member))) |
| get the struct for this entry | |
| #define | list_for_each(pos, head) |
| iterate over a list | |
| #define | list_for_each_prev(pos, head) |
| iterate over a list in reverse order | |
Simple doubly linked list implementation.
Some of the internal functions ("__xxx") are useful when manipulating whole lists rather than single entries, as sometimes we already know the next/prev entries and we can generate better code by using them directly rather than using the generic single-entry routines.
| #define ATALK_INIT_LIST_HEAD | ( | ptr | ) |
| #define ATALK_LIST_HEAD | ( | name | ) | struct list_head name = ATALK_LIST_HEAD_INIT(name) |
| #define ATALK_LIST_HEAD_INIT | ( | name | ) | { &(name), &(name) } |
| #define list_entry | ( | ptr, | |
| type, | |||
| member | |||
| ) | ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member))) |
get the struct for this entry
| ptr | the &struct list_head pointer. |
| type | the type of the struct this is embedded in. |
| member | the name of the list_struct within the struct. |
| #define list_for_each | ( | pos, | |
| head | |||
| ) |
| #define list_for_each_prev | ( | pos, | |
| head | |||
| ) |
iterate over a list in reverse order
| pos | the &struct list_head to use as a loop counter. |
| head | the head for your list. |