Data Structure
struct list_node_t {
struct list_node_t* next;
void* data;
};
typedef struct list_t {
list_node_t* head;
list_node_t* tail;
size_t length;
list_free_cb free_cb;
const allocator_t* allocator;
} list_t;
Initial
list_t* list_new_internal(list_free_cb callback,
const allocator_t* zeroed_allocator) {
list_t* list = (list_t*)zeroed_allocator->alloc(sizeof(list_t));
if (!list) return NULL;
list->free_cb = callback;
list->allocator = zeroed_allocator;
return list;
}
list_t* list_new(list_free_cb callback) {
return list_new_internal(callback, &allocator_calloc);
}
Insert
bool list_insert_after(list_t* list, list_node_t* prev_node, void* data) {
CHECK(list != NULL);
CHECK(prev_node != NULL);
CHECK(data != NULL);
list_node_t* node