girara
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 
17 
25 
33 
44 
53 
60 
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 
134 
144  const void* data);
145 
153 
161 
169 
177 
185 
193 
201 
202 
210 
218 
225 void girara_list_iterator_set(girara_list_iterator_t* iter, void *data);
226 
233 
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 
256 #define GIRARA_LIST_FOREACH_BODY_WITH_ITER(list, type, iter, data, ...) \
257  GIRARA_LIST_FOREACH(list, type, iter, data) \
258  __VA_ARGS__ \
259  GIRARA_LIST_FOREACH_END(list, type, iter, data)
260 
261 #define GIRARA_LIST_FOREACH_BODY(list, type, data, ...) \
262  GIRARA_LIST_FOREACH(list, type, girara_list_foreach_iterator, data) \
263  __VA_ARGS__ \
264  GIRARA_LIST_FOREACH_END(list, type, girara_list_foreach_iterator, data)
265 
275 
283 
291  girara_free_function_t gfree);
292 
300 
308 
317  void* data);
318 
326 
334 
342 
350 
358 
365 void girara_node_set_data(girara_tree_node_t* node, void* data);
366 
367 #endif
girara_tree_node_t * girara_node_new(void *data)
bool girara_list_iterator_is_valid(girara_list_iterator_t *iter)
void girara_list_clear(girara_list_t *list)
void girara_list_iterator_free(girara_list_iterator_t *iter)
void girara_list_set_free_function(girara_list_t *list, girara_free_function_t gfree)
struct girara_tree_node_s girara_tree_node_t
Definition: types.h:9
girara_list_iterator_t * girara_list_iterator(girara_list_t *list)
void girara_node_append(girara_tree_node_t *parent, girara_tree_node_t *child)
girara_list_iterator_t * girara_list_iterator_next(girara_list_iterator_t *iter)
girara_list_t * girara_list_merge(girara_list_t *list, girara_list_t *other)
girara_list_iterator_t * girara_list_iterator_copy(girara_list_iterator_t *iter)
girara_tree_node_t * girara_node_get_parent(girara_tree_node_t *node)
girara_list_t * girara_sorted_list_new(girara_compare_function_t cmp)
bool girara_list_contains(girara_list_t *list, void *data)
void * girara_list_nth(girara_list_t *list, size_t n)
void girara_list_sort(girara_list_t *list, girara_compare_function_t compare)
void girara_node_free(girara_tree_node_t *node)
void girara_list_foreach(girara_list_t *list, girara_list_callback_t callback, void *data)
girara_list_t * girara_node_get_children(girara_tree_node_t *node)
bool girara_list_iterator_has_next(girara_list_iterator_t *iter)
void(* girara_list_callback_t)(void *data, void *userdata)
Definition: types.h:126
void girara_list_prepend(girara_list_t *list, void *data)
void girara_list_remove(girara_list_t *list, void *data)
void girara_list_iterator_remove(girara_list_iterator_t *iter)
struct girara_list_iterator_s girara_list_iterator_t
Definition: types.h:11
girara_tree_node_t * girara_node_append_data(girara_tree_node_t *parent, void *data)
girara_tree_node_t * girara_node_get_root(girara_tree_node_t *node)
void * girara_list_iterator_data(girara_list_iterator_t *iter)
girara_list_iterator_t * girara_list_iterator_previous(girara_list_iterator_t *iter)
girara_list_t * girara_list_new2(girara_free_function_t gfree)
int(* girara_compare_function_t)(const void *data1, const void *data2)
Definition: types.h:134
bool girara_list_iterator_has_previous(girara_list_iterator_t *iter)
girara_list_t * girara_list_new(void)
void girara_list_append(girara_list_t *list, void *data)
void girara_list_iterator_set(girara_list_iterator_t *iter, void *data)
size_t girara_list_size(girara_list_t *list)
void girara_node_set_data(girara_tree_node_t *node, void *data)
girara_list_t * girara_sorted_list_new2(girara_compare_function_t cmp, girara_free_function_t gfree)
size_t girara_node_get_num_children(girara_tree_node_t *node)
void(* girara_free_function_t)(void *data)
Definition: types.h:118
void girara_list_free(girara_list_t *list)
ssize_t girara_list_position(girara_list_t *list, void *data)
void * girara_list_find(girara_list_t *list, girara_compare_function_t compare, const void *data)
struct girara_list_s girara_list_t
Definition: types.h:10
void * girara_node_get_data(girara_tree_node_t *node)
void girara_node_set_free_function(girara_tree_node_t *node, girara_free_function_t gfree)