tyler-trie 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. data/VERSION.yml +4 -0
  2. data/ext/libdatrie/AUTHORS +1 -0
  3. data/ext/libdatrie/COPYING +510 -0
  4. data/ext/libdatrie/ChangeLog +410 -0
  5. data/ext/libdatrie/INSTALL +236 -0
  6. data/ext/libdatrie/Makefile.am +5 -0
  7. data/ext/libdatrie/Makefile.in +661 -0
  8. data/ext/libdatrie/NEWS +27 -0
  9. data/ext/libdatrie/README +32 -0
  10. data/ext/libdatrie/aclocal.m4 +7431 -0
  11. data/ext/libdatrie/config.guess +1516 -0
  12. data/ext/libdatrie/config.h.in +74 -0
  13. data/ext/libdatrie/config.sub +1626 -0
  14. data/ext/libdatrie/configure +22008 -0
  15. data/ext/libdatrie/configure.ac +71 -0
  16. data/ext/libdatrie/datrie.pc.in +11 -0
  17. data/ext/libdatrie/datrie/Makefile.am +35 -0
  18. data/ext/libdatrie/datrie/Makefile.in +522 -0
  19. data/ext/libdatrie/datrie/alpha-map.c +170 -0
  20. data/ext/libdatrie/datrie/alpha-map.h +36 -0
  21. data/ext/libdatrie/datrie/darray.c +674 -0
  22. data/ext/libdatrie/datrie/darray.h +229 -0
  23. data/ext/libdatrie/datrie/fileutils.c +151 -0
  24. data/ext/libdatrie/datrie/fileutils.h +36 -0
  25. data/ext/libdatrie/datrie/libdatrie.def +31 -0
  26. data/ext/libdatrie/datrie/sb-trie.c +331 -0
  27. data/ext/libdatrie/datrie/sb-trie.h +279 -0
  28. data/ext/libdatrie/datrie/tail.c +344 -0
  29. data/ext/libdatrie/datrie/tail.h +200 -0
  30. data/ext/libdatrie/datrie/trie-private.h +31 -0
  31. data/ext/libdatrie/datrie/trie.c +413 -0
  32. data/ext/libdatrie/datrie/trie.h +270 -0
  33. data/ext/libdatrie/datrie/triedefs.h +63 -0
  34. data/ext/libdatrie/datrie/typedefs.h +113 -0
  35. data/ext/libdatrie/depcomp +530 -0
  36. data/ext/libdatrie/doc/Doxyfile.in +244 -0
  37. data/ext/libdatrie/doc/Makefile.am +29 -0
  38. data/ext/libdatrie/doc/Makefile.in +352 -0
  39. data/ext/libdatrie/install-sh +323 -0
  40. data/ext/libdatrie/ltmain.sh +6938 -0
  41. data/ext/libdatrie/man/Makefile.am +4 -0
  42. data/ext/libdatrie/man/Makefile.in +381 -0
  43. data/ext/libdatrie/man/trietool.1 +107 -0
  44. data/ext/libdatrie/missing +360 -0
  45. data/ext/libdatrie/tools/Makefile.am +7 -0
  46. data/ext/libdatrie/tools/Makefile.in +460 -0
  47. data/ext/libdatrie/tools/trietool.c +308 -0
  48. data/ext/trie/extconf.rb +12 -0
  49. data/ext/trie/trie.c +174 -0
  50. data/lib/trie.rb +1 -0
  51. data/spec/test-trie/README +1 -0
  52. data/spec/trie_spec.rb +79 -0
  53. metadata +139 -0
@@ -0,0 +1,229 @@
1
+ /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
+ /*
3
+ * darray.h - Double-array trie structure
4
+ * Created: 2006-08-11
5
+ * Author: Theppitak Karoonboonyanan <thep@linux.thai.net>
6
+ */
7
+
8
+ #ifndef __DARRAY_H
9
+ #define __DARRAY_H
10
+
11
+ #include "triedefs.h"
12
+
13
+ /**
14
+ * @file darray.h
15
+ * @brief Double-array trie structure
16
+ */
17
+
18
+ /**
19
+ * @brief Double-array structure type
20
+ */
21
+ typedef struct _DArray DArray;
22
+
23
+ /**
24
+ * @brief Double-array entry enumeration function
25
+ *
26
+ * @param key : the key of the entry, up to @a sep_node
27
+ * @param sep_node : the separate node of the entry
28
+ * @param user_data : user-supplied data
29
+ *
30
+ * @return TRUE to continue enumeration, FALSE to stop
31
+ */
32
+ typedef Bool (*DAEnumFunc) (const TrieChar *key,
33
+ TrieIndex sep_node,
34
+ void *user_data);
35
+
36
+
37
+ /**
38
+ * @brief Open double-array from file
39
+ *
40
+ * @param path : the path that stores the double-array files
41
+ * @param name : the name of the double-array (not actual file name)
42
+ * @param mode : openning mode, read or write
43
+ *
44
+ * @return a pointer to the openned double-array, NULL on failure
45
+ *
46
+ * Open a double-array structure of given name. Note that @a name here does
47
+ * not mean the actual file name. Rather, the file name will be inferred by
48
+ * the name.
49
+ */
50
+ DArray * da_open (const char *path, const char *name, TrieIOMode mode);
51
+
52
+ /**
53
+ * @brief Close double-array data
54
+ *
55
+ * @param d : the double-array data
56
+ *
57
+ * @return 0 on success, non-zero on failure
58
+ *
59
+ * Close the given double-array data. If @a d was openned for writing, all
60
+ * pending changes will be saved to file.
61
+ */
62
+ int da_close (DArray *d);
63
+
64
+ /**
65
+ * @brief Save double-array data
66
+ *
67
+ * @param d : the double-array data
68
+ *
69
+ * @return 0 on success, non-zero on failure
70
+ *
71
+ * If @a double-array data was openned for writing, save all pending changes
72
+ * to file.
73
+ */
74
+ int da_save (DArray *d);
75
+
76
+
77
+ /**
78
+ * @brief Get root state
79
+ *
80
+ * @param d : the double-array data
81
+ *
82
+ * @return root state of the @a index set, or TRIE_INDEX_ERROR on failure
83
+ *
84
+ * Get root state for stepwise walking.
85
+ */
86
+ TrieIndex da_get_root (const DArray *d);
87
+
88
+
89
+ /**
90
+ * @brief Get BASE cell
91
+ *
92
+ * @param d : the double-array data
93
+ * @param s : the double-array state to get data
94
+ *
95
+ * @return the BASE cell value for the given state
96
+ *
97
+ * Get BASE cell value for the given state.
98
+ */
99
+ TrieIndex da_get_base (const DArray *d, TrieIndex s);
100
+
101
+ /**
102
+ * @brief Get CHECK cell
103
+ *
104
+ * @param d : the double-array data
105
+ * @param s : the double-array state to get data
106
+ *
107
+ * @return the CHECK cell value for the given state
108
+ *
109
+ * Get CHECK cell value for the given state.
110
+ */
111
+ TrieIndex da_get_check (const DArray *d, TrieIndex s);
112
+
113
+
114
+ /**
115
+ * @brief Set BASE cell
116
+ *
117
+ * @param d : the double-array data
118
+ * @param s : the double-array state to get data
119
+ * @param val : the value to set
120
+ *
121
+ * Set BASE cell for the given state to the given value.
122
+ */
123
+ void da_set_base (DArray *d, TrieIndex s, TrieIndex val);
124
+
125
+ /**
126
+ * @brief Set CHECK cell
127
+ *
128
+ * @param d : the double-array data
129
+ * @param s : the double-array state to get data
130
+ * @param val : the value to set
131
+ *
132
+ * Set CHECK cell for the given state to the given value.
133
+ */
134
+ void da_set_check (DArray *d, TrieIndex s, TrieIndex val);
135
+
136
+ /**
137
+ * @brief Walk in double-array structure
138
+ *
139
+ * @param d : the double-array structure
140
+ * @param s : current state
141
+ * @param c : the input character
142
+ *
143
+ * @return boolean indicating success
144
+ *
145
+ * Walk the double-array trie from state @a *s, using input character @a c.
146
+ * If there exists an edge from @a *s with arc labeled @a c, this function
147
+ * returns TRUE and @a *s is updated to the new state. Otherwise, it returns
148
+ * FALSE and @a *s is left unchanged.
149
+ */
150
+ Bool da_walk (DArray *d, TrieIndex *s, TrieChar c);
151
+
152
+ /**
153
+ * @brief Test walkability in double-array structure
154
+ *
155
+ * @param d : the double-array structure
156
+ * @param s : current state
157
+ * @param c : the input character
158
+ *
159
+ * @return boolean indicating walkability
160
+ *
161
+ * Test if there is a transition from state @a s with input character @a c.
162
+ */
163
+ /*
164
+ Bool da_is_walkable (DArray *d, TrieIndex s, TrieChar c);
165
+ */
166
+ #define da_is_walkable(d,s,c) \
167
+ (da_get_check ((d), da_get_base ((d), (s)) + (c)) == (s))
168
+
169
+ /**
170
+ * @brief Insert a branch from trie node
171
+ *
172
+ * @param d : the double-array structure
173
+ * @param s : the state to add branch to
174
+ * @param c : the character for the branch label
175
+ *
176
+ * @return the index of the new node
177
+ *
178
+ * Insert a new arc labelled with character @a c from the trie node
179
+ * represented by index @a s in double-array structure @a d.
180
+ * Note that it assumes that no such arc exists before inserting.
181
+ */
182
+ TrieIndex da_insert_branch (DArray *d, TrieIndex s, TrieChar c);
183
+
184
+ /**
185
+ * @brief Prune the single branch
186
+ *
187
+ * @param d : the double-array structure
188
+ * @param s : the dangling state to prune off
189
+ *
190
+ * Prune off a non-separate path up from the final state @a s.
191
+ * If @a s still has some children states, it does nothing. Otherwise,
192
+ * it deletes the node and all its parents which become non-separate.
193
+ */
194
+ void da_prune (DArray *d, TrieIndex s);
195
+
196
+ /**
197
+ * @brief Prune the single branch up to given parent
198
+ *
199
+ * @param d : the double-array structure
200
+ * @param p : the parent up to which to be pruned
201
+ * @param s : the dangling state to prune off
202
+ *
203
+ * Prune off a non-separate path up from the final state @a s to the
204
+ * given parent @a p. The prunning stop when either the parent @a p
205
+ * is met, or a first non-separate node is found.
206
+ */
207
+ void da_prune_upto (DArray *d, TrieIndex p, TrieIndex s);
208
+
209
+ /**
210
+ * @brief Enumerate entries stored in double-array structure
211
+ *
212
+ * @param d : the double-array structure
213
+ * @param enum_func : the callback function to be called on each separate node
214
+ * @param user_data : user-supplied data to send as an argument to @a enum_func
215
+ *
216
+ * @return boolean value indicating whether all the keys are visited
217
+ *
218
+ * Enumerate all keys stored in double-array structure. For each entry, the
219
+ * user-supplied @a enum_func callback function is called, with the entry key,
220
+ * the separate node, and user-supplied data. Returning FALSE from such
221
+ * callback will stop enumeration and return FALSE.
222
+ */
223
+ Bool da_enumerate (DArray *d, DAEnumFunc enum_func, void *user_data);
224
+
225
+ #endif /* __DARRAY_H */
226
+
227
+ /*
228
+ vi:ts=4:ai:expandtab
229
+ */
@@ -0,0 +1,151 @@
1
+ /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
+ /*
3
+ * fileutils.h - File utility functions
4
+ * Created: 2006-08-15
5
+ * Author: Theppitak Karoonboonyanan <thep@linux.thai.net>
6
+ */
7
+
8
+ #include <string.h>
9
+ #include <stdlib.h>
10
+
11
+ #include "fileutils.h"
12
+
13
+ /*--------------------------------------*
14
+ * INTERNAL FUNCTIONS DECLARATIONS *
15
+ *--------------------------------------*/
16
+
17
+ static char * make_full_path (const char *dir,
18
+ const char *name,
19
+ const char *ext);
20
+
21
+ /* ==================== BEGIN IMPLEMENTATION PART ==================== */
22
+
23
+ /*--------------------------------*
24
+ * FUNCTIONS IMPLEMENTATIONS *
25
+ *--------------------------------*/
26
+
27
+ static char *
28
+ make_full_path (const char *dir, const char *name, const char *ext)
29
+ {
30
+ char *path;
31
+
32
+ path = (char *) malloc (strlen (dir) + strlen (name) + strlen (ext) + 2);
33
+ sprintf (path, "%s/%s%s", dir, name, ext);
34
+
35
+ return path;
36
+ }
37
+
38
+ FILE *
39
+ file_open (const char *dir, const char *name, const char *ext, TrieIOMode mode)
40
+ {
41
+ const char *std_mode;
42
+ char *full_path;
43
+ FILE *file;
44
+
45
+ if (mode & TRIE_IO_WRITE)
46
+ std_mode = "r+";
47
+ else
48
+ std_mode = "r";
49
+
50
+ full_path = make_full_path (dir, name, ext);
51
+ file = fopen (full_path, std_mode);
52
+ if (!file && mode & TRIE_IO_CREATE)
53
+ file = fopen (full_path, "w+");
54
+ free (full_path);
55
+
56
+ return file;
57
+ }
58
+
59
+ long
60
+ file_length (FILE *file)
61
+ {
62
+ long cur_pos;
63
+ long size;
64
+
65
+ cur_pos = ftell (file);
66
+
67
+ fseek (file, 0L, SEEK_END);
68
+ size = ftell (file);
69
+
70
+ fseek (file, cur_pos, SEEK_SET);
71
+
72
+ return size;
73
+ }
74
+
75
+ Bool
76
+ file_read_int32 (FILE *file, int32 *o_val)
77
+ {
78
+ unsigned char buff[4];
79
+
80
+ if (fread (buff, 4, 1, file) == 1) {
81
+ *o_val = (buff[0] << 24) | (buff[1] << 16) | (buff[2] << 8) | buff[3];
82
+ return TRUE;
83
+ }
84
+
85
+ return FALSE;
86
+ }
87
+
88
+ Bool
89
+ file_write_int32 (FILE *file, int32 val)
90
+ {
91
+ unsigned char buff[4];
92
+
93
+ buff[0] = (val >> 24) & 0xff;
94
+ buff[1] = (val >> 16) & 0xff;
95
+ buff[2] = (val >> 8) & 0xff;
96
+ buff[3] = val & 0xff;
97
+
98
+ return (fwrite (buff, 4, 1, file) == 1);
99
+ }
100
+
101
+ Bool
102
+ file_read_int16 (FILE *file, int16 *o_val)
103
+ {
104
+ unsigned char buff[2];
105
+
106
+ if (fread (buff, 2, 1, file) == 1) {
107
+ *o_val = (buff[0] << 8) | buff[1];
108
+ return TRUE;
109
+ }
110
+
111
+ return FALSE;
112
+ }
113
+
114
+ Bool
115
+ file_write_int16 (FILE *file, int16 val)
116
+ {
117
+ unsigned char buff[2];
118
+
119
+ buff[0] = val >> 8;
120
+ buff[1] = val & 0xff;
121
+
122
+ return (fwrite (buff, 2, 1, file) == 1);
123
+ }
124
+
125
+ Bool
126
+ file_read_int8 (FILE *file, int8 *o_val)
127
+ {
128
+ return (fread (o_val, sizeof (int8), 1, file) == 1);
129
+ }
130
+
131
+ Bool
132
+ file_write_int8 (FILE *file, int8 val)
133
+ {
134
+ return (fwrite (&val, sizeof (int8), 1, file) == 1);
135
+ }
136
+
137
+ Bool
138
+ file_read_chars (FILE *file, char *buff, int len)
139
+ {
140
+ return (fread (buff, sizeof (char), len, file) == len);
141
+ }
142
+
143
+ Bool
144
+ file_write_chars (FILE *file, const char *buff, int len)
145
+ {
146
+ return (fwrite (buff, sizeof (char), len, file) == len);
147
+ }
148
+
149
+ /*
150
+ vi:ts=4:ai:expandtab
151
+ */
@@ -0,0 +1,36 @@
1
+ /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
+ /*
3
+ * fileutils.h - File utility functions
4
+ * Created: 2006-08-14
5
+ * Author: Theppitak Karoonboonyanan <thep@linux.thai.net>
6
+ */
7
+
8
+ #ifndef __FILEUTILS_H
9
+ #define __FILEUTILS_H
10
+
11
+ #include <stdio.h>
12
+
13
+ #include "triedefs.h"
14
+
15
+ FILE * file_open (const char *dir, const char *name, const char *ext,
16
+ TrieIOMode mode);
17
+
18
+ long file_length (FILE *file);
19
+
20
+ Bool file_read_int32 (FILE *file, int32 *o_val);
21
+ Bool file_write_int32 (FILE *file, int32 val);
22
+
23
+ Bool file_read_int16 (FILE *file, int16 *o_val);
24
+ Bool file_write_int16 (FILE *file, int16 val);
25
+
26
+ Bool file_read_int8 (FILE *file, int8 *o_val);
27
+ Bool file_write_int8 (FILE *file, int8 val);
28
+
29
+ Bool file_read_chars (FILE *file, char *buff, int len);
30
+ Bool file_write_chars (FILE *file, const char *buff, int len);
31
+
32
+ #endif /* __FILEUTILS_H */
33
+
34
+ /*
35
+ vi:ts=4:ai:expandtab
36
+ */
@@ -0,0 +1,31 @@
1
+ sb_trie_open
2
+ sb_trie_close
3
+ sb_trie_save
4
+ sb_trie_retrieve
5
+ sb_trie_store
6
+ sb_trie_delete
7
+ sb_trie_enumerate
8
+ sb_trie_root
9
+ sb_trie_state_clone
10
+ sb_trie_state_free
11
+ sb_trie_state_rewind
12
+ sb_trie_state_walk
13
+ sb_trie_state_is_walkable
14
+ sb_trie_state_is_terminal
15
+ sb_trie_state_is_leaf
16
+ sb_trie_state_get_data
17
+ trie_open
18
+ trie_close
19
+ trie_save
20
+ trie_retrieve
21
+ trie_store
22
+ trie_delete
23
+ trie_enumerate
24
+ trie_root
25
+ trie_state_clone
26
+ trie_state_free
27
+ trie_state_rewind
28
+ trie_state_walk
29
+ trie_state_is_walkable
30
+ trie_state_is_leaf
31
+ trie_state_get_data