Tizen Native API
5.0
|
These functions manage iterators on containers.
These functions allow to access elements of a container in a generic way, without knowing which container is used (a bit like iterators in the C++ STL). Iterators only allows sequential access (that is, from an element to the next one). For random access, see Accessor Functions.
Getting an iterator to access elements of a given container is done through the functions of that particular container. There is no function to create a generic iterator as iterators absolutely depend on the container. This means you won't find iterator creation function here, those can be found on the documentation of the container type you're using. Though created with container specific functions iterators are always deleted with the same function: eina_iterator_free().
To get the data and iterate, use eina_iterator_next(). To call a function on all the elements of a container, use eina_iterator_foreach().
Here an example
Functions | |
void | eina_iterator_free (Eina_Iterator *iterator) |
Frees an iterator. | |
void * | eina_iterator_container_get (Eina_Iterator *iterator) |
Returns the container of an iterator. | |
Eina_Bool | eina_iterator_next (Eina_Iterator *iterator, void **data) |
Returns the value of the current element and go to the next one. | |
void | eina_iterator_foreach (Eina_Iterator *iterator, Eina_Each_Cb callback, const void *fdata) |
Iterates over the container and execute a callback on each element. | |
Eina_Bool | eina_iterator_lock (Eina_Iterator *iterator) |
Locks the container of the iterator. | |
Eina_Bool | eina_iterator_unlock (Eina_Iterator *iterator) |
Unlocks the container of the iterator. | |
Typedefs | |
typedef struct _Eina_Iterator | Eina_Iterator |
typedef Eina_Bool(* | Eina_Iterator_Next_Callback )(Eina_Iterator *it, void **data) |
typedef void *(* | Eina_Iterator_Get_Container_Callback )(Eina_Iterator *it) |
typedef void(* | Eina_Iterator_Free_Callback )(Eina_Iterator *it) |
typedef Eina_Bool(* | Eina_Iterator_Lock_Callback )(Eina_Iterator *it) |
Defines | |
#define | FUNC_ITERATOR_NEXT(Function) ((Eina_Iterator_Next_Callback)Function) |
#define | FUNC_ITERATOR_GET_CONTAINER(Function) ((Eina_Iterator_Get_Container_Callback)Function) |
#define | FUNC_ITERATOR_FREE(Function) ((Eina_Iterator_Free_Callback)Function) |
#define | FUNC_ITERATOR_LOCK(Function) ((Eina_Iterator_Lock_Callback)Function) |
#define | EINA_ITERATOR_FOREACH(itr,data) |
Definition for the macro to iterate over all elements easily. |
#define EINA_ITERATOR_FOREACH | ( | itr, | |
data | |||
) |
while (eina_iterator_next((itr), \ (void **)(void *)&(data)))
Definition for the macro to iterate over all elements easily.
itr | The iterator to use. |
data | Where to store * data, must be a pointer support getting its address since * eina_iterator_next() requires a pointer to pointer! |
This macro is a convenient way to use iterators, very similar to EINA_LIST_FOREACH().
This macro can be used for freeing the data of a list, like in the following example. It has the same goal as the one documented in EINA_LIST_FOREACH(), but using iterators:
Eina_List *list; Eina_Iterator *itr; char *data; // list is already filled, // its elements are just duplicated strings itr = eina_list_iterator_new(list); EINA_ITERATOR_FOREACH(itr, data) free(data); eina_iterator_free(itr); eina_list_free(list);
#define FUNC_ITERATOR_FREE | ( | Function | ) | ((Eina_Iterator_Free_Callback)Function) |
Helper macro to cast Function
to a Eina_Iterator_Free_Callback.
#define FUNC_ITERATOR_GET_CONTAINER | ( | Function | ) | ((Eina_Iterator_Get_Container_Callback)Function) |
Helper macro to cast Function
to a Eina_Iterator_Get_Container_Callback.
#define FUNC_ITERATOR_LOCK | ( | Function | ) | ((Eina_Iterator_Lock_Callback)Function) |
Helper macro to cast Function
to a Eina_Iterator_Lock_Callback.
#define FUNC_ITERATOR_NEXT | ( | Function | ) | ((Eina_Iterator_Next_Callback)Function) |
Helper macro to cast Function
to a Eina_Iterator_Next_Callback.
Abstract type for iterators.
Type for a callback that frees the container.
Type for a callback that returns the container.
Type for a callback that lock the container.
Type for a callback that returns the next element in a container.
void* eina_iterator_container_get | ( | Eina_Iterator * | iterator | ) |
Returns the container of an iterator.
iterator | The iterator. |
This function returns the container which created iterator
. If iterator
is NULL
, this function returns NULL
.
void eina_iterator_foreach | ( | Eina_Iterator * | iterator, |
Eina_Each_Cb | callback, | ||
const void * | fdata | ||
) |
Iterates over the container and execute a callback on each element.
iterator | The iterator. |
callback | The callback called on each iteration. |
fdata | The data passed to the callback. |
This function iterates over the elements pointed by iterator
, beginning from the current element. For Each element, the callback cb
is called with the data fdata
. If iterator
is NULL
, the function returns immediately. Also, if cb
returns EINA_FALSE, the iteration stops at that point, if cb
returns EINA_TRUE the iteration continues.
void eina_iterator_free | ( | Eina_Iterator * | iterator | ) |
Frees an iterator.
iterator | The iterator to free. |
This function frees iterator
if it is not NULL
;
Eina_Bool eina_iterator_lock | ( | Eina_Iterator * | iterator | ) |
Locks the container of the iterator.
iterator | The iterator. |
If the container of the iterator
permits it, it will be locked. When a container is locked calling eina_iterator_foreach() on it will return immediately. If iterator
is NULL
or if a problem occurred, EINA_FALSE is returned, otherwise EINA_TRUE is returned. If the container isn't lockable, it will return EINA_TRUE.
Eina_Bool eina_iterator_next | ( | Eina_Iterator * | iterator, |
void ** | data | ||
) |
Returns the value of the current element and go to the next one.
iterator | The iterator. |
data | The data of the element. |
This function returns the value of the current element pointed by iterator
in data
, then goes to the next element. If iterator
is NULL
or if a problem occurred, EINA_FALSE is returned, otherwise EINA_TRUE is returned.
Eina_Bool eina_iterator_unlock | ( | Eina_Iterator * | iterator | ) |
Unlocks the container of the iterator.
iterator | The iterator. |
If the container of the iterator
permits it and was previously locked, it will be unlocked. If iterator
is NULL
or if a problem occurred, EINA_FALSE is returned, otherwise EINA_TRUE is returned. If the container is not lockable, it will return EINA_TRUE.