]> git.cworth.org Git - wordgame/blobdiff - dict.c
grid: Don't consider 2-letter words as valid.
[wordgame] / dict.c
diff --git a/dict.c b/dict.c
index f975829c1877c74e1b85001c571fcbccbd2d8ccc..a9202934035d35346f0ac75905f4baa130fff9ed 100644 (file)
--- a/dict.c
+++ b/dict.c
  * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA."
  */
 
-/* Portably, schmortability. I want ease of programming. */
-#define _GNU_SOURCE
-#include <stdio.h>
-#include <stdlib.h>
+#include "dict.h"
+
 #include <string.h>
 #include <errno.h>
 #include <ctype.h>
 
-#include "dict.h"
-
 typedef struct _string {
     size_t size;
     char *s;
     size_t len;
 } string_t;
 
-#define TRIE_FLAGS_IS_WORD     (1<<0)
-
 typedef bool_t
 (*trie_predicate_t) (trie_t *trie);
 
 #define TRIE_CHAR_TO_INDEX(c)  (tolower (c) - 'a')
 #define TRIE_INDEX_TO_CHAR(i)  (i + 'a')
 
-void *
+static void *
 xmalloc (size_t size)
 {
     void *res;
@@ -54,7 +48,7 @@ xmalloc (size_t size)
     return res;
 }
 
-void *
+static void *
 xrealloc (void *ptr, size_t size)
 {
     void *res;
@@ -68,7 +62,7 @@ xrealloc (void *ptr, size_t size)
     return res;
 }
 
-void
+static void
 chomp (char *s)
 {
     int len = strlen (s);
@@ -78,7 +72,7 @@ chomp (char *s)
        s[len - 1] = '\0';
 }
 
-void
+static void
 string_init (string_t *string)
 {
     string->size = 0;
@@ -86,7 +80,7 @@ string_init (string_t *string)
     string->len = 0;
 }
 
-void
+static void
 string_fini (string_t *string)
 {
     string->size = 0;
@@ -95,7 +89,7 @@ string_fini (string_t *string)
     string->len = 0;
 }
 
-void
+static void
 string_append_char (string_t *string, char c)
 {
     if (string->size == 0) {
@@ -114,7 +108,7 @@ string_append_char (string_t *string, char c)
     string->s[string->len] = '\0';
 }
 
-void
+static void
 string_chop (string_t *string)
 {
     if (string->len == 0)
@@ -145,7 +139,7 @@ trie_fini (trie_t *trie)
            trie_destroy (trie->next[i]);
 }
 
-trie_t *
+static trie_t *
 trie_create (void)
 {
     trie_t *trie;
@@ -165,26 +159,24 @@ trie_destroy (trie_t *trie)
     free (trie);
 }
 
-void
+static trie_t *
 trie_add (trie_t       *trie,
          const char    *word_chunk)
 {
     char c = word_chunk[0];
     int i;
 
-    if (c == '\0') {
-       trie->flags |= TRIE_FLAGS_IS_WORD;
-       return;
-    }
+    if (c == '\0')
+       return trie;
 
     i = TRIE_CHAR_TO_INDEX (c);
     if (trie->next[i] == NULL)
        trie->next[i] = trie_create ();
 
-    trie_add (trie->next[i], word_chunk + 1);
+    return trie_add (trie->next[i], word_chunk + 1);
 }
 
-trie_t *
+static trie_t *
 trie_find (trie_t      *trie,
           const char   *word_chunk)
 {
@@ -196,7 +188,7 @@ trie_find (trie_t   *trie,
     return trie;
 }
 
-int
+static int
 trie_count (trie_t             *trie,
            trie_predicate_t     predicate)
 {
@@ -216,7 +208,7 @@ trie_count (trie_t          *trie,
     return count;
 }
 
-int
+static int
 trie_print (trie_t             *trie,
            string_t            *string,
            trie_predicate_t     predicate,
@@ -269,7 +261,10 @@ void
 dict_add_word (dict_t          *dict,
               const char       *word)
 {
-    trie_add (dict, word);
+    trie_t *trie;
+
+    trie = trie_add (dict, word);
+    trie->flags |= DICT_ENTRY_FLAG_IS_WORD;
 }
 
 void