Tizen Native API
4.0
|
Eina_Clist is a compact (inline) list implementation.
Elements of this list are members of the structs stored in the list.
Advantages over Eina_List and Eina_Inlist :
Disadvantages:
NULL
at the end of the list, the last item points to the head.Define a list as follows:
struct gadget { struct Eina_Clist entry; <-- doesn't have to be the first item in the struct int a, b; }; static Eina_Clist global_gadgets = EINA_CLIST_INIT( global_gadgets );
or
struct some_global_thing { Eina_Clist gadgets; }; eina_clist_init( &some_global_thing->gadgets );
Manipulate it like this:
eina_clist_add_head( &global_gadgets, &new_gadget->entry ); eina_clist_remove( &new_gadget->entry ); eina_clist_add_after( &some_random_gadget->entry, &new_gadget->entry );
And to iterate over it:
struct gadget *gadget; EINA_CLIST_FOR_EACH_ENTRY( gadget, &global_gadgets, struct gadget, entry ) { ... }
Functions | |
static void | eina_clist_add_after (Eina_Clist *elem, Eina_Clist *to_add) |
Adds an element after the specified one. | |
static void | eina_clist_add_before (Eina_Clist *elem, Eina_Clist *to_add) |
Adds an element before the specified one. | |
static void | eina_clist_add_head (Eina_Clist *list, Eina_Clist *elem) |
Adds an element to the head of the list. | |
static void | eina_clist_add_tail (Eina_Clist *list, Eina_Clist *elem) |
Adds an element at the tail of the list. | |
static void | eina_clist_element_init (Eina_Clist *elem) |
Inits an (unlinked) element. | |
static int | eina_clist_element_is_linked (Eina_Clist *elem) |
Checks whether an element is in a list. | |
static void | eina_clist_remove (Eina_Clist *elem) |
Removes an element from its list. | |
static Eina_Clist * | eina_clist_next (const Eina_Clist *list, const Eina_Clist *elem) |
Gets the next element. | |
static Eina_Clist * | eina_clist_prev (const Eina_Clist *list, const Eina_Clist *elem) |
Gets the previous element. | |
static Eina_Clist * | eina_clist_head (const Eina_Clist *list) |
Gets the first element. | |
static Eina_Clist * | eina_clist_tail (const Eina_Clist *list) |
Gets the last element. | |
static int | eina_clist_empty (const Eina_Clist *list) |
Checks whether a list is empty. | |
static void | eina_clist_init (Eina_Clist *list) |
Initializes a list. | |
static unsigned int | eina_clist_count (const Eina_Clist *list) |
Counts the elements of a list. | |
static void | eina_clist_move_tail (Eina_Clist *dst, Eina_Clist *src) |
Moves all elements from src to the tail of dst . | |
static void | eina_clist_move_head (Eina_Clist *dst, Eina_Clist *src) |
Moves all elements from src to the head of dst . | |
Typedefs | |
typedef struct _Eina_Clist | Eina_Clist |
Type for _Eina_Clist structure containing the list head and the list entry. | |
Defines | |
#define | EINA_CLIST_FOR_EACH(cursor, list) for ((cursor) = (list)->next; (cursor) != (list); (cursor) = (cursor)->next) |
Iterates through the list. | |
#define | EINA_CLIST_FOR_EACH_SAFE(cursor, cursor2, list) |
Iterates through the list, with safety against removal. | |
#define | EINA_CLIST_FOR_EACH_ENTRY(elem, list, type, field) |
Iterates through the list using a list entry. | |
#define | EINA_CLIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field) |
Iterates through the list using a list entry, with safety against removal. | |
#define | EINA_CLIST_FOR_EACH_REV(cursor, list) for ((cursor) = (list)->prev; (cursor) != (list); (cursor) = (cursor)->prev) |
Iterates through the list in the reverse order. | |
#define | EINA_CLIST_FOR_EACH_SAFE_REV(cursor, cursor2, list) |
Iterates through the list in the reverse order, with safety against removal. | |
#define | EINA_CLIST_FOR_EACH_ENTRY_REV(elem, list, type, field) |
Iterates through the list in the reverse order using a list entry. | |
#define | EINA_CLIST_FOR_EACH_ENTRY_SAFE_REV(cursor, cursor2, list, type, field) |
Iterates through the list in the reverse order using a list entry, with safety against removal. | |
#define | EINA_CLIST_INIT(list) { &(list), &(list) } |
Macros for statically initialized lists. | |
#define | EINA_CLIST_ENTRY(elem, type, field) ((type *)((char *)(elem) - (uintptr_t)(&((type *)0)->field))) |
Gets a pointer to the object containing the list element. |
#define EINA_CLIST_ENTRY | ( | elem, | |
type, | |||
field | |||
) | ((type *)((char *)(elem) - (uintptr_t)(&((type *)0)->field))) |
Gets a pointer to the object containing the list element.
elem | The element to be used |
type | The type of the element |
field | The field of the element |
#define EINA_CLIST_FOR_EACH | ( | cursor, | |
list | |||
) | for ((cursor) = (list)->next; (cursor) != (list); (cursor) = (cursor)->next) |
Iterates through the list.
cursor | The pointer to be used during the interaction |
list | The list to be interacted with |
#define EINA_CLIST_FOR_EACH_ENTRY | ( | elem, | |
list, | |||
type, | |||
field | |||
) |
for ((elem) = EINA_CLIST_ENTRY((list)->next, type, field); \ &(elem)->field != (list); \ (elem) = EINA_CLIST_ENTRY((elem)->field.next, type, field))
Iterates through the list using a list entry.
elem | The element to be used |
list | The list to be iterated |
type | The type of the list |
field | The field of the element |
#define EINA_CLIST_FOR_EACH_ENTRY_REV | ( | elem, | |
list, | |||
type, | |||
field | |||
) |
for ((elem) = EINA_CLIST_ENTRY((list)->prev, type, field); \ &(elem)->field != (list); \ (elem) = EINA_CLIST_ENTRY((elem)->field.prev, type, field))
Iterates through the list in the reverse order using a list entry.
elem | The element to be used |
list | The list to be iterated |
type | The type of the list |
field | The field of the element |
#define EINA_CLIST_FOR_EACH_ENTRY_SAFE | ( | cursor, | |
cursor2, | |||
list, | |||
type, | |||
field | |||
) |
for ((cursor) = EINA_CLIST_ENTRY((list)->next, type, field), \ (cursor2) = EINA_CLIST_ENTRY((cursor)->field.next, type, field); \ &(cursor)->field != (list); \ (cursor) = (cursor2), \ (cursor2) = EINA_CLIST_ENTRY((cursor)->field.next, type, field))
Iterates through the list using a list entry, with safety against removal.
cursor | The pointer to be used during the interaction |
cursor2 | The auxiliary pointer to be used during the interaction |
list | The list to be interacted with |
type | The type of the list |
field | The field of the element |
#define EINA_CLIST_FOR_EACH_ENTRY_SAFE_REV | ( | cursor, | |
cursor2, | |||
list, | |||
type, | |||
field | |||
) |
for ((cursor) = EINA_CLIST_ENTRY((list)->prev, type, field), \ (cursor2) = EINA_CLIST_ENTRY((cursor)->field.prev, type, field); \ &(cursor)->field != (list); \ (cursor) = (cursor2), \ (cursor2) = EINA_CLIST_ENTRY((cursor)->field.prev, type, field))
Iterates through the list in the reverse order using a list entry, with safety against removal.
cursor | The pointer to be used during the interaction |
cursor2 | The auxiliary pointer to be used during the interaction |
list | The list to be interacted with |
type | The type of the list |
field | The field of the element |
#define EINA_CLIST_FOR_EACH_REV | ( | cursor, | |
list | |||
) | for ((cursor) = (list)->prev; (cursor) != (list); (cursor) = (cursor)->prev) |
Iterates through the list in the reverse order.
cursor | The pointer to be used during the interaction |
list | The list to be interacted with |
#define EINA_CLIST_FOR_EACH_SAFE | ( | cursor, | |
cursor2, | |||
list | |||
) |
for ((cursor) = (list)->next, (cursor2) = (cursor)->next; \
(cursor) != (list); \
(cursor) = (cursor2), (cursor2) = (cursor)->next)
Iterates through the list, with safety against removal.
cursor | The pointer to be used during the interaction |
cursor2 | The auxiliary pointer to be used during the interaction |
list | The list to be interacted with |
#define EINA_CLIST_FOR_EACH_SAFE_REV | ( | cursor, | |
cursor2, | |||
list | |||
) |
for ((cursor) = (list)->prev, (cursor2) = (cursor)->prev; \
(cursor) != (list); \
(cursor) = (cursor2), (cursor2) = (cursor)->prev)
Iterates through the list in the reverse order, with safety against removal.
cursor | The pointer to be used during the interaction |
cursor2 | The auxiliary pointer to be used during the interaction |
list | The list to be interacted with |
#define EINA_CLIST_INIT | ( | list | ) | { &(list), &(list) } |
Macros for statically initialized lists.
list | The list to be used |
Type for _Eina_Clist structure containing the list head and the list entry.
static void eina_clist_add_after | ( | Eina_Clist * | elem, |
Eina_Clist * | to_add | ||
) | [static] |
Adds an element after the specified one.
[in] | elem | An element in the list |
[in] | to_add | The element to add to the list |
static void eina_clist_add_before | ( | Eina_Clist * | elem, |
Eina_Clist * | to_add | ||
) | [static] |
Adds an element before the specified one.
[in] | elem | An element in the list |
[in] | to_add | The element to add to the list |
static void eina_clist_add_head | ( | Eina_Clist * | list, |
Eina_Clist * | elem | ||
) | [static] |
Adds an element to the head of the list.
[in] | list | The list |
[in] | elem | An element |
static void eina_clist_add_tail | ( | Eina_Clist * | list, |
Eina_Clist * | elem | ||
) | [static] |
Adds an element at the tail of the list.
[in] | list | The list |
[in] | elem | An element |
static unsigned int eina_clist_count | ( | const Eina_Clist * | list | ) | [static] |
Counts the elements of a list.
[in] | list | The list |
static void eina_clist_element_init | ( | Eina_Clist * | elem | ) | [static] |
Inits an (unlinked) element.
This function is called on elements that have not been added to the list so that eina_clist_element_init() works correctly.
[in] | elem | An element |
static int eina_clist_element_is_linked | ( | Eina_Clist * | elem | ) | [static] |
Checks whether an element is in a list.
[in] | elem | An element |
elem
, or it has been added to a list or removed from a list.static int eina_clist_empty | ( | const Eina_Clist * | list | ) | [static] |
Checks whether a list is empty.
[in] | list | The list |
list
is empty, otherwise zero if it is notstatic Eina_Clist* eina_clist_head | ( | const Eina_Clist * | list | ) | [static] |
Gets the first element.
[in] | list | The list |
list
, otherwise NULL
if list
is emptystatic void eina_clist_init | ( | Eina_Clist * | list | ) | [static] |
Initializes a list.
[in] | list | The list |
static void eina_clist_move_head | ( | Eina_Clist * | dst, |
Eina_Clist * | src | ||
) | [static] |
Moves all elements from src
to the head of dst
.
[in] | dst | The list to be prepended to |
[in] | src | The list to prepend |
src
is initialized, but is empty after this operation.static void eina_clist_move_tail | ( | Eina_Clist * | dst, |
Eina_Clist * | src | ||
) | [static] |
Moves all elements from src
to the tail of dst
.
[in] | dst | The list to be appended to |
[in] | src | The list to append |
src
is initialized, but is empty after this operation.static Eina_Clist* eina_clist_next | ( | const Eina_Clist * | list, |
const Eina_Clist * | elem | ||
) | [static] |
Gets the next element.
[in] | list | The list |
[in] | elem | An element |
elem
in list
, otherwise NULL
if elem
is last in list
elem
is in list
.static Eina_Clist* eina_clist_prev | ( | const Eina_Clist * | list, |
const Eina_Clist * | elem | ||
) | [static] |
Gets the previous element.
[in] | list | The list |
[in] | elem | An element |
elem
, otherwise NULL
if elem
is first in list
static void eina_clist_remove | ( | Eina_Clist * | elem | ) | [static] |
Removes an element from its list.
[in] | elem | An element |
static Eina_Clist* eina_clist_tail | ( | const Eina_Clist * | list | ) | [static] |
Gets the last element.
[in] | list | The list |
list
, otherwise NULL
if list
is empty