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:356
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:327
bool flist_reverse(flist_node_t **list)
Reverse the order of nodes in the forward list.
Definition lists.c:337
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:386
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:285
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:247
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:242
size_t flist_size(flist_node_t *const *list)
Get the number of nodes in the forward list.
Definition lists.c:310
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:396
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:411
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:351
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:361
bool list_empty(list_node_t *const *list)
Check if the doubly-linked list is empty.
Definition lists.c:406
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:274
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:280
size_t list_size(list_node_t *const *list)
Get the number of nodes in the doubly-linked list.
Definition lists.c:401
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:366
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:332
bool flist_empty(flist_node_t *const *list)
Check if the forward list is empty.
Definition lists.c:322
bool list_reverse(list_node_t **list)
Reverse the order of nodes in the doubly-linked list.
Definition lists.c:421
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:416
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:346
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:237
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:391
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:290
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:252
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:380
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