X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;ds=sidebyside;f=bertos%2Fstruct%2Flist.h;h=91fe63fb50ad194ed52d111c0999b4b486fc55df;hb=9b851504d2822d5d10b9894dd09706a39232faad;hp=c83063547ef42d3a55403bf1e1a4be3d5904a850;hpb=c2dceae6e510636a81423abf8af27e4244b0d850;p=bertos.git diff --git a/bertos/struct/list.h b/bertos/struct/list.h index c8306354..91fe63fb 100644 --- a/bertos/struct/list.h +++ b/bertos/struct/list.h @@ -30,8 +30,49 @@ * Copyright 2001, 2008 Bernie Innocenti * --> * + * \defgroup list General purpose lists + * \ingroup struct + * \{ + * * \brief General pourpose double-linked lists * + * Lists contain nodes. You can put any custom struct into any list as long + * as it has a Node struct inside it. If you make the Node struct the first + * member of your data type, you can simply cast it to (Node *) when passing + * it to list functions. + * + * Lists must be initialized before use with LIST_INIT(). You can then add + * objects using ADDHEAD() and ADDTAIL() macros, and remove them with + * list_remHead() and list_remTail(). + * + * You can create lists with priorities by using PriNode instead of Node as + * the base member struct. + * Use LIST_ENQUEUE() and LIST_ENQUEUE_HEAD() to insert a priority node into + * a list. + * + * To iterate over a list, use the macros FOREACH_NODE() and REVERSE_FOREACH_NODE() + * in this way: + * \code + * struct Foo + * { + * Node n; + * int a; + * } + * + * int main() + * { + * List foo_list; + * static Foo foo1, foo2; + * Foo *fp; + * + * LIST_INIT(&foo_list); + * ADDHEAD(&foo_list, (Node *)&foo1); + * INSERT_BEFORE(&foo_list, (Node *)&foo2); + * FOREACH_NODE(fp, &foo_list) + * fp->a = 10; + * } + * \endcode + * * \author Bernie Innocenti */ @@ -349,4 +390,6 @@ INLINE Node *list_remTail(List *l) return n; } +/** \} */ //defgroup list + #endif /* STRUCT_LIST_H */