32    assert(compare != NULL);
 
 
   51    assert(compare != NULL);
 
   53    memset(list, 0, 
sizeof(
List));
 
 
   93        _list_item_free(list, item);
 
 
  100    assert(list != NULL);
 
 
  107_list_item_new(
Pool *pool, 
void *data)
 
  135    assert(list != NULL);
 
  136    assert(list->
count != SIZE_MAX);
 
  140    if(list->
count < SIZE_MAX)
 
  142        item = _list_item_new(list->
pool, data);
 
 
  165    assert(list != NULL);
 
  166    assert(list->
count != SIZE_MAX);
 
  170    if(list->
count < SIZE_MAX)
 
  172        item = _list_item_new(list->
pool, data);
 
 
  194_list_prepend_new_sorted(
List *list, 
void *data)
 
  196    assert(list != NULL);
 
  198    assert(list->
count != SIZE_MAX);
 
  202    bool inserted = 
false;
 
  204    while(*ptr && !inserted)
 
  206        if(list->
compare((*ptr)->data, data) >= 0)
 
  211            item->
prev = (*ptr)->prev;
 
  218            ptr = &(*ptr)->
prev->next;
 
  230    assert(list != NULL);
 
  232    assert(list->
count != SIZE_MAX);
 
  236    if(list->
count < SIZE_MAX)
 
  246                item = _list_prepend_new_sorted(list, data);
 
  251            item = _list_item_new(list->
pool, data);
 
 
  265    assert(list != NULL);
 
  266    assert(item != NULL);
 
  273        offset = &item->
prev->next;
 
  278        next = &item->
next->prev;
 
  281    *offset = item->
next;
 
  287    assert(list != NULL);
 
  288    assert(list->
head != NULL);
 
  289    assert(item != NULL);
 
  291    _list_detach(list, item);
 
  292    _list_item_free(list, item);
 
 
  300    assert(list != NULL);
 
  304    bool completed = 
false;
 
  306    while(iter && !completed)
 
  312            completed = !remove_all;
 
 
  324    assert(list != NULL);
 
 
  360_list_find(
const List *list, 
ListItem *offset, 
void const *data)
 
  362    assert(list != NULL);
 
  395    assert(list != NULL);
 
  398    return _list_find(list, NULL, data) != NULL;
 
 
  404    assert(list != NULL);
 
 
  416    assert(list != NULL);
 
  418    return _list_find(list, offset, data);
 
 
  424    assert(list != NULL);
 
 
  432    assert(list != NULL);
 
 
  440    assert(list != NULL);
 
 
  448    assert(list != NULL);
 
  450    return list->
head == NULL;
 
 
  456    assert(list != NULL);
 
  457    assert(item != NULL);
 
 
int32_t(* CompareFunc)(const void *a, const void *b)
void(* FreeFunc)(void *p)
List * list_new(CompareFunc compare, FreeFunc free, Pool *pool)
bool list_empty(const List *list)
void list_init(List *list, CompareFunc compare, FreeFunc free, Pool *pool)
ListItem * list_find(const List *list, ListItem *offset, void const *data)
ListItem * list_prepend(List *list, void *data)
ListItem * list_tail(const List *list)
ListItem * list_insert_sorted(List *list, void *data)
void list_remove_by_data(List *list, void *data, bool remove_all)
void list_remove(List *list, ListItem *item)
void list_clear(List *list)
size_t list_count(const List *list)
void list_item_free_data(const List *list, ListItem *item)
ListItem * list_append(List *list, void *data)
void list_free(List *list)
void list_destroy(List *list)
void * list_pop(List *list)
bool list_contains(const List *list, const void *data)
ListItem * list_head(const List *list)
Structure holding a list item.
Allocate groups of equal-sized chunks of memory.
void(* free)(struct _Pool *pool, void *ptr)
void *(* alloc)(struct _Pool *pool)