X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fstruct%2Flist.h;h=91fe63fb50ad194ed52d111c0999b4b486fc55df;hb=517cca1528492422030102f6c1a6691420c1c1a0;hp=b970b7cf2d3355af09f9706815a854e029e1d4c1;hpb=32d1445272120a254d77ce8d1af1f527da7a2c17;p=bertos.git diff --git a/bertos/struct/list.h b/bertos/struct/list.h index b970b7cf..91fe63fb 100644 --- a/bertos/struct/list.h +++ b/bertos/struct/list.h @@ -30,9 +30,49 @@ * Copyright 2001, 2008 Bernie Innocenti * --> * + * \defgroup list General purpose lists + * \ingroup struct + * \{ + * * \brief General pourpose double-linked lists * - * \version $Id$ + * 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 */ @@ -350,4 +390,6 @@ INLINE Node *list_remTail(List *l) return n; } +/** \} */ //defgroup list + #endif /* STRUCT_LIST_H */