1 /* libcomps - C alternative to yum.comps library 2 * Copyright (C) 2013 Jindrich Luza 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License as published by 6 * the Free Software Foundation; either version 2 of the License, or 7 * any later version. 8 * 9 * This program is distributed in the hope that it will be useful, but 10 * WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with this program; if not, write to Free Software 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 17 * USA 18 */ 19 20 #ifndef COMPS_RADIX_H 21 #define COMPS_RADIX_H 22 23 #include <stdlib.h> 24 #include <string.h> 25 #include "comps_hslist.h" 26 27 typedef struct { 28 char * key; 29 unsigned is_leaf; 30 COMPS_HSList * subnodes; 31 void * data; 32 void (**data_destructor)(void*); 33 } COMPS_RTreeData; 34 35 typedef struct { 36 COMPS_HSList * subnodes; 37 void* (*data_constructor)(void*); 38 void* (*data_cloner)(void*); 39 void (*data_destructor)(void*); 40 } COMPS_RTree; 41 42 typedef struct { 43 char * key; 44 void * data; 45 } COMPS_RTreePair; 46 47 COMPS_RTreeData * __comps_rtree_data_create(COMPS_RTree *rt, char *key, 48 unsigned int keylen, 49 void *data); 50 COMPS_HSList* __comps_rtree_all(COMPS_RTree * rt, char pairorkey); 51 52 void comps_rtree_data_destroy(COMPS_RTreeData * rtd); 53 void comps_rtree_data_destroy_v(void * rtd); 54 55 COMPS_RTreeData * comps_rtree_data_create(COMPS_RTree *rt, char * key, 56 void * data); 57 COMPS_RTreeData * comps_rtree_data_create_n(COMPS_RTree *rt, char * key, 58 size_t keylen, void * data); 59 60 COMPS_RTree * comps_rtree_create(void* (*data_constructor)(void*), 61 void* (*data_cloner)(void*), 62 void (*data_destructor)(void*)); 63 void comps_rtree_destroy(COMPS_RTree * rt); 64 65 void comps_rtree_set(COMPS_RTree *rt, char *key, void *data); 66 void comps_rtree_set_n(COMPS_RTree * rt, char * key, 67 size_t keylen, void * data); 68 69 void* comps_rtree_get(COMPS_RTree * rt, const char * key); 70 void comps_rtree_unset(COMPS_RTree * rt, const char * key); 71 void comps_rtree_clear(COMPS_RTree * rt); 72 73 void comps_rtree_values_walk(COMPS_RTree *rt, void* udata, 74 void (*walk_f)(void*, void*)); 75 COMPS_HSList * comps_rtree_values(COMPS_RTree *rt); 76 COMPS_HSList* comps_rtree_keys(COMPS_RTree * rt); 77 COMPS_HSList* comps_rtree_pairs(COMPS_RTree * rt); 78 COMPS_RTree * comps_rtree_clone(COMPS_RTree * rt); 79 COMPS_RTree* comps_rtree_union(COMPS_RTree *rt1, COMPS_RTree *rt2); 80 void comps_rtree_unite(COMPS_RTree *rt1, COMPS_RTree *rt2); 81 COMPS_RTree* comps_rtree_union(COMPS_RTree *rt1, COMPS_RTree *rt2); 82 83 COMPS_RTreePair * comps_rtree_pair_create(char * key, void * data, 84 void (*data_destructor(void*))); 85 void comps_rtree_pair_destroy(COMPS_RTreePair * pair); 86 void comps_rtree_pair_destroy_v(void * pair); 87 88 void comps_rtree_print(COMPS_HSList * hl, unsigned deep); 89 #endif 90