* eina_list: Add a eina_list_search_sorted_near_list. Usefull if you want to build

a sorted list.


SVN revision: 39550
This commit is contained in:
Cedric BAIL 2009-03-18 15:00:52 +00:00
parent 9fab9595b5
commit e027bb8a6e
2 changed files with 20 additions and 3 deletions

View File

@ -100,6 +100,7 @@ EAPI Eina_List *eina_list_sort (Eina_List *list, unsigned int size, Eina_Compare
EAPI Eina_List *eina_list_merge (Eina_List *left, Eina_List *right) EINA_WARN_UNUSED_RESULT;
EAPI Eina_List *eina_list_sorted_merge(Eina_List *left, Eina_List *right, Eina_Compare_Cb func) EINA_ARG_NONNULL(3) EINA_WARN_UNUSED_RESULT;
EAPI Eina_List *eina_list_search_sorted_near_list(const Eina_List *list, Eina_Compare_Cb func, const void *data);
EAPI Eina_List *eina_list_search_sorted_list(const Eina_List *list, Eina_Compare_Cb func, const void *data);
EAPI void *eina_list_search_sorted(const Eina_List *list, Eina_Compare_Cb func, const void *data);
EAPI Eina_List *eina_list_search_unsorted_list(const Eina_List *list, Eina_Compare_Cb func, const void *data);

View File

@ -1591,7 +1591,7 @@ eina_list_sorted_merge(Eina_List *left, Eina_List *right, Eina_Compare_Cb func)
}
EAPI Eina_List *
eina_list_search_sorted_list(const Eina_List *list, Eina_Compare_Cb func, const void *data)
eina_list_search_sorted_near_list(const Eina_List *list, Eina_Compare_Cb func, const void *data)
{
const Eina_List *ct;
void *d;
@ -1606,8 +1606,10 @@ eina_list_search_sorted_list(const Eina_List *list, Eina_Compare_Cb func, const
while ((part = func(d, data)))
{
if (inf == sup)
return NULL;
if (inf == sup
|| (part < 0 && inf == cur)
|| (part > 0 && sup == cur))
return (Eina_List*) ct;
if (part < 0)
inf = (sup + inf) >> 1;
else
@ -1626,6 +1628,20 @@ eina_list_search_sorted_list(const Eina_List *list, Eina_Compare_Cb func, const
return (Eina_List*) ct;
}
EAPI Eina_List *
eina_list_search_sorted_list(const Eina_List *list, Eina_Compare_Cb func, const void *data)
{
Eina_List *near;
void *d;
near = eina_list_search_sorted_near_list(list, func, data);
if (!near) return NULL;
d = eina_list_data_get(near);
if (!func(d, data))
return near;
return NULL;
}
EAPI void *
eina_list_search_sorted(const Eina_List *list, Eina_Compare_Cb func, const void *data)
{