girara
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros
datastructures.h
Go to the documentation of this file.
1 /* See LICENSE file for license and copyright information */
2 
3 #ifndef GIRARA_DATASTRUCTURES_H
4 #define GIRARA_DATASTRUCTURES_H
5 
6 #include <stddef.h>
7 #include <stdbool.h>
8 #include <sys/types.h>
9 #include "types.h"
10 
16 girara_list_t* girara_list_new(void);
17 
24 girara_list_t* girara_list_new2(girara_free_function_t gfree);
25 
33 
44 
51 void girara_list_set_free_function(girara_list_t* list,
53 
59 void girara_list_clear(girara_list_t* list);
60 
66 void girara_list_free(girara_list_t* list);
67 
74 void girara_list_append(girara_list_t* list, void* data);
75 
82 void girara_list_prepend(girara_list_t* list, void* data);
83 
90 void girara_list_remove(girara_list_t* list, void* data);
91 
99 void* girara_list_nth(girara_list_t* list, size_t n);
100 
108 bool girara_list_contains(girara_list_t* list, void* data);
109 
116 size_t girara_list_size(girara_list_t* list);
117 
125 ssize_t girara_list_position(girara_list_t* list, void* data);
126 
133 void girara_list_sort(girara_list_t* list, girara_compare_function_t compare);
134 
143 void* girara_list_find(girara_list_t* list, girara_compare_function_t compare,
144  const void* data);
145 
152 girara_list_iterator_t* girara_list_iterator(girara_list_t* list);
153 
160 girara_list_iterator_t* girara_list_iterator_next(girara_list_iterator_t* iter);
161 
168 bool girara_list_iterator_has_next(girara_list_iterator_t* iter);
169 
176 bool girara_list_iterator_is_valid(girara_list_iterator_t* iter);
177 
184 void* girara_list_iterator_data(girara_list_iterator_t* iter);
185 
192 void girara_list_iterator_set(girara_list_iterator_t* iter, void *data);
193 
199 void girara_list_iterator_free(girara_list_iterator_t* iter);
200 
208 void girara_list_foreach(girara_list_t* list, girara_list_callback_t callback,
209  void* data);
210 
211 #define GIRARA_LIST_FOREACH(list, type, iter, data) \
212  do { \
213  girara_list_iterator_t* iter = girara_list_iterator(list); \
214  while (girara_list_iterator_is_valid(iter)) { \
215  type data = girara_list_iterator_data(iter);
216 
217 #define GIRARA_LIST_FOREACH_END(list, type, iter, data) \
218  girara_list_iterator_next(iter); \
219  } \
220  girara_list_iterator_free(iter); \
221  } while(0)
222 
231 girara_list_t* girara_list_merge(girara_list_t* list, girara_list_t* other);
232 
239 girara_tree_node_t* girara_node_new(void* data);
240 
247 void girara_node_set_free_function(girara_tree_node_t* node,
248  girara_free_function_t gfree);
249 
256 void girara_node_free(girara_tree_node_t* node);
257 
264 void girara_node_append(girara_tree_node_t* parent, girara_tree_node_t* child);
265 
273 girara_tree_node_t* girara_node_append_data(girara_tree_node_t* parent,
274  void* data);
275 
282 girara_tree_node_t* girara_node_get_parent(girara_tree_node_t* node);
283 
290 girara_tree_node_t* girara_node_get_root(girara_tree_node_t* node);
291 
298 girara_list_t* girara_node_get_children(girara_tree_node_t* node);
299 
306 size_t girara_node_get_num_children(girara_tree_node_t* node);
307 
314 void* girara_node_get_data(girara_tree_node_t* node);
315 
322 void girara_node_set_data(girara_tree_node_t* node, void* data);
323 
324 #endif