| 
    Tizen Native API
    10.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 :
- Uses less memory (two machine words per item).
 - Allows removing items without knowing which list they're in while using O(1) time.
 - Doesn't need to keep updating the head pointer as the list is changed.
 
Disadvantages:
- O(N) time to calculate the list length.
 - Requires one list entry in a struct per list (i.e. it's an inlist).
 - Requires a head/tail pointer.
 - Needs to know the list head when moving to the next or previous pointer.
 
- Note:
 - There's no 
NULLat the end of the list, the last item points to the head. - List heads must be initialized with EINA_CLIST_INIT or by calling eina_clist_element_init.
 
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 Documentation
| #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.
- Parameters:
 - 
  
[out] elem The element to be used [in] type The type of the element [in] 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.
- Parameters:
 - 
  
[out] cursor The pointer to be used during the interaction [in] 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.
- Parameters:
 - 
  
[out] elem The element to be used [in] list The list to be iterated [in] type The type of the list [in] 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.
- Parameters:
 - 
  
[out] elem The element to be used [in] list The list to be iterated [in] type The type of the list [in] 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.
- Parameters:
 - 
  
[out] cursor The pointer to be used during the interaction [out] cursor2 The auxiliary pointer to be used during the interaction [in] list The list to be interacted with [in] type The type of the list [in] 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.
- Parameters:
 - 
  
[out] cursor The pointer to be used during the interaction [out] cursor2 The auxiliary pointer to be used during the interaction [in] list The list to be interacted with [in] type The type of the list [in] 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.
- Parameters:
 - 
  
[out] cursor The pointer to be used during the interaction [in] 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.
- Parameters:
 - 
  
[out] cursor The pointer to be used during the interaction [out] cursor2 The auxiliary pointer to be used during the interaction [in] 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.
- Parameters:
 - 
  
[out] cursor The pointer to be used during the interaction [out] cursor2 The auxiliary pointer to be used during the interaction [in] list The list to be interacted with  
| #define EINA_CLIST_INIT | ( | list | ) | { &(list), &(list) } | 
Macros for statically initialized lists.
- Parameters:
 - 
  
[in,out] list The list to be used  
Typedef Documentation
Type for _Eina_Clist structure containing the list head and the list entry.
- Since (EFL) :
 - 1.1.0
 
Function Documentation
| static void eina_clist_add_after | ( | Eina_Clist * | elem, | 
| Eina_Clist * | to_add | ||
| ) |  [static] | 
        
Adds an element after the specified one.
- Parameters:
 - 
  
[in,out] elem An element in the list [in] to_add The element to add to the list  
- Precondition:
 - The list head must be initialized once before adding anything.
 - The element is not in any list.
 
- Note:
 - There is no need to initialize an element before adding it to the list.
 
- Since (EFL) :
 - 1.1.0
 
| static void eina_clist_add_before | ( | Eina_Clist * | elem, | 
| Eina_Clist * | to_add | ||
| ) |  [static] | 
        
Adds an element before the specified one.
- Parameters:
 - 
  
[in,out] elem An element in the list [in] to_add The element to add to the list  
- Precondition:
 - The list head must be initialized once before adding anything.
 - The element is not in any list.
 
- Note:
 - There is no need to initialize an element before adding it to the list.
 
- Since (EFL) :
 - 1.1.0
 
| static void eina_clist_add_head | ( | Eina_Clist * | list, | 
| Eina_Clist * | elem | ||
| ) |  [static] | 
        
Adds an element to the head of the list.
- Parameters:
 - 
  
[in,out] list The list [in] elem An element  
- Precondition:
 - The list head must be initialized once before adding anything.
 - The element is not in any list.
 
- Note:
 - There is no need to initialize an element before adding it to the list.
 
- Since (EFL) :
 - 1.1.0
 
| static void eina_clist_add_tail | ( | Eina_Clist * | list, | 
| Eina_Clist * | elem | ||
| ) |  [static] | 
        
Adds an element at the tail of the list.
- Parameters:
 - 
  
[in,out] list The list [in] elem An element  
- Precondition:
 - The list head must be initialized once before adding anything.
 - The element is not in any list.
 
- Note:
 - There is no need to initialize an element before adding it to the list.
 
- Since (EFL) :
 - 1.1.0
 
| static unsigned int eina_clist_count | ( | const Eina_Clist * | list | ) |  [static] | 
        
Counts the elements of a list.
- Parameters:
 - 
  
[in] list The list  
- Returns:
 - The number of items in the list
 
- Since (EFL) :
 - 1.1.0
 
| 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.
- Parameters:
 - 
  
[in,out] elem An element  
- Precondition:
 - The element is not in any list.
 
- Postcondition:
 - The element is marked as not being in any list.
 
- Note:
 - It is not necessary to call this before adding an element to this list.
 
- Since (EFL) :
 - 1.1.0
 
| static int eina_clist_element_is_linked | ( | Eina_Clist * | elem | ) |  [static] | 
        
Checks whether an element is in a list.
- Parameters:
 - 
  
[in] elem An element  
- Returns:
 - TRUE if the element is in a list, else FALSE.
 
- Precondition:
 - Either eina_clist_element_init() has been called on 
elem, or it has been added to a list or removed from a list. 
- Since (EFL) :
 - 1.1.0
 
| static int eina_clist_empty | ( | const Eina_Clist * | list | ) |  [static] | 
        
Checks whether a list is empty.
- Parameters:
 - 
  
[in] list The list  
- Returns:
 - A non-zero value if 
listis empty, otherwise zero if it is not 
- Since (EFL) :
 - 1.1.0
 
| static Eina_Clist* eina_clist_head | ( | const Eina_Clist * | list | ) |  [static] | 
        
Gets the first element.
- Parameters:
 - 
  
[in] list The list  
- Returns:
 - The first element in 
list, otherwiseNULLiflistis empty 
- Since (EFL) :
 - 1.1.0
 
| static void eina_clist_init | ( | Eina_Clist * | list | ) |  [static] | 
        
Initializes a list.
- Parameters:
 - 
  
[in,out] list The list  
- Precondition:
 - The list is uninitialized
 
- Postcondition:
 - The list contains no items
 
- Note:
 - Don't call this function on a list with items
 - This function must be called. Don't try to initialize the list by zeroing out the list head.
 
- Since (EFL) :
 - 1.1.0
 
| static void eina_clist_move_head | ( | Eina_Clist * | dst, | 
| Eina_Clist * | src | ||
| ) |  [static] | 
        
Moves all elements from src to the head of dst. 
- Parameters:
 - 
  
[in,out] dst The list to be prepended to [in] src The list to prepend  
- Postcondition:
 srcis initialized, but is empty after this operation.
- Since (EFL) :
 - 1.1.0
 
| static void eina_clist_move_tail | ( | Eina_Clist * | dst, | 
| Eina_Clist * | src | ||
| ) |  [static] | 
        
Moves all elements from src to the tail of dst. 
- Parameters:
 - 
  
[in,out] dst The list to be appended to [in] src The list to append  
- Postcondition:
 srcis initialized, but is empty after this operation.
- Since (EFL) :
 - 1.1.0
 
| static Eina_Clist* eina_clist_next | ( | const Eina_Clist * | list, | 
| const Eina_Clist * | elem | ||
| ) |  [static] | 
        
Gets the next element.
- Parameters:
 - 
  
[in] list The list [in] elem An element  
- Returns:
 - The element after 
eleminlist, otherwiseNULLifelemis last inlist 
- Precondition:
 elemis inlist.
- Since (EFL) :
 - 1.1.0
 
| static Eina_Clist* eina_clist_prev | ( | const Eina_Clist * | list, | 
| const Eina_Clist * | elem | ||
| ) |  [static] | 
        
Gets the previous element.
- Parameters:
 - 
  
[in] list The list [in] elem An element  
- Returns:
 - The element before 
elem, otherwiseNULLifelemis first inlist 
- Since (EFL) :
 - 1.1.0
 
| static void eina_clist_remove | ( | Eina_Clist * | elem | ) |  [static] | 
        
Removes an element from its list.
- Parameters:
 - 
  
[in,out] elem An element  
- Precondition:
 - The element is already in a list.
 
- Postcondition:
 - The element is marked as not being in any list.
 
- Since (EFL) :
 - 1.1.0
 
| static Eina_Clist* eina_clist_tail | ( | const Eina_Clist * | list | ) |  [static] | 
        
Gets the last element.
- Parameters:
 - 
  
[in] list The list  
- Returns:
 - The last element in 
list, otherwiseNULLiflistis empty 
- Since (EFL) :
 - 1.1.0