solidc
Robust collection of general-purpose cross-platform C libraries and data structures designed for rapid and safe development in C
Loading...
Searching...
No Matches
list.h
Go to the documentation of this file.
1
6#ifndef LIST_H
7#define LIST_H
8
9#include <stddef.h> // for size_t
10#include <stdio.h> // for potential debug/print functions
11
12#if defined(__cplusplus)
13extern "C" {
14#endif
15
20typedef struct list_node {
22 void* data;
24 struct list_node* next;
26 struct list_node* prev;
28
34typedef struct {
40 size_t size;
42 size_t elem_size;
43} list_t;
44
51list_t* list_new(size_t elem_size);
52
58void list_free(list_t* list);
59
65void list_clear(list_t* list);
66
72size_t list_size(const list_t* list);
73
81void list_push_back(list_t* list, void* elem);
82
89void list_pop_back(list_t* list);
90
98void list_push_front(list_t* list, void* elem);
99
107void list_pop_front(list_t* list);
108
117void* list_get(const list_t* list, size_t index);
118
126int list_index_of(const list_t* list, void* elem);
127
137void list_insert(list_t* list, size_t index, void* elem);
138
147void list_remove(list_t* list, void* elem);
148
157void list_insert_after(list_t* list, void* elem, void* after);
158
167void list_insert_before(list_t* list, void* elem, void* before);
168
176#define LIST_FOR_EACH(list, node) for (list_node_t * (node) = (list)->head; (node); (node) = (node)->next)
177
185#define LIST_FOR_EACH_REVERSE(list, node) for (list_node_t * (node) = (list)->tail; (node); (node) = (node)->prev)
186
187#if defined(__cplusplus)
188}
189#endif
190
191#endif /* LIST_H */
void list_pop_back(list_t *list)
Definition list.c:76
void list_insert(list_t *list, size_t index, void *elem)
Definition list.c:134
void list_insert_before(list_t *list, void *elem, void *before)
Definition list.c:187
void list_insert_after(list_t *list, void *elem, void *after)
Definition list.c:181
int list_index_of(const list_t *list, void *elem)
Definition list.c:122
void list_free(list_t *list)
Definition list.c:41
void * list_get(const list_t *list, size_t index)
Definition list.c:115
struct list_node list_node_t
void list_push_front(list_t *list, void *elem)
Definition list.c:88
list_t * list_new(size_t elem_size)
Definition list.c:32
void list_pop_front(list_t *list)
Definition list.c:103
void list_clear(list_t *list)
Definition list.c:47
void list_push_back(list_t *list, void *elem)
Definition list.c:61
void list_remove(list_t *list, void *elem)
Definition list.c:159
size_t list_size(const list_t *list)
Definition list.c:59
struct list_node * next
Definition list.h:24
struct list_node * prev
Definition list.h:26
void * data
Definition list.h:22
Definition list.h:34
size_t elem_size
Definition list.h:42
list_node_t * tail
Definition list.h:38
size_t size
Definition list.h:40
list_node_t * head
Definition list.h:36