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_copy(girara_list_iterator_t* iter);
161 
168 girara_list_iterator_t* girara_list_iterator_next(girara_list_iterator_t* iter);
169 
176 bool girara_list_iterator_has_next(girara_list_iterator_t* iter);
177 
184 girara_list_iterator_t* girara_list_iterator_previous(girara_list_iterator_t* iter);
185 
192 bool girara_list_iterator_has_previous(girara_list_iterator_t* iter);
193 
200 void girara_list_iterator_remove(girara_list_iterator_t* iter);
201 
202 
209 bool girara_list_iterator_is_valid(girara_list_iterator_t* iter);
210 
217 void* girara_list_iterator_data(girara_list_iterator_t* iter);
218 
225 void girara_list_iterator_set(girara_list_iterator_t* iter, void *data);
226 
232 void girara_list_iterator_free(girara_list_iterator_t* iter);
233 
241 void girara_list_foreach(girara_list_t* list, girara_list_callback_t callback,
242  void* data);
243 
244 #define GIRARA_LIST_FOREACH(list, type, iter, data) \
245  do { \
246  girara_list_iterator_t* iter = girara_list_iterator(list); \
247  while (girara_list_iterator_is_valid(iter)) { \
248  type data = (type)girara_list_iterator_data(iter);
249 
250 #define GIRARA_LIST_FOREACH_END(list, type, iter, data) \
251  girara_list_iterator_next(iter); \
252  } \
253  girara_list_iterator_free(iter); \
254  } while(0)
255 
264 girara_list_t* girara_list_merge(girara_list_t* list, girara_list_t* other);
265 
272 girara_tree_node_t* girara_node_new(void* data);
273 
280 void girara_node_set_free_function(girara_tree_node_t* node,
281  girara_free_function_t gfree);
282 
289 void girara_node_free(girara_tree_node_t* node);
290 
297 void girara_node_append(girara_tree_node_t* parent, girara_tree_node_t* child);
298 
306 girara_tree_node_t* girara_node_append_data(girara_tree_node_t* parent,
307  void* data);
308 
315 girara_tree_node_t* girara_node_get_parent(girara_tree_node_t* node);
316 
323 girara_tree_node_t* girara_node_get_root(girara_tree_node_t* node);
324 
331 girara_list_t* girara_node_get_children(girara_tree_node_t* node);
332 
339 size_t girara_node_get_num_children(girara_tree_node_t* node);
340 
347 void* girara_node_get_data(girara_tree_node_t* node);
348 
355 void girara_node_set_data(girara_tree_node_t* node, void* data);
356 
357 #endif