forked from enlightenment/efl
parent
22952844c4
commit
cc1863fc96
|
@ -97,6 +97,8 @@ 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_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_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_split_list(Eina_List *list, Eina_List *relative, Eina_List **right) EINA_WARN_UNUSED_RESULT;
|
||||||
|
|
||||||
|
|
||||||
EAPI Eina_List *eina_list_search_sorted_near_list(const Eina_List *list, Eina_Compare_Cb func, const void *data, int *result_cmp);
|
EAPI Eina_List *eina_list_search_sorted_near_list(const Eina_List *list, Eina_Compare_Cb func, const void *data, int *result_cmp);
|
||||||
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);
|
||||||
|
|
|
@ -1422,7 +1422,7 @@ eina_list_clone(const Eina_List *list)
|
||||||
*
|
*
|
||||||
* This function sorts @p list. @p size if the number of the first
|
* This function sorts @p list. @p size if the number of the first
|
||||||
* element to sort. If @p size is 0 or greater than the number of
|
* element to sort. If @p size is 0 or greater than the number of
|
||||||
* elements in @p list, all the elemnts are sorted. @p func is used to
|
* elements in @p list, all the elements are sorted. @p func is used to
|
||||||
* compare two elements of @p list. If @p list or @p func are @c NULL,
|
* compare two elements of @p list. If @p list or @p func are @c NULL,
|
||||||
* this function returns @c NULL.
|
* this function returns @c NULL.
|
||||||
*
|
*
|
||||||
|
@ -1581,6 +1581,62 @@ eina_list_merge(Eina_List *left, Eina_List *right)
|
||||||
return left;
|
return left;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Split a list into 2 lists.
|
||||||
|
*
|
||||||
|
* @param list List to split.
|
||||||
|
* @param relative The list will be split after @p relative.
|
||||||
|
* @param right The head of the new right list.
|
||||||
|
* @return The new left list
|
||||||
|
*
|
||||||
|
* This function split @p list into two lists ( left and right ) after the node @p relative. @p Relative
|
||||||
|
* will become the last node of the left list. If @p list or @p right are NULL list is returns.
|
||||||
|
* If @p relative is NULL right is set to @p list and NULL is returns.
|
||||||
|
* If @p relative is the last node of @p list list is returns and @p right is set to NULL.
|
||||||
|
*
|
||||||
|
* list does not exist anymore after the split.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
EAPI Eina_List *
|
||||||
|
eina_list_split_list(Eina_List *list, Eina_List *relative, Eina_List **right)
|
||||||
|
{
|
||||||
|
Eina_List *next;
|
||||||
|
Eina_List *itr;
|
||||||
|
|
||||||
|
if(!right) return list;
|
||||||
|
*right = NULL;
|
||||||
|
|
||||||
|
if (!list) return NULL;
|
||||||
|
if (!relative)
|
||||||
|
{
|
||||||
|
*right = list;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
if (relative == eina_list_last(list)) return list;
|
||||||
|
|
||||||
|
next = eina_list_next(relative);
|
||||||
|
next->prev = NULL;
|
||||||
|
next->accounting = _eina_list_mempool_accounting_new(next);
|
||||||
|
next->accounting->last = list->accounting->last;
|
||||||
|
*right = next;
|
||||||
|
|
||||||
|
itr = next;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
itr->accounting = next->accounting;
|
||||||
|
next->accounting->count++;
|
||||||
|
itr = itr->next;
|
||||||
|
}
|
||||||
|
while (itr);
|
||||||
|
|
||||||
|
relative->next = NULL;
|
||||||
|
list->accounting->last = relative;
|
||||||
|
list->accounting->count = list->accounting->count - next->accounting->count;
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Merge two sorted list according to the ordering func will return.
|
* @brief Merge two sorted list according to the ordering func will return.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue