Creating an Eina_List and adding elements to it is very easy and can be understood from an example: First thing is always to include Eina.h, for this example we also include stdio.h so we can use printf.
Just some boilerplate code, declaring some variable and initializing eina.
int
main(int argc, char **argv)
{
void *list_data;
struct _Eina_List Eina_List
Type for a generic double linked list.
Definition eina_list.h:307
int eina_init(void)
Initialize the Eina library.
Definition eina_main.c:244
Here we add a sequence of elements to our list. By using append we add elements to the end of the list, so the list will look like this:
Full-size
Eina_List * eina_list_append(Eina_List *list, const void *data)
Append the given data to the given linked list.
Definition eina_list.c:530
There are a couple of interesting things happening here, first is that we are passing a NULL pointer to the first eina_list_append() call, when this is done a list is created. The other very important detail to notice is that the return value is attributed to the list variable, this needs to be done every time we use a a function that alters the contents of the list.
Now that we have a list with some elements in it we can look at it's contents.
printf("%s\n", (char*)list_data);
#define EINA_LIST_FOREACH(list, l, data)
Macro to iterate over a list.
Definition eina_list.h:1399
There are many ways of accessing elements in the list, including by it's index:
printf("\n");
Eina_List * eina_list_nth_list(const Eina_List *list, unsigned int n)
Get the nth member's list node in a list.
Definition eina_list.c:927
- Note
- It should be noted that the index starts at 0.
eina_list_append() is not the only way to add elements to a a list. A common requirement is to add an element in a specific position this can be accomplished using eina_list_append_relative() and eina_list_append_relative_list():
Eina_List * eina_list_append_relative_list(Eina_List *list, const void *data, Eina_List *relative)
Append a list node to a linked list after the specified member.
Definition eina_list.c:606
Eina_List * eina_list_append_relative(Eina_List *list, const void *data, const void *relative)
Insert the given data into the given linked list after the specified data.
Definition eina_list.c:586
First "cain" is added after the second element(remember that indexes are
0 based) and then we add "zarek" after "cain".
Eina_List also has prepend analogs to append functions we have used so far:
Eina_List * eina_list_prepend_relative(Eina_List *list, const void *data, const void *relative)
Prepend a data pointer to a linked list before the specified member.
Definition eina_list.c:639
Eina_List * eina_list_prepend_relative_list(Eina_List *list, const void *data, Eina_List *relative)
Prepend a list node to a linked list before the specified member.
Definition eina_list.c:658
Eina_List * eina_list_prepend(Eina_List *list, const void *data)
Prepends the given data to the given linked list.
Definition eina_list.c:560
With this additions our list now looks like this:
Full-size
Once done using the list it needs to be freed, and since we are done with eina that also need to be shutdown:
printf("%s\n", (char*)list_data);
return 0;
}
Eina_List * eina_list_free(Eina_List *list)
Free an entire list and all the nodes, ignoring the data contained.
Definition eina_list.c:754
int eina_shutdown(void)
Shut down the Eina library.
Definition eina_main.c:315
The full source code can be found on the examples folder on the eina_list_01.c file.