From 59ca208e824724b53ce81b09e1de0a431c0487e0 Mon Sep 17 00:00:00 2001 From: antognolli Date: Tue, 14 Jun 2011 17:43:53 +0000 Subject: [PATCH] eina: Add detailed description and some examples to Eina_Inlist. git-svn-id: http://svn.enlightenment.org/svn/e/trunk/eina@60310 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- doc/img/eina_inlist-node.png | Bin 0 -> 8895 bytes doc/img/eina_inlist-node_eg1-inlist.png | Bin 0 -> 13020 bytes doc/img/eina_inlist-node_eg1-my-struct.png | Bin 0 -> 7682 bytes doc/img/eina_inlist-node_eg2-list-inlist.png | Bin 0 -> 22126 bytes doc/img/eina_inlist-node_eg2-my-struct.png | Bin 0 -> 7755 bytes doc/img/eina_inlist-node_eg3-my-struct.png | Bin 0 -> 10177 bytes doc/img/eina_inlist-node_eg3-two-inlists.png | Bin 0 -> 25975 bytes src/examples/Makefile.am | 10 +- src/examples/eina_inlist_01.c | 96 +++++++ src/examples/eina_inlist_02.c | 64 +++++ src/examples/eina_inlist_03.c | 73 ++++++ src/include/eina_inlist.h | 377 ++++++++++++++++++++++----- 12 files changed, 559 insertions(+), 61 deletions(-) create mode 100644 doc/img/eina_inlist-node.png create mode 100644 doc/img/eina_inlist-node_eg1-inlist.png create mode 100644 doc/img/eina_inlist-node_eg1-my-struct.png create mode 100644 doc/img/eina_inlist-node_eg2-list-inlist.png create mode 100644 doc/img/eina_inlist-node_eg2-my-struct.png create mode 100644 doc/img/eina_inlist-node_eg3-my-struct.png create mode 100644 doc/img/eina_inlist-node_eg3-two-inlists.png create mode 100644 src/examples/eina_inlist_01.c create mode 100644 src/examples/eina_inlist_02.c create mode 100644 src/examples/eina_inlist_03.c diff --git a/doc/img/eina_inlist-node.png b/doc/img/eina_inlist-node.png new file mode 100644 index 0000000000000000000000000000000000000000..195497bf00634d6ffa83bd775ff9b467cdc7750d GIT binary patch literal 8895 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%0AqJG1{jT)PPoz>nE$?MA~1kK zZcEAfg7}U-1E>X=22|tuZw|dqf|#n$(y=b9=LL$5@sua-Hyqp_LoIgX=2VOefJVWG zCKjC%gw**pZ+ye<(ASE`)U15z9%H+0PF!{4?p^9Dp@7-@zaiJ9Li*oCTJaMdcd|)x zj$}cX#fp-F&}!(>o9ZgyB7%To0SOQkUUoJz5*c36#yoVW_E*K;FN0RMJ))vc6+_ZT z|J&{X{<)Nw|52X*?u!4F;Qar-b0OxMEH&Za;P5St2C(avmp3-buL3*#=KoiJW_B+K bZxFzQ`U76@2GIaFQV29uw3REAEMNW~Qf(KU literal 0 HcmV?d00001 diff --git a/doc/img/eina_inlist-node_eg1-inlist.png b/doc/img/eina_inlist-node_eg1-inlist.png new file mode 100644 index 0000000000000000000000000000000000000000..48c0a4799c7b23222bdd4c03ffde9372836217d7 GIT binary patch literal 13020 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 literal 0 HcmV?d00001 diff --git a/doc/img/eina_inlist-node_eg1-my-struct.png b/doc/img/eina_inlist-node_eg1-my-struct.png new file mode 100644 index 0000000000000000000000000000000000000000..4393f2c8dce5262d6e9dea3a425d239c6fefff09 GIT binary patch literal 7682 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 literal 0 HcmV?d00001 diff --git a/doc/img/eina_inlist-node_eg2-list-inlist.png b/doc/img/eina_inlist-node_eg2-list-inlist.png new file mode 100644 index 0000000000000000000000000000000000000000..4eb3235f5a80e21e8750c5816a3dba10d42c57c2 GIT binary patch literal 22126 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 Y4IHK2SMHMpy2CfXN?I>UpS=$KA5WZZPyhe` literal 0 HcmV?d00001 diff --git a/doc/img/eina_inlist-node_eg3-my-struct.png b/doc/img/eina_inlist-node_eg3-my-struct.png new file mode 100644 index 0000000000000000000000000000000000000000..f669afd4b21c3afea3df94a821236a9e7508c455 GIT binary patch literal 10177 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 S7dVrL_gwKMtXTe4@P7ct-fHjw literal 0 HcmV?d00001 diff --git a/doc/img/eina_inlist-node_eg3-two-inlists.png b/doc/img/eina_inlist-node_eg3-two-inlists.png new file mode 100644 index 0000000000000000000000000000000000000000..c8d2c8b5f522aaaa08be6627510cee29a7d555ef GIT binary patch literal 25975 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 literal 0 HcmV?d00001 diff --git a/src/examples/Makefile.am b/src/examples/Makefile.am index fb0fa2f..e8b14b4 100644 --- a/src/examples/Makefile.am +++ b/src/examples/Makefile.am @@ -20,7 +20,10 @@ SRCS = \ eina_list_01.c \ eina_list_02.c \ eina_list_03.c \ - eina_list_04.c + eina_list_04.c \ + eina_inlist_01.c \ + eina_inlist_02.c \ + eina_inlist_03.c pkglib_PROGRAMS = @@ -40,6 +43,9 @@ pkglib_PROGRAMS += \ eina_list_01 \ eina_list_02 \ eina_list_03 \ - eina_list_04 + eina_list_04 \ + eina_inlist_01 \ + eina_inlist_02 \ + eina_inlist_03 endif diff --git a/src/examples/eina_inlist_01.c b/src/examples/eina_inlist_01.c new file mode 100644 index 0000000..fa51553 --- /dev/null +++ b/src/examples/eina_inlist_01.c @@ -0,0 +1,96 @@ +// Compile with: +// gcc -g `pkg-config --cflags --libs eina` eina_inlist_01.c -o eina_inlist_01 +#include +#include + +struct my_struct { + EINA_INLIST; + int a, b; +}; + +int +sort_cb(const void *d1, const void *d2) +{ + const Eina_Inlist *l1, *l2; + const struct my_struct *x1, *x2; + + l1 = d1; + l2 = d2; + + x1 = EINA_INLIST_CONTAINER_GET(l1, struct my_struct); + x2 = EINA_INLIST_CONTAINER_GET(l2, struct my_struct); + + return x1->a - x2->a; +} + +int +main(void) +{ + struct my_struct *d, *cur; + Eina_Inlist *list, *itr, *tmp; + + eina_init(); + + d = malloc(sizeof(*d)); + d->a = 1; + d->b = 10; + list = eina_inlist_append(NULL, EINA_INLIST_GET(d)); + + d = malloc(sizeof(*d)); + d->a = 2; + d->b = 20; + list = eina_inlist_append(list, EINA_INLIST_GET(d)); + + d = malloc(sizeof(*d)); + d->a = 3; + d->b = 30; + list = eina_inlist_prepend(list, EINA_INLIST_GET(d)); + + printf("list=%p\n", list); + EINA_INLIST_FOREACH(list, cur) + printf("\ta=%d, b=%d\n", cur->a, cur->b); + + list = eina_inlist_promote(list, EINA_INLIST_GET(d)); + + d = malloc(sizeof(*d)); + d->a = 4; + d->b = 40; + list = eina_inlist_append_relative(list, EINA_INLIST_GET(d), list); + + list = eina_inlist_demote(list, EINA_INLIST_GET(d)); + + list = eina_inlist_sort(list, sort_cb); + + printf("list after sort=%p\n", list); + EINA_INLIST_FOREACH(list, cur) + printf("\ta=%d, b=%d\n", cur->a, cur->b); + + tmp = eina_inlist_find(list, EINA_INLIST_GET(d)); + if (tmp) + cur = EINA_INLIST_CONTAINER_GET(tmp, struct my_struct); + else + cur = NULL; + + if (d != cur) + printf("wrong node! cur=%p\n", cur); + + list = eina_inlist_remove(list, EINA_INLIST_GET(d)); + free(d); + printf("list=%p\n", list); + for (itr = list; itr != NULL; itr = itr->next) + { + cur = EINA_INLIST_CONTAINER_GET(itr, struct my_struct); + printf("\ta=%d, b=%d\n", cur->a, cur->b); + } + + while (list) + { + Eina_Inlist *aux = list; + list = eina_inlist_remove(list, list); + free(aux); + } + + eina_shutdown(); + + return 0; +} diff --git a/src/examples/eina_inlist_02.c b/src/examples/eina_inlist_02.c new file mode 100644 index 0000000..7d23f13 --- /dev/null +++ b/src/examples/eina_inlist_02.c @@ -0,0 +1,64 @@ +// Compile with: +// gcc -g `pkg-config --cflags --libs eina` eina_inlist_01.c -o eina_inlist_01 +#include +#include + +struct my_struct { + EINA_INLIST; + int a, b; +}; + +int +main(void) +{ + struct my_struct *d, *cur; + int i; + + Eina_Inlist *inlist = NULL; + Eina_List *list = NULL, *l_itr, *l_next; + + eina_init(); + + for (i = 0; i < 100; i++) + { + d = malloc(sizeof(*d)); + d->a = i; + d->b = i * 10; + inlist = eina_inlist_append(inlist, EINA_INLIST_GET(d)); + if ((i % 2) == 0) + list = eina_list_prepend(list, d); + } + + printf("inlist=%p\n", inlist); + EINA_INLIST_FOREACH(inlist, cur) + printf("\ta=%d, b=%d\n", cur->a, cur->b); + + printf("list=%p\n", list); + EINA_LIST_FOREACH(list, l_itr, cur) + printf("\ta=%d, b=%d\n", cur->a, cur->b); + + printf("inlist count=%d\n", eina_inlist_count(inlist)); + printf("list count=%d\n\n", eina_list_count(list)); + + EINA_LIST_FOREACH_SAFE(list, l_itr, l_next, cur) + { + if ((cur->a % 3) == 0) + list = eina_list_remove_list(list, l_itr); + } + + printf("inlist count=%d\n", eina_inlist_count(inlist)); + printf("list count=%d\n\n", eina_list_count(list)); + + eina_list_free(list); + + while (inlist) + { + Eina_Inlist *aux = inlist; + inlist = eina_inlist_remove(inlist, inlist); + free(aux); + } + + eina_shutdown(); + + return 0; +} diff --git a/src/examples/eina_inlist_03.c b/src/examples/eina_inlist_03.c new file mode 100644 index 0000000..a39a784 --- /dev/null +++ b/src/examples/eina_inlist_03.c @@ -0,0 +1,73 @@ +// Compile with: +// gcc -g `pkg-config --cflags --libs eina` eina_inlist_01.c -o eina_inlist_01 +#include +#include + +struct my_struct { + EINA_INLIST; + Eina_Inlist even; + int a, b; +}; + +#define EVEN_INLIST_GET(Inlist) (& ((Inlist)->even)) + +#define EVEN_INLIST_CONTAINER_GET(ptr, type) \ + ((type *)((char *)ptr - offsetof(type, even))) + +int +main(void) +{ + struct my_struct *d, *cur; + int i; + + Eina_Inlist *list = NULL, *list_even = NULL, *itr; + + eina_init(); + + for (i = 0; i < 100; i++) + { + d = malloc(sizeof(*d)); + d->a = i; + d->b = i * 10; + list = eina_inlist_append(list, EINA_INLIST_GET(d)); + if ((i % 2) == 0) + list_even = eina_inlist_prepend(list_even, EVEN_INLIST_GET(d)); + } + + printf("list=%p\n", list); + EINA_INLIST_FOREACH(list, cur) + printf("\ta=%d, b=%d\n", cur->a, cur->b); + + printf("list_even=%p\n", list_even); + for (itr = list_even; itr != NULL; itr = itr->next) + { + cur = EVEN_INLIST_CONTAINER_GET(itr, struct my_struct); + printf("\ta=%d, b=%d\n", cur->a, cur->b); + } + + printf("list count=%d\n", eina_inlist_count(list)); + printf("list_even count=%d\n\n", eina_inlist_count(list_even)); + + itr = list_even; + while (itr) + { + Eina_Inlist *next = itr->next; + cur = EVEN_INLIST_CONTAINER_GET(itr, struct my_struct); + if ((cur->a % 3) == 0) + list_even = eina_inlist_remove(list_even, itr); + itr = next; + } + printf("list count=%d\n", eina_inlist_count(list)); + printf("list_even count=%d\n\n", eina_inlist_count(list_even)); + + while (list) + { + Eina_Inlist *aux = list; + list = eina_inlist_remove(list, list); + free(aux); + } + + eina_shutdown(); + + return 0; +} diff --git a/src/include/eina_inlist.h b/src/include/eina_inlist.h index eef0788..694226e 100644 --- a/src/include/eina_inlist.h +++ b/src/include/eina_inlist.h @@ -25,16 +25,274 @@ #include /** + * @page inlist_01_example_page Eina_Inlist basic usage + * @dontinclude eina_inlist_01.c + * + * To see the full source for this example, click here: @ref + * eina_inlist_01_c + * + * As explained before, inline lists mean its nodes pointers are part of same + * memory block/blob. This is done by using the macro @ref EINA_INLIST inside the + * data structure that will be used: + * + * @skip struct + * @until }; + * + * The resulting node representing this struct can be exemplified by the + * following picture: + * + * @image html eina_inlist-node_eg1-my-struct.png + * @image rtf eina_inlist-node_eg1-my-struct.png + * + * Let's define a comparison function that will be used later during the + * sorting of the list: + * + * @skip int + * @until } + * + * The @ref Eina_Inlist can be used exactly the same way as @ref Eina_List when + * appending, prepend and removing items. But since we already have the node + * pointers inside the structure, they need to be retrieved with the macro @ref + * EINA_INLIST_GET : + * + * @skip malloc + * @until append + * + * Notice that @ref eina_inlist_append always receives the head of the list as + * first argument, and its return value should be used as the list pointer + * (head): + * + * @skip malloc + * @until append + * + * After appending 3 items, the list now should look similar to this: + * + * @image html eina_inlist-node_eg1-inlist.png + * @image rtf eina_inlist-node_eg1-inlist.png + * + * The macro @ref EINA_INLIST_FOREACH can be used to iterate over the list: + * + * @skip printf + * @until cur->a + * + * @ref eina_inlist_promote(), @ref eina_inlist_demote(), @ref + * eina_inlist_append_relative() and similar functions all work in the same way + * as the @ref Eina_List : + * + * @skip eina_inlist_promote + * @until eina_inlist_demote + * + * Now let's use the @c sort_cb function declared above to sort our list: + * + * @skipline eina_inlist_sort + * + * Removing an element from the inlist is also similar to @ref Eina_List : + * + * @skip inlist_remove + * @until free + * + * Another way of walking through the inlist. + * + * @skip for + * @until } + * + * Notice that in the previous piece of code, since we only have the pointers to + * the inlist nodes, we have to use the @ref EINA_INLIST_CONTAINER_GET macro + * that will return the pointer to the entire structure. Of course, in this case + * it is the same as the list pointer, since the @ref EINA_INLIST macro was used + * in the beginning of the structure. + * + * Now to finish this example, lets delete this list: + * + * @skip while + * @until } + */ + +/** + * @page inlist_02_example_page Eina_Inlist advanced usage - lists and inlists + * @dontinclude eina_inlist_02.c + * + * This example describes the usage of @ref Eina_Inlist mixed with @ref + * Eina_List . We create and add elements to an inlist, and the even members + * are also added to a normal list. Later we remove the elements divisible by 3 + * from this normal list. + * + * The struct that is going to be used is the same used in @ref + * inlist_01_example_page , since we still need the @ref EINA_INLIST macro to + * declare the inlist node info: + * + * @skip struct + * @until }; + * + * The resulting node representing this struct can be exemplified by the + * following picture: + * + * @image html eina_inlist-node_eg2-my-struct.png + * @image rtf eina_inlist-node_eg2-my-struct.png + * + * Now we need some pointers and auxiliar variables that will help us iterate on + * the lists: + * + * @skip struct + * @until l_next; + * + * Allocating 100 elements and putting them into an inlist, and the even + * elements also go to the normal list: + * + * @skip for + * @until } + * + * After this point, what we have are two distinct lists that share some + * elements. The first list (inlist) is defined by the pointers inside the + * elements data structure, while the second list (normal list) has its own node + * data structure that is kept outside of the elements. + * + * The two lists, sharing some elements, can be represented by the following + * picture: + * + * + * @image rtf eina_inlist-node_eg2-list-inlist.png + * + * Accessing both lists is done normally, as if they didn't have any elements in + * common: + * + * @skip printf + * @until eina_list_count + * + * We can remove elements from the normal list, but we just don't free them + * because they are still stored in the inlist: + * + * @skip EINA_LIST_FOREACH_SAFE + * @until eina_list_count + * + * To finish this example, we want to free both lists, we can't just free all + * elements on the second list (normal list) because they are still being used + * in the inlist. So we first discard the normal list without freeing its + * elements, then we free all elements in the inlist (that contains all elements + * allocated until now): + * + * @skip eina_list_free + * @until } + * + * Here is the full source code for this example: @ref eina_inlist_02_c + */ + +/** + * @page inlist_03_example_page Eina_Inlist advanced usage - multi-inlists + * @dontinclude eina_inlist_03.c + * + * This example describes the usage of multiple inlists storing the same data. + * It means that some data may appear in more than one inlist at the same time. + * We will demonstrate this by creating an inlist with 100 numbers, and adding + * the odd numbers to the second inlist, then remove the numbers divisible by 3 + * from the second list. + * + * To accomplish this, it is necessary to have two inlist pointers in the struct + * that is going to be stored. We are using the default inlist member @ref + * EINA_INLIST, and adding another member @c even that is of type @ref + * Eina_Inlist too: + * + * @skip struct + * @until }; + * + * The representation for this struct is: + * + * @image html eina_inlist-node_eg3-my-struct.png + * @image rtf eina_inlist-node_eg3-my-struct.png + * + * And we will define some convenience macros that are equivalent to @ref + * EINA_INLIST_GET and @ref EINA_INLIST_CONTAINER_GET : + * + * @skip define + * @until offsetof + * + * We need two pointers, one for each list, and a pointer that will be used as + * an iterator: + * + * @skipline Eina_Inlist + * + * Now we allocate and add to the first list every number from 0 to 99. These + * nodes data also have the @ref Eina_Inlist node info for the second list (@c + * even). We will use them to add just the even numbers to the second list, the + * @c list_even. Also notice that we are using our macro @c EVEN_INLIST_GET to + * get the pointer to the even list node info: + * + * @skip for + * @until } + * + * And the resulting lists will be as follow: + * + * + * @image rtf eina_inlist-node_eg3-two-inlists.png + * + * For the first list, we can use the macro @ref EINA_INLIST_FOREACH to iterate + * over its elements: + * + * @skip FOREACH + * @until printf + * + * But for the second list, we have to do it manually. Of course we could create + * a similar macro to @ref EINA_INLIST_FOREACH, but since this macro is more + * complex than the other two and we are using it only once, it's better to just + * do it manually: + * + * @skip for + * @until } + * + * Let's just check that the two lists have the expected number of elements: + * + * @skip list count + * @until list_even count + * + * And removing the numbers divisible by 3 only from the second list: + * + * @skip itr + * @until list_even count + * + * Now that we don't need the two lists anymore, we can just free all the items. + * Since all of the allocated data was put into the first list, and both lists + * are made of pointers to inside the data structures, we can free only the + * first list (that contains all the elements) and the second list will be gone + * with it: + * + * @skip while + * @until free + * + * To see the full source code for this example, click here: @ref + * eina_inlist_03_c + * + */ + +/** + * @page eina_inlist_01_c eina_inlist_01.c + * @include eina_inlist_01.c + */ + +/** + * @page eina_inlist_02_c eina_inlist_02.c + * @include eina_inlist_02.c + */ + +/** + * @page eina_inlist_03_c eina_inlist_03.c + * @include eina_inlist_03.c + */ + +/** * @addtogroup Eina_Inline_List_Group Inline List * * @brief These functions provide inline list management. * * Inline lists mean its nodes pointers are part of same memory as * data. This has the benefit of fragmenting memory less and avoiding - * @c node->data indirection, but has the drawback of elements only - * being able to be part of one single inlist at same time. But it is - * possible to have inlist nodes to be part of regular lists created - * with eina_list_append() or eina_list_prepend(). + * @c node->data indirection, but has the drawback of higher cost for some + * common operations like count and sort. + * + * It is possible to have inlist nodes to be part of regular lists, created with + * @ref eina_list_append() or @ref eina_list_prepend(). It's also possible to + * have a structure with two inlist pointers, thus be part of two different + * inlists at the same time, but the current convenience macros provided won't + * work for both of them. Consult @ref inlist_advanced for more info. * * Inline lists have their purposes, but if you don't know what those purposes are, go with * regular lists instead. @@ -46,61 +304,62 @@ * This lets the compiler to do type checking and let the programmer know * exactly what type this list is. * - * @code - * #include - * #include - * - * int - * main(void) - * { - * struct my_struct { - * EINA_INLIST; - * int a, b; - * } *d, *cur; - * Eina_Inlist *list, *itr; - * - * eina_init(); - * - * d = malloc(sizeof(*d)); - * d->a = 1; - * d->b = 10; - * list = eina_inlist_append(NULL, EINA_INLIST_GET(d)); - * - * d = malloc(sizeof(*d)); - * d->a = 2; - * d->b = 20; - * list = eina_inlist_append(list, EINA_INLIST_GET(d)); - * - * d = malloc(sizeof(*d)); - * d->a = 3; - * d->b = 30; - * list = eina_inlist_prepend(list, EINA_INLIST_GET(d)); - * - * printf("list=%p\n", list); - * EINA_INLIST_FOREACH(list, cur) - * printf("\ta=%d, b=%d\n", cur->a, cur->b); - * - * list = eina_inlist_remove(list, EINA_INLIST_GET(d)); - * free(d); - * printf("list=%p\n", list); - * for (itr = list; itr != NULL; itr = itr->next) - * { - * cur = EINA_INLIST_CONTAINER_GET(itr, struct my_struct); - * printf("\ta=%d, b=%d\n", cur->a, cur->b); - * } - * - * while (list) - * { - * Eina_Inlist *aux = list; - * list = eina_inlist_remove(list, list); - * free(aux); - * } - * - * eina_shutdown(); - * - * return 0; - * } - * @endcode + * A simple example demonstrating the basic usage of an inlist can be found + * here: @ref inlist_01_example_page + * + * @section inlist_algo Algorithm + * + * The basic structure can be represented by the following picture: + * + * @image html eina_inlist-node.png + * @image rtf eina_inlist-node.png + * + * One data structure will also have the node information, with three pointers: + * @a prev, @a next and @a last. The @a last pointer is just valid for the first + * element (the list head), otherwise each insertion in the list would have to + * be done updating every node with the correct pointer. This means that it's + * always very important to keep a pointer to the first element of the list, + * since it is the only one that has the correct information to allow a proper + * O(1) append to the list. + * + * @section inlist_perf Performance + * + * Due to the nature of the inlist, there's no accounting information, and no + * easy access to the last element from each list node. This means that @ref + * eina_inlist_count() is order-N, while @ref eina_list_count() is order-1 (constant + * time). + * + * For the same reasons, @ref eina_inlist_sort() is slower than @ref + * eina_list_sort() . If the list is intended to have faster access, be + * sorted/merged frequently, or needs to have other complex operations, consider + * using @ref Eina_List instead. + * + * @section inlist_advanced Advanced Usage + * + * The basic usage considers a struct that will have the user data, and also + * have an inlist node information (prev, next and last pointers) created with + * @ref EINA_INLIST during the struct declaration. This allows one to use the + * convenience macros @ref EINA_INLIST_GET(), @ref EINA_INLIST_CONTAINER_GET(), + * @ref EINA_INLIST_FOREACH() and so. This happens because the @ref EINA_INLIST + * macro declares a struct member with the name @a __inlist, and all the other + * macros assume that this struct member has this name. + * + * It may be the case that someone needs to have some inlist nodes added to a + * @ref Eina_List too. If this happens, the inlist nodes can be added to the + * @ref Eina_List without any problems. This example demonstrates this case: + * @ref inlist_02_example_page + * + * It's also possible to have some data that is part of two different inlists. + * If this is the case, then it won't be possible to use the convenience macros + * to both of the lists. It will be necessary to create a new set of macros that + * will allow access to the second list node info. An example for this usage can + * be found here: + * @ref inlist_03_example_page + * + * List of examples: + * @li @ref inlist_01_example_page + * @li @ref inlist_02_example_page + * @li @ref inlist_03_example_page * * @{ */ -- 2.7.4