X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=dict.h;h=ca0e6f6e9a209efe442a3ea8083e0d2480cc7e1b;hb=6717cd95edcf1332c81daaa6c608c293dc8ffb4a;hp=d87e7659031e3497a1158a94ffde33ed948e82d8;hpb=dd4b319cdb6e2883ae76317036b57b670344160a;p=wordgame diff --git a/dict.h b/dict.h index d87e765..ca0e6f6 100644 --- a/dict.h +++ b/dict.h @@ -19,9 +19,23 @@ #ifndef _DICT_H_ #define _DICT_H_ -#include "dict-impl.h" +#include + +#ifndef FALSE +# define FALSE 0 +#endif + +#ifndef TRUE +# define TRUE 1 +#endif + +typedef int bool_t; + +typedef struct _trie { + uint32_t flags; + struct _trie *next[26]; +} trie_t; -/* Only looks opaque. Perfectly stack-allocatable */ typedef trie_t dict_t; typedef trie_t *dict_cursor_t; typedef uint32_t dict_entry_t; @@ -46,11 +60,30 @@ dict_entry_t * dict_lookup (dict_t *dict, const char *word); +typedef bool_t +(*dict_entry_predicate_t) (dict_entry_t entry); + +int +dict_count (dict_t *dict, + dict_entry_predicate_t predicate); + /* Querying a dictionary entry. The dict interface uses 1 bit. * All of the remaining bits are available for application use. */ #define DICT_ENTRY_IS_WORD(entry) ((entry) && ((*entry) & 0x01)) +/* Printing the dictionary */ +int +dict_print (dict_t *dict); + +int +dict_print_if (dict_t *dict, + dict_entry_predicate_t predicate); + +int +dict_print_by_length_if (dict_t *dict, + dict_entry_predicate_t predicate); + /* Character-by-character perusal of the dictionary */ dict_cursor_t dict_root (dict_t *dict);