examples/reference/c/eina/src/eina_list.c

82 lines
2.1 KiB
C

#define EFL_BETA_API_SUPPORT 1
#include <stdio.h>
#include <Eina.h>
#include <Efl_Core.h>
/*
* Eina List examples.
*
* These examples demonstrate how to work with eina_list data and methods.
* We create a simple list of names by appending strings to an empty list
* and then run various mutations and print each result.
*/
static Eina_List *
_list_create()
{
Eina_List *list = NULL;
// passing NULL as the list parameter will create a new list
list = eina_list_append(list, "Adama");
list = eina_list_append(list, "Baltar");
list = eina_list_append(list, "Roslin");
return list;
}
static void
_list_free(Eina_List *list)
{
// here we do not need to use EINA_LIST_FREE as our data is not leaking
eina_list_free(list);
}
EAPI_MAIN void
efl_main(void *data EINA_UNUSED, const Efl_Event *ev EINA_UNUSED)
{
Eina_List *list, *item, *sorted;
void *item_data;
list = _list_create();
// print our list with a simple foreach
printf("List size: %d\n", eina_list_count(list));
printf("List content:\n");
EINA_LIST_FOREACH(list, item, item_data)
printf(" %s\n", (char*)item_data);
// insert some more elements
list = eina_list_prepend(list, "Cain");
list = eina_list_prepend_relative(list, "Tigh", "Baltar");
printf("New list content:\n");
EINA_LIST_FOREACH(list, item, item_data)
printf(" %s\n", (char*)item_data);
// promote an item to the top of the list
list = eina_list_promote_list(list, eina_list_nth_list(list, 1));
list = eina_list_remove(list, "Cain");
printf("List content after promotion:\n");
EINA_LIST_FOREACH(list, item, item_data)
printf(" %s\n", (char*)item_data);
// we can sort the list with any callback, here we use strcmp
sorted = eina_list_sort(list, 0, (Eina_Compare_Cb)strcmp);
printf("List content sorted:\n");
EINA_LIST_FOREACH(sorted, item, item_data)
printf(" %s\n", (char*)item_data);
// and foreach can be in reverse too
printf("List content reverse sorted:\n");
EINA_LIST_REVERSE_FOREACH(sorted, item, item_data)
printf(" %s\n", (char*)item_data);
_list_free(list);
efl_exit(0);
}
EFL_MAIN()