forked from enlightenment/efl
* 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:
parent
9fab9595b5
commit
e027bb8a6e
|
@ -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_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_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 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 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);
|
EAPI Eina_List *eina_list_search_unsorted_list(const Eina_List *list, Eina_Compare_Cb func, const void *data);
|
||||||
|
|
|
@ -1591,7 +1591,7 @@ eina_list_sorted_merge(Eina_List *left, Eina_List *right, Eina_Compare_Cb func)
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI Eina_List *
|
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;
|
const Eina_List *ct;
|
||||||
void *d;
|
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)))
|
while ((part = func(d, data)))
|
||||||
{
|
{
|
||||||
if (inf == sup)
|
if (inf == sup
|
||||||
return NULL;
|
|| (part < 0 && inf == cur)
|
||||||
|
|| (part > 0 && sup == cur))
|
||||||
|
return (Eina_List*) ct;
|
||||||
if (part < 0)
|
if (part < 0)
|
||||||
inf = (sup + inf) >> 1;
|
inf = (sup + inf) >> 1;
|
||||||
else
|
else
|
||||||
|
@ -1626,6 +1628,20 @@ eina_list_search_sorted_list(const Eina_List *list, Eina_Compare_Cb func, const
|
||||||
return (Eina_List*) ct;
|
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 *
|
EAPI void *
|
||||||
eina_list_search_sorted(const Eina_List *list, Eina_Compare_Cb func, const void *data)
|
eina_list_search_sorted(const Eina_List *list, Eina_Compare_Cb func, const void *data)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue