1 #ifndef __GSK_PREFIX_TREE_H_ 2 #define __GSK_PREFIX_TREE_H_ 3 4 #include <glib.h> 5 6 G_BEGIN_DECLS 7 8 /* Private class. 9 * 10 * This stores a tree of prefixes, 11 * for efficient prefix lookup. 12 */ 13 14 typedef struct _GskPrefixTree GskPrefixTree; 15 struct _GskPrefixTree 16 { 17 char *prefix; 18 GskPrefixTree *next_sibling; 19 GskPrefixTree *children; 20 21 gboolean has_data; 22 gpointer data; 23 }; 24 25 /* note: a NULL GskPrefixTree* is an empty tree. */ 26 27 /* returns the pointer that we replaced, or NULL */ 28 gpointer gsk_prefix_tree_insert (GskPrefixTree **tree, 29 const char *prefix, 30 gpointer data); 31 32 gpointer gsk_prefix_tree_lookup (GskPrefixTree *tree, 33 const char *str); 34 gpointer gsk_prefix_tree_lookup_exact (GskPrefixTree *tree, 35 const char *str); 36 GSList *gsk_prefix_tree_lookup_all (GskPrefixTree *tree, 37 const char *str); 38 gpointer gsk_prefix_tree_remove (GskPrefixTree *tree, 39 const char *prefix); 40 void gsk_prefix_tree_foreach (GskPrefixTree *tree, 41 GFunc func, 42 gpointer func_data); 43 void gsk_prefix_tree_destroy (GskPrefixTree *tree); 44 45 46 G_END_DECLS 47 48 #endif 49