tyler-trie 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION.yml +1 -1
- data/ext/trie/extconf.rb +1 -3
- metadata +4 -65
- data/ext/libdatrie/AUTHORS +0 -1
- data/ext/libdatrie/COPYING +0 -510
- data/ext/libdatrie/ChangeLog +0 -410
- data/ext/libdatrie/INSTALL +0 -236
- data/ext/libdatrie/Makefile.am +0 -5
- data/ext/libdatrie/Makefile.in +0 -661
- data/ext/libdatrie/NEWS +0 -27
- data/ext/libdatrie/README +0 -32
- data/ext/libdatrie/aclocal.m4 +0 -7431
- data/ext/libdatrie/config.guess +0 -1516
- data/ext/libdatrie/config.h.in +0 -74
- data/ext/libdatrie/config.sub +0 -1626
- data/ext/libdatrie/configure +0 -22008
- data/ext/libdatrie/configure.ac +0 -71
- data/ext/libdatrie/datrie.pc.in +0 -11
- data/ext/libdatrie/datrie/Makefile.am +0 -35
- data/ext/libdatrie/datrie/Makefile.in +0 -522
- data/ext/libdatrie/datrie/alpha-map.c +0 -170
- data/ext/libdatrie/datrie/alpha-map.h +0 -36
- data/ext/libdatrie/datrie/darray.c +0 -674
- data/ext/libdatrie/datrie/darray.h +0 -229
- data/ext/libdatrie/datrie/fileutils.c +0 -151
- data/ext/libdatrie/datrie/fileutils.h +0 -36
- data/ext/libdatrie/datrie/libdatrie.def +0 -31
- data/ext/libdatrie/datrie/sb-trie.c +0 -331
- data/ext/libdatrie/datrie/sb-trie.h +0 -279
- data/ext/libdatrie/datrie/tail.c +0 -344
- data/ext/libdatrie/datrie/tail.h +0 -200
- data/ext/libdatrie/datrie/trie-private.h +0 -31
- data/ext/libdatrie/datrie/trie.c +0 -413
- data/ext/libdatrie/datrie/trie.h +0 -270
- data/ext/libdatrie/datrie/triedefs.h +0 -63
- data/ext/libdatrie/datrie/typedefs.h +0 -113
- data/ext/libdatrie/depcomp +0 -530
- data/ext/libdatrie/doc/Doxyfile.in +0 -244
- data/ext/libdatrie/doc/Makefile.am +0 -29
- data/ext/libdatrie/doc/Makefile.in +0 -352
- data/ext/libdatrie/install-sh +0 -323
- data/ext/libdatrie/ltmain.sh +0 -6938
- data/ext/libdatrie/man/Makefile.am +0 -4
- data/ext/libdatrie/man/Makefile.in +0 -381
- data/ext/libdatrie/man/trietool.1 +0 -107
- data/ext/libdatrie/missing +0 -360
- data/ext/libdatrie/tools/Makefile.am +0 -7
- data/ext/libdatrie/tools/Makefile.in +0 -460
- data/ext/libdatrie/tools/trietool.c +0 -308
@@ -1,308 +0,0 @@
|
|
1
|
-
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
2
|
-
/*
|
3
|
-
* trietool.c - Trie manipulation tool
|
4
|
-
* Created: 2006-08-15
|
5
|
-
* Author: Theppitak Karoonboonyanan <thep@linux.thai.net>
|
6
|
-
*/
|
7
|
-
|
8
|
-
#include <string.h>
|
9
|
-
#include <stdlib.h>
|
10
|
-
#include <stdio.h>
|
11
|
-
#include <ctype.h>
|
12
|
-
|
13
|
-
#include <config.h>
|
14
|
-
#include <datrie/sb-trie.h>
|
15
|
-
|
16
|
-
typedef struct {
|
17
|
-
const char *path;
|
18
|
-
const char *trie_name;
|
19
|
-
SBTrie *sb_trie;
|
20
|
-
} ProgEnv;
|
21
|
-
|
22
|
-
static int decode_switch (int argc, char *argv[], ProgEnv *env);
|
23
|
-
static int decode_command (int argc, char *argv[], ProgEnv *env);
|
24
|
-
|
25
|
-
static int command_add (int argc, char *argv[], ProgEnv *env);
|
26
|
-
static int command_add_list (int argc, char *argv[], ProgEnv *env);
|
27
|
-
static int command_delete (int argc, char *argv[], ProgEnv *env);
|
28
|
-
static int command_delete_list (int argc, char *argv[], ProgEnv *env);
|
29
|
-
static int command_query (int argc, char *argv[], ProgEnv *env);
|
30
|
-
static int command_list (int argc, char *argv[], ProgEnv *env);
|
31
|
-
|
32
|
-
static void usage (const char *prog_name, int exit_status);
|
33
|
-
|
34
|
-
static char *string_trim (char *s);
|
35
|
-
|
36
|
-
int
|
37
|
-
main (int argc, char *argv[])
|
38
|
-
{
|
39
|
-
int i;
|
40
|
-
ProgEnv env;
|
41
|
-
int ret;
|
42
|
-
|
43
|
-
env.path = ".";
|
44
|
-
|
45
|
-
i = decode_switch (argc, argv, &env);
|
46
|
-
if (i == argc)
|
47
|
-
usage (argv[0], EXIT_FAILURE);
|
48
|
-
|
49
|
-
env.trie_name = argv[i++];
|
50
|
-
env.sb_trie = sb_trie_open (env.path, env.trie_name,
|
51
|
-
TRIE_IO_READ | TRIE_IO_WRITE | TRIE_IO_CREATE);
|
52
|
-
if (!env.sb_trie) {
|
53
|
-
fprintf (stderr, "Cannot open trie '%s' at '%s'\n",
|
54
|
-
env.trie_name, env.path);
|
55
|
-
exit (EXIT_FAILURE);
|
56
|
-
}
|
57
|
-
|
58
|
-
ret = decode_command (argc - i, argv + i, &env);
|
59
|
-
|
60
|
-
sb_trie_close (env.sb_trie);
|
61
|
-
|
62
|
-
return ret;
|
63
|
-
}
|
64
|
-
|
65
|
-
static int
|
66
|
-
decode_switch (int argc, char *argv[], ProgEnv *env)
|
67
|
-
{
|
68
|
-
int opt_idx;
|
69
|
-
|
70
|
-
for (opt_idx = 1; opt_idx < argc && *argv[opt_idx] == '-'; opt_idx++) {
|
71
|
-
if (strcmp (argv[opt_idx], "-h") == 0 ||
|
72
|
-
strcmp (argv[opt_idx], "--help") == 0)
|
73
|
-
{
|
74
|
-
usage (argv[0], EXIT_FAILURE);
|
75
|
-
} else if (strcmp (argv[opt_idx], "-V") == 0 ||
|
76
|
-
strcmp (argv[opt_idx], "--version") == 0)
|
77
|
-
{
|
78
|
-
printf ("%s\n", VERSION);
|
79
|
-
exit (EXIT_FAILURE);
|
80
|
-
} else if (strcmp (argv[opt_idx], "-p") == 0 ||
|
81
|
-
strcmp (argv[opt_idx], "--path") == 0)
|
82
|
-
{
|
83
|
-
env->path = argv[++opt_idx];
|
84
|
-
} else if (strcmp (argv[opt_idx], "--") == 0) {
|
85
|
-
++opt_idx;
|
86
|
-
break;
|
87
|
-
} else {
|
88
|
-
fprintf (stderr, "Unknown option: %s\n", argv[opt_idx]);
|
89
|
-
exit (EXIT_FAILURE);
|
90
|
-
}
|
91
|
-
}
|
92
|
-
|
93
|
-
return opt_idx;
|
94
|
-
}
|
95
|
-
|
96
|
-
static int
|
97
|
-
decode_command (int argc, char *argv[], ProgEnv *env)
|
98
|
-
{
|
99
|
-
int opt_idx;
|
100
|
-
|
101
|
-
for (opt_idx = 0; opt_idx < argc; opt_idx++) {
|
102
|
-
if (strcmp (argv[opt_idx], "add") == 0) {
|
103
|
-
++opt_idx;
|
104
|
-
opt_idx += command_add (argc - opt_idx, argv + opt_idx, env);
|
105
|
-
} else if (strcmp (argv[opt_idx], "add-list") == 0) {
|
106
|
-
++opt_idx;
|
107
|
-
opt_idx += command_add_list (argc - opt_idx, argv + opt_idx, env);
|
108
|
-
} else if (strcmp (argv[opt_idx], "delete") == 0) {
|
109
|
-
++opt_idx;
|
110
|
-
opt_idx += command_delete (argc - opt_idx, argv + opt_idx, env);
|
111
|
-
} else if (strcmp (argv[opt_idx], "delete-list") == 0) {
|
112
|
-
++opt_idx;
|
113
|
-
opt_idx += command_delete_list (argc - opt_idx, argv + opt_idx, env);
|
114
|
-
} else if (strcmp (argv[opt_idx], "query") == 0) {
|
115
|
-
++opt_idx;
|
116
|
-
opt_idx += command_query (argc - opt_idx, argv + opt_idx, env);
|
117
|
-
} else if (strcmp (argv[opt_idx], "list") == 0) {
|
118
|
-
++opt_idx;
|
119
|
-
opt_idx += command_list (argc - opt_idx, argv + opt_idx, env);
|
120
|
-
} else {
|
121
|
-
fprintf (stderr, "Unknown command: %s\n", argv[opt_idx]);
|
122
|
-
return EXIT_FAILURE;
|
123
|
-
}
|
124
|
-
}
|
125
|
-
|
126
|
-
return EXIT_SUCCESS;
|
127
|
-
}
|
128
|
-
|
129
|
-
static int
|
130
|
-
command_add (int argc, char *argv[], ProgEnv *env)
|
131
|
-
{
|
132
|
-
int opt_idx;
|
133
|
-
|
134
|
-
opt_idx = 0;
|
135
|
-
while (opt_idx < argc) {
|
136
|
-
const TrieChar *key;
|
137
|
-
TrieData data;
|
138
|
-
|
139
|
-
key = (const TrieChar *) argv[opt_idx++];
|
140
|
-
data = (opt_idx < argc) ? atoi (argv[opt_idx++]) : TRIE_DATA_ERROR;
|
141
|
-
|
142
|
-
if (!sb_trie_store (env->sb_trie, key, data)) {
|
143
|
-
fprintf (stderr, "Failed to add entry '%s' with data %d\n",
|
144
|
-
key, data);
|
145
|
-
}
|
146
|
-
}
|
147
|
-
|
148
|
-
return opt_idx;
|
149
|
-
}
|
150
|
-
|
151
|
-
static int
|
152
|
-
command_add_list (int argc, char *argv[], ProgEnv *env)
|
153
|
-
{
|
154
|
-
FILE *input;
|
155
|
-
char line[256];
|
156
|
-
|
157
|
-
input = fopen (argv[0], "r");
|
158
|
-
if (!input) {
|
159
|
-
fprintf (stderr, "add-list: Cannot open input file '%s'\n", argv[0]);
|
160
|
-
return 1;
|
161
|
-
}
|
162
|
-
|
163
|
-
while (fgets (line, sizeof line, input)) {
|
164
|
-
char *key, *data;
|
165
|
-
TrieData data_val;
|
166
|
-
|
167
|
-
key = string_trim (line);
|
168
|
-
if ('\0' != *key) {
|
169
|
-
/* find key boundary */
|
170
|
-
for (data = key; *data && !strchr ("\t,", *data); ++data)
|
171
|
-
;
|
172
|
-
/* mark key ending and find data begin */
|
173
|
-
if ('\0' != *data) {
|
174
|
-
*data++ = '\0';
|
175
|
-
while (isspace (*data))
|
176
|
-
++data;
|
177
|
-
}
|
178
|
-
/* decode data */
|
179
|
-
data_val = ('\0' != *data) ? atoi (data) : TRIE_DATA_ERROR;
|
180
|
-
|
181
|
-
/* store the key */
|
182
|
-
if (!sb_trie_store (env->sb_trie, (const TrieChar *) key, data_val))
|
183
|
-
fprintf (stderr, "Failed to add key '%s' with data %d.\n",
|
184
|
-
key, data_val);
|
185
|
-
}
|
186
|
-
}
|
187
|
-
|
188
|
-
fclose (input);
|
189
|
-
|
190
|
-
return 1;
|
191
|
-
}
|
192
|
-
|
193
|
-
static int
|
194
|
-
command_delete (int argc, char *argv[], ProgEnv *env)
|
195
|
-
{
|
196
|
-
int opt_idx;
|
197
|
-
|
198
|
-
for (opt_idx = 0; opt_idx < argc; opt_idx++)
|
199
|
-
if (!sb_trie_delete (env->sb_trie, (const TrieChar *) argv[opt_idx]))
|
200
|
-
fprintf (stderr, "No entry '%s'. Not deleted.\n", argv[opt_idx]);
|
201
|
-
|
202
|
-
return opt_idx;
|
203
|
-
}
|
204
|
-
|
205
|
-
static int
|
206
|
-
command_delete_list (int argc, char *argv[], ProgEnv *env)
|
207
|
-
{
|
208
|
-
FILE *input;
|
209
|
-
char line[256];
|
210
|
-
|
211
|
-
input = fopen (argv[0], "r");
|
212
|
-
if (!input) {
|
213
|
-
fprintf (stderr, "delete-list: Cannot open input file '%s'\n", argv[0]);
|
214
|
-
return 1;
|
215
|
-
}
|
216
|
-
|
217
|
-
while (fgets (line, sizeof line, input)) {
|
218
|
-
char *p;
|
219
|
-
|
220
|
-
p = string_trim (line);
|
221
|
-
if ('\0' != *p)
|
222
|
-
if (!sb_trie_delete (env->sb_trie, (const TrieChar *) p))
|
223
|
-
fprintf (stderr, "No entry '%s'. Not deleted.\n", p);
|
224
|
-
}
|
225
|
-
|
226
|
-
fclose (input);
|
227
|
-
|
228
|
-
return 1;
|
229
|
-
}
|
230
|
-
|
231
|
-
static int
|
232
|
-
command_query (int argc, char *argv[], ProgEnv *env)
|
233
|
-
{
|
234
|
-
TrieData data;
|
235
|
-
|
236
|
-
if (argc == 0) {
|
237
|
-
fprintf (stderr, "query: No key specified.\n");
|
238
|
-
return 0;
|
239
|
-
}
|
240
|
-
|
241
|
-
if (sb_trie_retrieve (env->sb_trie, (const TrieChar *) argv[0], &data)) {
|
242
|
-
printf ("%d\n", data);
|
243
|
-
} else {
|
244
|
-
fprintf (stderr, "query: Key '%s' not found.\n", argv[0]);
|
245
|
-
}
|
246
|
-
|
247
|
-
return 1;
|
248
|
-
}
|
249
|
-
|
250
|
-
static Bool
|
251
|
-
list_enum_func (const SBChar *key, TrieData key_data, void *user_data)
|
252
|
-
{
|
253
|
-
printf ("%s\t%d\n", key, key_data);
|
254
|
-
return TRUE;
|
255
|
-
}
|
256
|
-
|
257
|
-
static int
|
258
|
-
command_list (int argc, char *argv[], ProgEnv *env)
|
259
|
-
{
|
260
|
-
sb_trie_enumerate (env->sb_trie, list_enum_func, (void *) 0);
|
261
|
-
return 0;
|
262
|
-
}
|
263
|
-
|
264
|
-
|
265
|
-
static void
|
266
|
-
usage (const char *prog_name, int exit_status)
|
267
|
-
{
|
268
|
-
printf ("%s - double-array trie manipulator\n", prog_name);
|
269
|
-
printf ("Usage: %s [OPTION]... TRIE CMD ARG ...\n", prog_name);
|
270
|
-
printf (
|
271
|
-
"Options:\n"
|
272
|
-
" -p, --path DIR set trie directory to DIR [default=.]\n"
|
273
|
-
" -h, --help display this help and exit\n"
|
274
|
-
" -V, --version output version information and exit\n"
|
275
|
-
"\n"
|
276
|
-
"Commands:\n"
|
277
|
-
" add WORD DATA ... add WORD with DATA to trie\n"
|
278
|
-
" add-list LISTFILE add WORD and DATA from LISTFILE to trie\n"
|
279
|
-
" delete WORD ... delete WORD from trie\n"
|
280
|
-
" delete-list LISTFILE delete words listed in LISTFILE from trie\n"
|
281
|
-
" query WORD query WORD data from trie\n"
|
282
|
-
" list list all words in trie\n"
|
283
|
-
);
|
284
|
-
|
285
|
-
exit (exit_status);
|
286
|
-
}
|
287
|
-
|
288
|
-
static char *
|
289
|
-
string_trim (char *s)
|
290
|
-
{
|
291
|
-
char *p;
|
292
|
-
|
293
|
-
/* skip leading white spaces */
|
294
|
-
while (*s && isspace (*s))
|
295
|
-
++s;
|
296
|
-
|
297
|
-
/* trim trailing white spaces */
|
298
|
-
p = s + strlen (s) - 1;
|
299
|
-
while (isspace (*p))
|
300
|
-
--p;
|
301
|
-
*++p = '\0';
|
302
|
-
|
303
|
-
return s;
|
304
|
-
}
|
305
|
-
|
306
|
-
/*
|
307
|
-
vi:ts=4:ai:expandtab
|
308
|
-
*/
|