embeddedlibrary
reusable software modules for embedded systems
list.h
1 
9 #ifndef _LIST_H_
10 #define _LIST_H_
11 
12 #include <stdint.h>
13 
22 typedef uint8_t(*sort_fn_t)(void*, void*);
23 
27 typedef uint8_t(*identify_fn_t)(void*, void*);
28 
32 typedef struct list_link_t {
33  void* item_ptr;
34  struct list_link_t* next;
36 } list_link_t;
37 
53 typedef struct list_t {
56  uint16_t length;
57  uint16_t array_length;
59  uint16_t* item_array;
60  uint16_t item_size;
63  // the following overhead members are only needed
64  // to make the list module faster
68 } list_t;
69 
80 // not interrupt safe
81 void List_Init(list_t* list, uint16_t item_size, void* item_array, uint16_t item_array_length, list_link_t* link_array);
82 
102 void List_SetSortFunction(list_t* list, uint8_t(*sort_fn)(void* a, void* b));
103 
112 void List_SetIdentifyFunction(list_t* list, uint8_t(*identify_fn)(void* identifier, void* item));
113 
122 // not interrupt safe
123 void* List_AddAndLink(list_t* list, void* item);
124 
134 void* List_Add(list_t* list, void* item);
135 
146 void* List_AddIndirect(list_t* list);
147 
166 // not interrupt safe
167 void List_Link(list_t* list);
168 
175 // not interrupt safe
176 void List_ResortFirst(list_t* list);
177 
184 // not interrupt safe
185 void List_ResortLast(list_t* list);
186 
194 // not interrupt safe
195 void List_LinkItem(list_t* list, void* item);
196 
207 void* List_GetFirst(list_t* list);
208 
219 void* List_GetLast(list_t* list);
220 
232 void* List_GetNext(list_t* list, void* item);
233 
245 void* List_GetItem(list_t* list, void* identifier);
246 
255 void List_RemoveFirst(list_t* list);
256 
263 void List_RemoveLast(list_t* list);
264 
272 void List_Remove(list_t* list, void* item);
273 
280 void List_RemoveAll(list_t* list);
281 
289 void List_UnlinkItem(list_t* list, void* item);
290 
301 void List_UnlinkFirst(list_t* list);
302 
313 void List_UnlinkLast(list_t* list);
314 
316 
317 #endif //_LIST_H_
void List_LinkItem(list_t *list, void *item)
Definition: list.c:160
void * List_GetNext(list_t *list, void *item)
Get the Next Item in the List.
Definition: list.c:203
Definition: list.h:53
void * List_Add(list_t *list, void *item)
List_Add is used to add an item to a list. Uses List_AddIndirect to find where the item should go in ...
Definition: list.c:82
list_link_t * first
first
Definition: list.h:54
void * List_AddIndirect(list_t *list)
List_AddIndirect is used to obtain a valid position for which an item can be saved to...
Definition: list.c:95
list_link_t * links
links
Definition: list.h:58
void List_SetSortFunction(list_t *list, uint8_t(*sort_fn)(void *a, void *b))
Definition: list.c:57
list_link_t * unlinked[2]
unlinked
Definition: list.h:66
list_link_t * working[2]
working
Definition: list.h:65
uint16_t item_size
item_size
Definition: list.h:60
void List_Link(list_t *list)
Definition: list.c:116
struct list_link_t list_link_t
void * List_GetLast(list_t *list)
Get the Last Item in the List.
Definition: list.c:199
void List_SetIdentifyFunction(list_t *list, uint8_t(*identify_fn)(void *identifier, void *item))
Definition: list.c:61
uint8_t(* identify_fn_t)(void *, void *)
Definition: list.h:27
list_link_t * last
last
Definition: list.h:55
sort_fn_t sort_fn
sort_fn
Definition: list.h:61
void * List_GetFirst(list_t *list)
Definition: list.c:195
void List_ResortFirst(list_t *list)
Definition: list.c:136
void List_Init(list_t *list, uint16_t item_size, void *item_array, uint16_t item_array_length, list_link_t *link_array)
Definition: list.c:28
void List_UnlinkItem(list_t *list, void *item)
Definition: list.c:282
uint8_t(* sort_fn_t)(void *, void *)
Definition: list.h:22
uint16_t * item_array
item_array
Definition: list.h:59
uint16_t array_length
array_length
Definition: list.h:57
void List_Remove(list_t *list, void *item)
Definition: list.c:255
void List_RemoveFirst(list_t *list)
Definition: list.c:241
void * List_GetItem(list_t *list, void *identifier)
Definition: list.c:213
void List_ResortLast(list_t *list)
Definition: list.c:148
void List_RemoveAll(list_t *list)
Definition: list.c:264
void List_UnlinkFirst(list_t *list)
Definition: list.c:290
identify_fn_t identify_fn
identify_fn
Definition: list.h:62
uint16_t length
length
Definition: list.h:56
void * List_AddAndLink(list_t *list, void *item)
Definition: list.c:66
void List_UnlinkLast(list_t *list)
Definition: list.c:298
void List_RemoveLast(list_t *list)
Definition: list.c:248
struct list_t list_t
list_link_t * unused[2]
unused
Definition: list.h:67