AKOS  v1.0.0
Documentation
Loading...
Searching...
No Matches
list.h
Go to the documentation of this file.
1/****************************************************************************/
12
13#ifndef LIST_H
14#define LIST_H
15
16#ifdef __cplusplus
17extern "C"
18{
19#endif
20
21#include <stdint.h>
22#include "core.h"
23
25 typedef struct list list_t;
27 typedef struct list_item list_item_t;
28
33 struct list_item
34 {
37 uint32_t value;
38 void *owner_ptr;
39 struct list *list_ptr;
40 };
41
46 struct list
47 {
50 uint16_t num_of_items;
51 };
52
53#define list_item_set_owner(p_list_item, p_owner) ((p_list_item)->owner_ptr = (void *)(p_owner))
54#define list_item_get_owner(p_list_item) ((p_list_item)->owner_ptr)
55#define list_item_set_value(p_list_item, val) ((p_list_item)->value = (uint32_t)(val))
56#define list_item_get_value(p_list_item) ((p_list_item)->value)
57#define list_item_get_list_contain(p_list_item) ((p_list_item)->list_ptr)
58
59#define list_get_head_item_value(p_list) ((((p_list)->end_item).next_ptr)->value)
60#define list_get_head_item(p_list) (((p_list)->end_item).next_ptr)
61#define list_get_owner_of_head_item(p_list) (list_item_get_owner(((p_list)->end_item).next_ptr))
62#define list_get_end_item(p_list) ((p_list)->end_item)
63#define list_get_num_item(p_list) (((p_list)->num_of_items))
64#define list_is_empty(p_list) (((p_list)->num_of_items == (uint8_t)0) ? OS_TRUE : OS_FALSE)
65
71 void *akos_list_get_owner_of_next_item(list_t *const p_list);
72
77 void akos_list_init(list_t *const p_list);
78
83 void akos_list_item_init(list_item_t *const p_list_item);
84
90 list_item_t *akos_list_item_get_next(list_item_t *p_list_item);
91
97 list_item_t *akos_list_item_get_prev(list_item_t *p_list_item);
98
104 void akos_list_insert_end(list_t *const p_list, list_item_t *const p_list_item);
105
111 void akos_list_insert(list_t *const p_list, list_item_t *const p_list_item);
112
118 uint16_t akos_list_remove(list_item_t *const p_list_item);
119
120#ifdef __cplusplus
121}
122#endif
123#endif /* LIST_H */
Kernel control and critical-section API.
void akos_list_item_init(list_item_t *const p_list_item)
Initialize list item linkage and ownership metadata.
Definition list.c:35
void akos_list_init(list_t *const p_list)
Initialize list metadata and sentinel.
Definition list.c:20
void * akos_list_get_owner_of_next_item(list_t *const p_list)
Get owner of next item and advance list cursor.
Definition list.c:169
void akos_list_insert(list_t *const p_list, list_item_t *const p_list_item)
Insert item in ascending order by list_item::value.
Definition list.c:104
void akos_list_insert_end(list_t *const p_list, list_item_t *const p_list_item)
Insert item at list tail.
Definition list.c:45
list_item_t * akos_list_item_get_prev(list_item_t *p_list_item)
Get previous list item.
Definition list.c:91
uint16_t akos_list_remove(list_item_t *const p_list_item)
Remove item from containing list.
Definition list.c:141
list_item_t * akos_list_item_get_next(list_item_t *p_list_item)
Get next list item.
Definition list.c:79
Doubly-linked list node used by scheduler/timer lists.
Definition list.h:34
struct list_item * next_ptr
Definition list.h:35
struct list_item * prev_ptr
Definition list.h:36
struct list * list_ptr
Definition list.h:39
void * owner_ptr
Definition list.h:38
uint32_t value
Definition list.h:37
Doubly-linked list metadata with end sentinel.
Definition list.h:47
uint16_t num_of_items
Definition list.h:50
struct list_item * curr_item_ptr
Definition list.h:48
struct list_item end_item
Definition list.h:49