/* FIXME: TODO please, refactor this :) */
/*============================================================================*
-* Local *
-*============================================================================*/
+ * Local *
+ *============================================================================*/
/**
* @cond LOCAL
};
static Eina_Bool
-eina_inlist_iterator_next(Eina_Iterator_Inlist *it, void **data) {
+eina_inlist_iterator_next(Eina_Iterator_Inlist *it, void **data)
+{
if (!it->current)
- return EINA_FALSE;
+ return EINA_FALSE;
if (data)
- *data = (void *)it->current;
+ *data = (void *)it->current;
it->current = it->current->next;
}
static Eina_Inlist *
-eina_inlist_iterator_get_container(Eina_Iterator_Inlist *it) {
+eina_inlist_iterator_get_container(Eina_Iterator_Inlist *it)
+{
return (Eina_Inlist *)it->head;
}
static void
-eina_inlist_iterator_free(Eina_Iterator_Inlist *it) {
+eina_inlist_iterator_free(Eina_Iterator_Inlist *it)
+{
free(it);
}
static Eina_Bool
eina_inlist_accessor_get_at(Eina_Accessor_Inlist *it,
unsigned int idx,
- void **data) {
+ void **data)
+{
const Eina_Inlist *over;
unsigned int middle;
unsigned int i;
if (it->index == idx)
- over = it->current;
+ over = it->current;
else if (idx > it->index)
- /* Looking after current. */
- for (i = it->index, over = it->current;
- i < idx && over;
- ++i, over = over->next)
- ;
+ /* Looking after current. */
+ for (i = it->index, over = it->current;
+ i < idx && over;
+ ++i, over = over->next)
+ ;
else
{
middle = it->index >> 1;
if (idx > middle)
- /* Looking backward from current. */
- for (i = it->index, over = it->current;
- i > idx && over;
- --i, over = over->prev)
- ;
+ /* Looking backward from current. */
+ for (i = it->index, over = it->current;
+ i > idx && over;
+ --i, over = over->prev)
+ ;
else
- /* Looking from the start. */
- for (i = 0, over = it->head;
- i < idx && over;
- ++i, over = over->next)
- ;
+ /* Looking from the start. */
+ for (i = 0, over = it->head;
+ i < idx && over;
+ ++i, over = over->next)
+ ;
}
if (!over)
- return EINA_FALSE;
+ return EINA_FALSE;
it->current = over;
it->index = idx;
if (data)
- *data = (void *)over;
+ *data = (void *)over;
return EINA_TRUE;
}
static Eina_Inlist *
-eina_inlist_accessor_get_container(Eina_Accessor_Inlist *it) {
+eina_inlist_accessor_get_container(Eina_Accessor_Inlist *it)
+{
return (Eina_Inlist *)it->head;
}
static void
-eina_inlist_accessor_free(Eina_Accessor_Inlist *it) {
+eina_inlist_accessor_free(Eina_Accessor_Inlist *it)
+{
free(it);
}
Eina_Inlist *first, *last;
if (func(a, b) < 0)
- a = (last = first = a)->next;
+ a = (last = first = a)->next;
else
- b = (last = first = b)->next;
+ b = (last = first = b)->next;
while (a && b)
- if (func(a, b) < 0)
- a = (last = last->next = a)->next;
- else
- b = (last = last->next = b)->next;
+ if (func(a, b) < 0)
+ a = (last = last->next = a)->next;
+ else
+ b = (last = last->next = b)->next;
last->next = a ? a : b;
/*============================================================================*
-* Global *
-*============================================================================*/
+ * Global *
+ *============================================================================*/
/*============================================================================*
-* API *
-*============================================================================*/
+ * API *
+ *============================================================================*/
EAPI Eina_Inlist *
eina_inlist_append(Eina_Inlist *list, Eina_Inlist *new_l)
}
if (list->last)
- l = list->last;
+ l = list->last;
else
- for (l = list; (l) && (l->next); l = l->next)
- ;
+ for (l = list; (l) && (l->next); l = l->next)
+ ;
l->next = new_l;
new_l->prev = l;
relative->next->prev = new_l;
}
else
- new_l->next = NULL;
+ new_l->next = NULL;
relative->next = new_l;
new_l->prev = relative;
if (!new_l->next)
- list->last = new_l;
+ list->last = new_l;
return list;
}
}
if (item->next)
- item->next->prev = item->prev;
+ item->next->prev = item->prev;
if (item->prev)
{
{
return_l = item->next;
if (return_l)
- return_l->last = list->last;
+ return_l->last = list->last;
}
if (item == list->last)
- list->last = item->prev;
+ list->last = item->prev;
item->next = NULL;
item->prev = NULL;
EINA_SAFETY_ON_NULL_RETURN_VAL(item, list);
if (item == list)
- return list;
+ return list;
if (item->next)
- item->next->prev = item->prev;
+ item->next->prev = item->prev;
item->prev->next = item->next;
if (list->last == item)
- list->last = item->prev;
+ list->last = item->prev;
item->next = list;
item->prev = NULL;
EINA_SAFETY_ON_NULL_RETURN_VAL(item, list);
if (list->last == item)
- return list;
+ return list;
if (!list->last)
{
for (l = list; l->next; l = l->next)
- ;
+ ;
list->last = l;
}
l = list;
if (item->prev)
- item->prev->next = item->next;
+ item->prev->next = item->next;
else
- l = item->next;
+ l = item->next;
item->next->prev = item->prev;
EINA_SAFETY_ON_NULL_RETURN_VAL(item, NULL);
- for (l = list; l; l = l->next) {
+ for (l = list; l; l = l->next)
+ {
if (l == item)
- return item;
+ return item;
}
return NULL;
}
EAPI Eina_Inlist *
eina_inlist_sorted_insert(Eina_Inlist *list,
- Eina_Inlist *item,
- Eina_Compare_Cb func)
+ Eina_Inlist *item,
+ Eina_Compare_Cb func)
{
Eina_Inlist *ct = NULL;
Eina_Inlist_Sorted_State state;
EAPI Eina_Inlist *
eina_inlist_sort(Eina_Inlist *head, Eina_Compare_Cb func)
{
- unsigned int i = 0;
- unsigned int n = 0;
- Eina_Inlist *tail = head;
- Eina_Inlist *unsort = NULL;
- Eina_Inlist *stack[EINA_INLIST_SORT_STACK_SIZE];
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(head, NULL);
- EINA_SAFETY_ON_NULL_RETURN_VAL(func, head);
-
- while (tail)
- {
- unsigned int idx, tmp;
-
- Eina_Inlist *a = tail;
- Eina_Inlist *b = tail->next;
-
- if (!b)
- {
- stack[i++] = a;
- break;
- }
-
- tail = b->next;
-
- if (func(a, b) < 0)
- ((stack[i++] = a)->next = b)->next = 0;
- else
- ((stack[i++] = b)->next = a)->next = 0;
-
- tmp = n++;
- for (idx = n ^ tmp; idx &= idx - 1; i--)
- stack[i - 2] = eina_inlist_sort_merge(stack[i - 2], stack[i - 1], func);
+ unsigned int i = 0;
+ unsigned int n = 0;
+ Eina_Inlist *tail = head;
+ Eina_Inlist *unsort = NULL;
+ Eina_Inlist *stack[EINA_INLIST_SORT_STACK_SIZE];
+
+ EINA_SAFETY_ON_NULL_RETURN_VAL(head, NULL);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(func, head);
+
+ while (tail)
+ {
+ unsigned int idx, tmp;
+
+ Eina_Inlist *a = tail;
+ Eina_Inlist *b = tail->next;
+
+ if (!b)
+ {
+ stack[i++] = a;
+ break;
+ }
+
+ tail = b->next;
+
+ if (func(a, b) < 0)
+ ((stack[i++] = a)->next = b)->next = 0;
+ else
+ ((stack[i++] = b)->next = a)->next = 0;
+
+ tmp = n++;
+ for (idx = n ^ tmp; idx &= idx - 1; i--)
+ stack[i - 2] = eina_inlist_sort_merge(stack[i - 2], stack[i - 1], func);
}
while (i-- > 1)
- stack[i - 1] = eina_inlist_sort_merge(stack[i - 1], stack[i], func);
+ stack[i - 1] = eina_inlist_sort_merge(stack[i - 1], stack[i], func);
head = stack[0];
tail = eina_inlist_sort_rebuild_prev(head);
it->iterator.version = EINA_ITERATOR_VERSION;
it->iterator.next = FUNC_ITERATOR_NEXT(eina_inlist_iterator_next);
it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(
- eina_inlist_iterator_get_container);
+ eina_inlist_iterator_get_container);
it->iterator.free = FUNC_ITERATOR_FREE(eina_inlist_iterator_free);
EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
{
Eina_Accessor_Inlist *ac;
- eina_error_set(0);
+ eina_error_set(0);
ac = calloc(1, sizeof (Eina_Accessor_Inlist));
if (!ac)
{
ac->accessor.version = EINA_ACCESSOR_VERSION;
ac->accessor.get_at = FUNC_ACCESSOR_GET_AT(eina_inlist_accessor_get_at);
ac->accessor.get_container = FUNC_ACCESSOR_GET_CONTAINER(
- eina_inlist_accessor_get_container);
+ eina_inlist_accessor_get_container);
ac->accessor.free = FUNC_ACCESSOR_FREE(eina_inlist_accessor_free);
EINA_MAGIC_SET(&ac->accessor, EINA_MAGIC_ACCESSOR);