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