Embedded SDK
Embedded SDK
Loading...
Searching...
No Matches
lists.h
Go to the documentation of this file.
1
9#pragma once
10
11#include <stdlib.h>
12#include <stdbool.h>
13
27
43
56typedef void (*f_list_node_del)(flist_node_t *node);
57
72typedef bool (*f_list_node_cmp)(const flist_node_t *a, const flist_node_t *b);
73
86typedef bool (*f_list_node_pred)(const flist_node_t *node);
87
102typedef bool (*f_list_node_bin_pred)(const flist_node_t *a, const flist_node_t *b);
103
104// ============================================================================
105// Forward list (singly-linked) functions
106// ============================================================================
107
115bool flist_push_front(flist_node_t **list, flist_node_t *node);
116
124bool flist_pop_front(flist_node_t **list, f_list_node_del del_func);
125
133bool flist_push_back(flist_node_t **list, flist_node_t *node);
134
142bool flist_pop_back(flist_node_t **list, f_list_node_del del_func);
143
153
162bool flist_remove(flist_node_t **list, flist_node_t *node, f_list_node_del del_func);
163
172size_t flist_remove_if(flist_node_t **list, f_list_node_pred pred_func, f_list_node_del del_func);
173
181bool flist_clear(flist_node_t **list, f_list_node_del del_func);
182
189size_t flist_size(flist_node_t *const *list);
190
197bool flist_empty(flist_node_t *const *list);
198
206bool flist_sort(flist_node_t **list, f_list_node_cmp cmp_func);
207
217size_t flist_unique(flist_node_t **list, f_list_node_bin_pred pred_func, f_list_node_del del_func);
218
225bool flist_reverse(flist_node_t **list);
226
227// ============================================================================
228// Doubly-linked list functions
229// ============================================================================
230
238bool list_push_front(list_node_t **list, list_node_t *node);
239
247bool list_pop_front(list_node_t **list, f_list_node_del del_func);
248
256bool list_push_back(list_node_t **list, list_node_t *node);
257
265bool list_pop_back(list_node_t **list, f_list_node_del del_func);
266
276bool list_insert_before(list_node_t **list, list_node_t *ref, list_node_t *node);
277
286bool list_insert_after(list_node_t **list, list_node_t *ref, list_node_t *node);
287
296bool list_remove(list_node_t **list, list_node_t *node, f_list_node_del del_func);
297
306size_t list_remove_if(list_node_t **list, f_list_node_pred pred_func, f_list_node_del del_func);
307
315bool list_clear(list_node_t **list, f_list_node_del del_func);
316
323size_t list_size(list_node_t *const *list);
324
331bool list_empty(list_node_t *const *list);
332
340bool list_sort(list_node_t **list, f_list_node_cmp cmp_func);
341
351size_t list_unique(list_node_t **list, f_list_node_bin_pred pred_func, f_list_node_del del_func);
352
359bool list_reverse(list_node_t **list);
bool list_push_back(list_node_t **list, list_node_t *node)
Add a node at the end of the doubly-linked list.
Definition lists.c:358
bool(* f_list_node_cmp)(const flist_node_t *a, const flist_node_t *b)
Callback function to compare two nodes for sorting.
Definition lists.h:72
bool flist_sort(flist_node_t **list, f_list_node_cmp cmp_func)
Sort the forward list using a comparison function.
Definition lists.c:329
bool flist_reverse(flist_node_t **list)
Reverse the order of nodes in the forward list.
Definition lists.c:339
bool list_remove(list_node_t **list, list_node_t *node, f_list_node_del del_func)
Remove and delete a specific node from the doubly-linked list.
Definition lists.c:388
size_t flist_remove_if(flist_node_t **list, f_list_node_pred pred_func, f_list_node_del del_func)
Remove all nodes matching a predicate from the forward list.
Definition lists.c:287
bool flist_push_back(flist_node_t **list, flist_node_t *node)
Add a node at the end of the forward list.
Definition lists.c:249
bool flist_pop_front(flist_node_t **list, f_list_node_del del_func)
Remove and delete the first node from the forward list.
Definition lists.c:244
size_t flist_size(flist_node_t *const *list)
Get the number of nodes in the forward list.
Definition lists.c:312
bool list_clear(list_node_t **list, f_list_node_del del_func)
Remove and delete all nodes from the doubly-linked list.
Definition lists.c:398
bool list_sort(list_node_t **list, f_list_node_cmp cmp_func)
Sort the doubly-linked list using a comparison function.
Definition lists.c:413
bool list_pop_front(list_node_t **list, f_list_node_del del_func)
Remove and delete the first node from the doubly-linked list.
Definition lists.c:353
bool list_pop_back(list_node_t **list, f_list_node_del del_func)
Remove and delete the last node from the doubly-linked list.
Definition lists.c:363
bool list_empty(list_node_t *const *list)
Check if the doubly-linked list is empty.
Definition lists.c:408
bool flist_insert_after(flist_node_t **list, flist_node_t *ref, flist_node_t *node)
Insert a node after a reference node in the forward list.
Definition lists.c:276
bool flist_remove(flist_node_t **list, flist_node_t *node, f_list_node_del del_func)
Remove and delete a specific node from the forward list.
Definition lists.c:282
size_t list_size(list_node_t *const *list)
Get the number of nodes in the doubly-linked list.
Definition lists.c:403
bool list_insert_before(list_node_t **list, list_node_t *ref, list_node_t *node)
Insert a node before a reference node in the doubly-linked list.
Definition lists.c:368
size_t flist_unique(flist_node_t **list, f_list_node_bin_pred pred_func, f_list_node_del del_func)
Remove consecutive duplicate nodes from the forward list.
Definition lists.c:334
bool flist_empty(flist_node_t *const *list)
Check if the forward list is empty.
Definition lists.c:324
bool list_reverse(list_node_t **list)
Reverse the order of nodes in the doubly-linked list.
Definition lists.c:423
size_t list_unique(list_node_t **list, f_list_node_bin_pred pred_func, f_list_node_del del_func)
Remove consecutive duplicate nodes from the doubly-linked list.
Definition lists.c:418
bool list_push_front(list_node_t **list, list_node_t *node)
Add a node at the beginning of the doubly-linked list.
Definition lists.c:348
bool flist_push_front(flist_node_t **list, flist_node_t *node)
Add a node at the beginning of the forward list.
Definition lists.c:239
size_t list_remove_if(list_node_t **list, f_list_node_pred pred_func, f_list_node_del del_func)
Remove all nodes matching a predicate from the doubly-linked list.
Definition lists.c:393
bool flist_clear(flist_node_t **list, f_list_node_del del_func)
Remove and delete all nodes from the forward list.
Definition lists.c:292
bool(* f_list_node_bin_pred)(const flist_node_t *a, const flist_node_t *b)
Callback function to test two nodes for equality (binary predicate)
Definition lists.h:102
void(* f_list_node_del)(flist_node_t *node)
Callback function to delete/free a node.
Definition lists.h:56
bool flist_pop_back(flist_node_t **list, f_list_node_del del_func)
Remove and delete the last node from the forward list.
Definition lists.c:254
bool(* f_list_node_pred)(const flist_node_t *node)
Callback function to test a single node (unary predicate)
Definition lists.h:86
bool list_insert_after(list_node_t **list, list_node_t *ref, list_node_t *node)
Insert a node after a reference node in the doubly-linked list.
Definition lists.c:382
Forward list node structure (singly-linked)
Definition lists.h:24
struct flist_node_t * next
Definition lists.h:25
Doubly-linked list node structure.
Definition lists.h:39
flist_node_t _list
Definition lists.h:40
struct list_node_t * prev
Definition lists.h:41