forked from enlightenment/efl
add EAPI eina_list_map(Eina_List *list, Eina_Map_Cb func)
- eina_list_map applies func on each node of list - typedef void (*Eina_Map_Cb)(const void *data);
This commit is contained in:
parent
d874570568
commit
53c02a31ac
|
@ -1178,6 +1178,26 @@ eina_list_filter(Eina_List *list, Eina_Filter_Cb func)
|
|||
return lfiltered;
|
||||
}
|
||||
|
||||
EAPI Eina_List *
|
||||
eina_list_map(Eina_List *list, Eina_Map_Cb func)
|
||||
{
|
||||
const Eina_List *l;
|
||||
void *data;
|
||||
|
||||
if (!list)
|
||||
return NULL;
|
||||
|
||||
EINA_MAGIC_CHECK_LIST(list, NULL);
|
||||
|
||||
if (func == NULL)
|
||||
return list;
|
||||
|
||||
EINA_LIST_FOREACH(list, l, data)
|
||||
func(data);
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
EAPI Eina_List *
|
||||
eina_list_shuffle(Eina_List *list, Eina_Random_Cb func)
|
||||
{
|
||||
|
|
|
@ -958,6 +958,18 @@ EAPI Eina_List *eina_list_sort(Eina_List *list, unsigned int limit, E
|
|||
*/
|
||||
EAPI Eina_List *eina_list_filter(Eina_List *list, Eina_Filter_Cb func) EINA_WARN_UNUSED_RESULT;
|
||||
|
||||
/**
|
||||
* @brief Apply a function on all nodes of list
|
||||
*
|
||||
* @param list The list to apply function on.
|
||||
* @param func The function to apply on nodes.
|
||||
* @return The same list.
|
||||
* @since 1.8
|
||||
*
|
||||
* @warning @p list must be a pointer to the first element of the list.
|
||||
*/
|
||||
EAPI Eina_List *eina_list_map(Eina_List *list, Eina_Map_Cb func) EINA_WARN_UNUSED_RESULT;
|
||||
|
||||
/**
|
||||
* @brief Shuffle list.
|
||||
*
|
||||
|
|
|
@ -347,6 +347,18 @@ typedef Eina_Bool (*Eina_Filter_Cb)(const void *data);
|
|||
*/
|
||||
#define EINA_FILTER_CB(function) ((Eina_Filter_Cb)function)
|
||||
|
||||
/**
|
||||
* @typedef Eina_Map_Cb
|
||||
* Function to be applied on nodes.
|
||||
*/
|
||||
typedef void (*Eina_Map_Cb)(const void *data);
|
||||
|
||||
/**
|
||||
* @def EINA_MAP_CB
|
||||
* Macro to cast to Eina_Map_Cb.
|
||||
*/
|
||||
#define EINA_MAP_CB(function) ((Eina_Map_Cb)function)
|
||||
|
||||
/**
|
||||
* @typedef Eina_Random_Cb
|
||||
* Function used in shuffling functions. An integer betwen min and max
|
||||
|
|
|
@ -501,12 +501,18 @@ static Eina_Bool filter_cb(int *data)
|
|||
return ( (*data < 81) ? EINA_TRUE : EINA_FALSE );
|
||||
}
|
||||
|
||||
static void map_cb(int *data)
|
||||
{
|
||||
*data = *data * 3;
|
||||
}
|
||||
|
||||
START_TEST(eina_test_filter)
|
||||
{
|
||||
int i;
|
||||
int *p;
|
||||
int data[] = { 6, 9, 93, 42, 1, 7, 9, 81, 1664, 1337 };
|
||||
int result[] = { 6, 9, 42, 1, 7, 9, 81 };
|
||||
int result1[] = { 6, 9, 42, 1, 7, 9 };
|
||||
int result2[] = { 18, 27, 126, 3, 21, 27 };
|
||||
Eina_List *list = NULL;
|
||||
Eina_List *l = NULL;
|
||||
|
||||
|
@ -529,7 +535,15 @@ START_TEST(eina_test_filter)
|
|||
for (i = 0; i < 6; i++)
|
||||
{
|
||||
p = eina_list_nth(l, i);
|
||||
fail_if(*p != result[i]);
|
||||
fail_if(*p != result1[i]);
|
||||
}
|
||||
|
||||
l = eina_list_map(l, EINA_MAP_CB(map_cb));
|
||||
fail_if(eina_list_count(l) != 6);
|
||||
for (i = 0; i < 6; i++)
|
||||
{
|
||||
p = eina_list_nth(l, i);
|
||||
fail_if(*p != result2[i]);
|
||||
}
|
||||
l = eina_list_free(l);
|
||||
|
||||
|
|
Loading…
Reference in New Issue