1#include "../include/slist.h"
9#define ALIGNMENT_MASK (ALIGNMENT - 1)
12static inline size_t aligned_size(
size_t n) {
return (n + ALIGNMENT_MASK) & ~(ALIGNMENT_MASK); }
16 if (!list)
return NULL;
47 size_t total_size =
sizeof(
slist_node_t) + aligned_size(elem_size);
49 if (!node)
return NULL;
52 node->
data = (
void*)(node + 1);
53 memcpy(node->
data, data, elem_size);
87 if (!list || !list->
head)
return;
96 if (!list || index > list->
size)
return;
102 if (index == list->
size) {
108 for (
size_t i = 0; i < index - 1; i++) {
109 current = current->
next;
116 current->
next = node;
121 if (!list || index >= list->
size)
return;
129 for (
size_t i = 0; i < index - 1; i++) {
130 current = current->
next;
135 if (temp == list->
tail) list->
tail = current;
141 if (!list || index >= list->
size)
return NULL;
144 for (
size_t i = 0; i < index; i++) {
145 current = current->
next;
147 return current->
data;
151 if (!list)
return -1;
156 if (memcmp(current->
data, elem, list->
elem_size) == 0)
return index;
157 current = current->
next;
165 if (idx >= 0 && (
size_t)idx < list->size)
slist_insert(list, (
size_t)idx + 1, elem);
170 if (idx > 0 && (
size_t)idx < list->size)
#define SLIST_FOR_EACH(list, node)
void slist_print_asint(const slist *list)
void slist_insert(slist *list, size_t index, void *elem)
void slist_insert_before(slist *list, void *elem, void *before)
void slist_clear(slist *list)
void slist_pop_front(slist *list)
void slist_node_free(slist_node_t *node)
size_t slist_size(const slist *list)
void slist_push_back(slist *list, void *elem)
struct slist_node slist_node_t
void slist_remove(slist *list, size_t index)
void slist_push_front(slist *list, void *elem)
void * slist_get(const slist *list, size_t index)
slist_node_t * slist_node_new(size_t elem_size, void *data)
slist * slist_new(size_t elem_size)
void slist_print_aschar(const slist *list)
void slist_insert_after(slist *list, void *elem, void *after)
void slist_free(slist *list)
int slist_index_of(const slist *list, void *elem)