1#include "../include/list.h"
8#define ALIGNMENT_MASK (ALIGNMENT - 1)
11static inline size_t aligned_size(
size_t n) {
return (n + ALIGNMENT_MASK) & ~(ALIGNMENT_MASK); }
14static list_node_t* list_node_new(
size_t elem_size,
void* data) {
15 size_t total_size =
sizeof(
list_node_t) + aligned_size(elem_size);
17 if (!node)
return NULL;
21 node->
data = (
void*)(node + 1);
22 memcpy(node->
data, data, elem_size);
34 if (!list)
return NULL;
77 if (!list || !list->
tail)
return;
104 if (!list || !list->
head)
return;
116 if (!list || index >= list->
size)
return NULL;
118 for (
size_t i = 0; i < index; i++) cur = cur->
next;
119 return cur ? cur->
data : NULL;
123 if (!list)
return -1;
127 if (memcmp(cur->
data, elem, list->
elem_size) == 0)
return idx;
135 if (!list || index > list->
size)
return;
140 if (index == list->
size) {
146 for (
size_t i = 0; i < index; i++) cur = cur->
next;
155 if (cur == list->
head) list->
head = node;
162 if (idx == -1)
return;
165 for (
int i = 0; i < idx; i++) cur = cur->
next;
183 if (idx == -1)
return;
189 if (idx == -1)
return;
void list_pop_back(list_t *list)
void list_insert(list_t *list, size_t index, void *elem)
void list_insert_before(list_t *list, void *elem, void *before)
void list_insert_after(list_t *list, void *elem, void *after)
int list_index_of(const list_t *list, void *elem)
void list_free(list_t *list)
void * list_get(const list_t *list, size_t index)
struct list_node list_node_t
void list_push_front(list_t *list, void *elem)
list_t * list_new(size_t elem_size)
void list_pop_front(list_t *list)
void list_clear(list_t *list)
void list_push_back(list_t *list, void *elem)
void list_remove(list_t *list, void *elem)
size_t list_size(const list_t *list)