girara
datastructures.h
Go to the documentation of this file.
00001 /* See LICENSE file for license and copyright information */
00002 
00003 #ifndef GIRARA_DATASTRUCTURES_H
00004 #define GIRARA_DATASTRUCTURES_H
00005 
00006 #include <stddef.h>
00007 #include <stdbool.h>
00008 #include <sys/types.h>
00009 #include "types.h"
00010 
00016 girara_list_t* girara_list_new(void);
00017 
00024 girara_list_t* girara_list_new2(girara_free_function_t gfree);
00025 
00032 girara_list_t* girara_sorted_list_new(girara_compare_function_t cmp);
00033 
00042 girara_list_t* girara_sorted_list_new2(girara_compare_function_t cmp,
00043     girara_free_function_t gfree);
00044 
00051 void girara_list_set_free_function(girara_list_t* list,
00052     girara_free_function_t gfree);
00053 
00059 void girara_list_clear(girara_list_t* list);
00060 
00066 void girara_list_free(girara_list_t* list);
00067 
00074 void girara_list_append(girara_list_t* list, void* data);
00075 
00082 void girara_list_prepend(girara_list_t* list, void* data);
00083 
00090 void girara_list_remove(girara_list_t* list, void* data);
00091 
00099 void* girara_list_nth(girara_list_t* list, size_t n);
00100 
00108 bool girara_list_contains(girara_list_t* list, void* data);
00109 
00116 size_t girara_list_size(girara_list_t* list);
00117 
00125 ssize_t girara_list_position(girara_list_t* list, void* data);
00126 
00133 void girara_list_sort(girara_list_t* list, girara_compare_function_t compare);
00134 
00143 void* girara_list_find(girara_list_t* list, girara_compare_function_t compare,
00144     const void* data);
00145 
00152 girara_list_iterator_t* girara_list_iterator(girara_list_t* list);
00153 
00160 girara_list_iterator_t* girara_list_iterator_next(girara_list_iterator_t* iter);
00161 
00168 bool girara_list_iterator_has_next(girara_list_iterator_t* iter);
00169 
00176 bool girara_list_iterator_is_valid(girara_list_iterator_t* iter);
00177 
00184 void* girara_list_iterator_data(girara_list_iterator_t* iter);
00185 
00192 void girara_list_iterator_set(girara_list_iterator_t* iter, void *data);
00193 
00199 void girara_list_iterator_free(girara_list_iterator_t* iter);
00200 
00208 void girara_list_foreach(girara_list_t* list, girara_list_callback_t callback,
00209     void* data);
00210 
00211 #define GIRARA_LIST_FOREACH(list, type, iter, data) \
00212   do { \
00213     girara_list_iterator_t* iter = girara_list_iterator(list); \
00214     while (girara_list_iterator_is_valid(iter)) { \
00215       type data = girara_list_iterator_data(iter);
00216 
00217 #define GIRARA_LIST_FOREACH_END(list, type, iter, data) \
00218       girara_list_iterator_next(iter); \
00219     } \
00220     girara_list_iterator_free(iter); \
00221   } while(0)
00222 
00231 girara_list_t* girara_list_merge(girara_list_t* list, girara_list_t* other);
00232 
00239 girara_tree_node_t* girara_node_new(void* data);
00240 
00247 void girara_node_set_free_function(girara_tree_node_t* node,
00248     girara_free_function_t gfree);
00249 
00256 void girara_node_free(girara_tree_node_t* node);
00257 
00264 void girara_node_append(girara_tree_node_t* parent, girara_tree_node_t* child);
00265 
00273 girara_tree_node_t* girara_node_append_data(girara_tree_node_t* parent,
00274     void* data);
00275 
00282 girara_tree_node_t* girara_node_get_parent(girara_tree_node_t* node);
00283 
00290 girara_tree_node_t* girara_node_get_root(girara_tree_node_t* node);
00291 
00298 girara_list_t* girara_node_get_children(girara_tree_node_t* node);
00299 
00306 size_t girara_node_get_num_children(girara_tree_node_t* node);
00307 
00314 void* girara_node_get_data(girara_tree_node_t* node);
00315 
00322 void girara_node_set_data(girara_tree_node_t* node, void* data);
00323 
00324 #endif
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines