ZestCode
 
Loading...
Searching...
No Matches
linkedlist.h
1/*
2 * \file common/linkedlist.h
3 *
4 * Linked list implementation for internal use
5 *
6 * This file defines a linked list implementation that operates on the FreeRTOS
7 * heap, and is able to generically store function pointers and data
8 *
9 * \copyright Copyright (c) 2017-2024, Purdue University ACM SIGBots.
10 *
11 * This Source Code Form is subject to the terms of the Mozilla Public
12 * License, v. 2.0. If a copy of the MPL was not distributed with this
13 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
14 */
15
16#pragma once
17
18typedef void (*generic_fn_t)(void);
19
20typedef struct ll_node_s {
21 union {
22 generic_fn_t func; // Note: a list should not contain both data/funcs
23 void* data;
24 } payload;
25 struct ll_node_s* next;
26} ll_node_s_t;
27
28typedef struct {
29 ll_node_s_t* head;
31
40ll_node_s_t* linked_list_init_func_node(generic_fn_t func);
41
50ll_node_s_t* linked_list_init_data_node(void* data);
51
57linked_list_s_t* linked_list_init();
58
69void linked_list_prepend_func(linked_list_s_t* list, generic_fn_t func);
70
81void linked_list_prepend_data(linked_list_s_t* list, void* data);
82
93void linked_list_append_func(linked_list_s_t* list, generic_fn_t func);
94
103void linked_list_remove_func(linked_list_s_t* list, generic_fn_t func);
104
115void linked_list_append_data(linked_list_s_t* list, void* data);
116
125void linked_list_remove_data(linked_list_s_t* list, void* data);
126
127typedef void (*linked_list_foreach_fn_t)(ll_node_s_t*, void*);
128
142void linked_list_foreach(linked_list_s_t* list, linked_list_foreach_fn_t, void* extra_data);
143
151void linked_list_free(linked_list_s_t* list);
Definition linkedlist.h:28
Definition linkedlist.h:20