forked from enlightenment/efl
* eina_list: Add eina_list_search_sorted_list and eina_list_search_unsorted_list.
SVN revision: 39546
This commit is contained in:
parent
2849d938ff
commit
9fab9595b5
|
@ -99,9 +99,11 @@ EAPI Eina_List *eina_list_clone(const Eina_List *list) EINA_WARN_UNUSED_RESULT;
|
|||
EAPI Eina_List *eina_list_sort (Eina_List *list, unsigned int size, Eina_Compare_Cb func) EINA_ARG_NONNULL(3) 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 void *eina_list_search_sorted(const Eina_List *list, Eina_Compare_Cb func, const void *data);
|
||||
EAPI void *eina_list_search_unsorted(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);
|
||||
EAPI void *eina_list_search_unsorted(const Eina_List *list, Eina_Compare_Cb func, const void *data);
|
||||
|
||||
static inline Eina_List *eina_list_last (const Eina_List *list) EINA_PURE EINA_WARN_UNUSED_RESULT;
|
||||
static inline Eina_List *eina_list_next (const Eina_List *list) EINA_PURE EINA_WARN_UNUSED_RESULT;
|
||||
|
|
|
@ -1590,9 +1590,10 @@ eina_list_sorted_merge(Eina_List *left, Eina_List *right, Eina_Compare_Cb func)
|
|||
return ret;
|
||||
}
|
||||
|
||||
EAPI void *
|
||||
eina_list_search_sorted(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)
|
||||
{
|
||||
const Eina_List *ct;
|
||||
void *d;
|
||||
unsigned int inf, sup, cur, tmp;
|
||||
int part;
|
||||
|
@ -1600,7 +1601,8 @@ eina_list_search_sorted(const Eina_List *list, Eina_Compare_Cb func, const void
|
|||
inf = 0;
|
||||
sup = eina_list_count(list) ;
|
||||
cur = sup >> 1;
|
||||
d = eina_list_nth(list, cur);
|
||||
ct = eina_list_nth_list(list, cur);
|
||||
d = eina_list_data_get(ct);
|
||||
|
||||
while ((part = func(d, data)))
|
||||
{
|
||||
|
@ -1613,18 +1615,25 @@ eina_list_search_sorted(const Eina_List *list, Eina_Compare_Cb func, const void
|
|||
/* Faster to move directly from where we are to the new position than using eina_list_nth_list. */
|
||||
tmp = (sup + inf) >> 1;
|
||||
if (tmp < cur)
|
||||
for (; cur != tmp; cur--, d = eina_list_prev(d))
|
||||
for (; cur != tmp; cur--, ct = eina_list_prev(ct))
|
||||
;
|
||||
else
|
||||
for (; cur != tmp; cur++, d = eina_list_next(d))
|
||||
for (; cur != tmp; cur++, ct = eina_list_next(ct))
|
||||
;
|
||||
d = eina_list_data_get(ct);
|
||||
}
|
||||
|
||||
return d;
|
||||
return (Eina_List*) ct;
|
||||
}
|
||||
|
||||
EAPI void *
|
||||
eina_list_search_unsorted(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)
|
||||
{
|
||||
return eina_list_data_get(eina_list_search_sorted_list(list, func, data));
|
||||
}
|
||||
|
||||
EAPI Eina_List *
|
||||
eina_list_search_unsorted_list(const Eina_List *list, Eina_Compare_Cb func, const void *data)
|
||||
{
|
||||
const Eina_List *l;
|
||||
void *d;
|
||||
|
@ -1632,11 +1641,17 @@ eina_list_search_unsorted(const Eina_List *list, Eina_Compare_Cb func, const voi
|
|||
EINA_LIST_FOREACH(list, l, d)
|
||||
{
|
||||
if (!func(d, data))
|
||||
return d;
|
||||
return (Eina_List*) l;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
EAPI void *
|
||||
eina_list_search_unsorted(const Eina_List *list, Eina_Compare_Cb func, const void *data)
|
||||
{
|
||||
return eina_list_data_get(eina_list_search_unsorted_list(list, func, data));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Returned a new iterator asociated to a list.
|
||||
|
|
Loading…
Reference in New Issue