embedded-software
reusable software modules for embedded systems
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
list.h
Go to the documentation of this file.
1 
9 #ifndef _LIST_H_
10 #define _LIST_H_
11 
12 #include <stdint.h>
13 #include "project_settings.h"
14 
15 #include "library.h"
16 
17 #ifdef USE_MODULE_SUBSYS
18 #include "subsys.h"
19 #endif
20 
28 typedef uint8_t(*list_sort_fn_t)(void*, void*);
29 
30 typedef uint8_t(*list_identify_fn_t)(void*, void*);
31 
32 typedef struct list_link_t {
33  void* item_ptr;
34  struct list_link_t* next;
36 } list_link_t;
37 
51 typedef struct list_t {
54  uint16_t length;
55  uint16_t array_length;
57  uint16_t* item_array;
58  uint16_t item_size;
61  // the following overhead members are only needed
62  // to make the list module faster
63 
66  uint16_t unlinked_count;
67  //list_link_t * unused[2]; ///< unused Commented because feature not fully implemented
68 } list_t;
69 
70 #define LIST_ALLOCATE(t, list_name, max_elements)\
71  t CAT2(list_name, _array)[max_elements];\
72  list_link_t CAT2(list_name, _links)[max_elements];\
73  list_t list_name
74 
75 #define LIST_INIT(list_name, max_elements, item_size)\
76  List_Init(&list_name, item_size, &CAT2(list_name, _array)[0], max_elements, &CAT2(list_name, _links)[0])
77 
78 
79 void List_Init(list_t* list, uint16_t item_size, void* item_array, uint16_t item_array_length, list_link_t* link_array);
80 
102 void List_SetSortFunction(list_t* list, uint8_t(*sort_fn)(void* a, void* b));
103 
111 void List_SetIdentifyFunction(list_t* list, uint8_t(*identify_fn)(void* identifier, void* item));
112 
120 void* List_AddAndLink(list_t* list, void* item);
121 
130 void* List_Add(list_t* list, void* item);
131 
142 void* List_AddIndirect(list_t* list);
143 
161 void List_Link(list_t* list);
162 
170 void List_ResortFirst(list_t* list);
171 
178 void List_ResortLast(list_t* list);
179 
188 void List_LinkItem(list_t* list, void* item);
189 
199 void* List_GetFirst(list_t* list);
200 
210 void* List_GetLast(list_t* list);
211 
222 void* List_GetNext(list_t* list, void* item);
223 
234 void* List_GetItem(list_t* list, void* identifier);
235 
243 void List_RemoveFirst(list_t* list);
244 
252 void List_RemoveLast(list_t* list);
253 
260 void List_Remove(list_t* list, void* item);
261 
269 void List_RemoveAll(list_t* list);
270 
277 void List_UnlinkItem(list_t* list, void* item);
278 
288 void List_UnlinkFirst(list_t* list);
289 
299 void List_UnlinkLast(list_t* list);
300 
301 void List_RunFunction(list_t* list, void(*function)(void *) );
302 
304 
305 #endif //_LIST_H_
void List_LinkItem(list_t *list, void *item)
Definition: list.c:173
void * List_GetNext(list_t *list, void *item)
Get the Next Item in the List.
Definition: list.c:226
Definition: list.h:51
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:81
list_link_t * first
first
Definition: list.h:52
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:94
list_link_t * links
links
Definition: list.h:56
void List_SetSortFunction(list_t *list, uint8_t(*sort_fn)(void *a, void *b))
list_link_t * unlinked[2]
unlinked
Definition: list.h:65
list_link_t * working[2]
working
Definition: list.h:64
uint16_t item_size
item_size
Definition: list.h:58
uint16_t unlinked_count
count of unlinked list items
Definition: list.h:66
void List_Link(list_t *list)
Definition: list.c:117
uint8_t(* list_sort_fn_t)(void *, void *)
Definition: list.h:28
struct list_link_t list_link_t
void * List_GetLast(list_t *list)
Get the Last Item in the List.
Definition: list.c:221
void List_SetIdentifyFunction(list_t *list, uint8_t(*identify_fn)(void *identifier, void *item))
list_link_t * last
last
Definition: list.h:53
void * List_GetFirst(list_t *list)
Definition: list.c:216
void List_ResortFirst(list_t *list)
Definition: list.c:149
list_sort_fn_t sort_fn
sort_fn
Definition: list.h:59
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:27
void List_UnlinkItem(list_t *list, void *item)
Definition: list.c:316
uint8_t(* list_identify_fn_t)(void *, void *)
Definition: list.h:30
uint16_t * item_array
item_array
Definition: list.h:57
uint16_t array_length
array_length
Definition: list.h:55
list_identify_fn_t identify_fn
identify_fn
Definition: list.h:60
void List_Remove(list_t *list, void *item)
Definition: list.c:289
void List_RemoveFirst(list_t *list)
Definition: list.c:275
void List_RunFunction(list_t *list, void(*function)(void *))
Definition: list.c:441
void * List_GetItem(list_t *list, void *identifier)
Definition: list.c:236
void List_ResortLast(list_t *list)
Definition: list.c:161
void List_RemoveAll(list_t *list)
Definition: list.c:298
void List_UnlinkFirst(list_t *list)
Definition: list.c:324
uint16_t length
length
Definition: list.h:54
void * List_AddAndLink(list_t *list, void *item)
Definition: list.c:65
void List_UnlinkLast(list_t *list)
Definition: list.c:332
void List_RemoveLast(list_t *list)
Definition: list.c:282
struct list_t list_t