tyler-trie 0.2.3 → 0.3.1

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.
data/ext/trie/trie.h ADDED
@@ -0,0 +1,40 @@
1
+ #include "darray.h"
2
+ #include "tail.h"
3
+
4
+ typedef struct _Trie {
5
+ DArray *da;
6
+ Tail *tail;
7
+ } Trie;
8
+
9
+ typedef struct _TrieState {
10
+ const Trie *trie; /**< the corresponding trie */
11
+ TrieIndex index; /**< index in double-array/tail structures */
12
+ short suffix_idx; /**< suffix character offset, if in suffix */
13
+ short is_suffix; /**< whether it is currently in suffix part */
14
+ } TrieState;
15
+
16
+
17
+ #define trie_da_is_separate(da,s) (da_get_base ((da), (s)) < 0)
18
+ #define trie_da_get_tail_index(da,s) (-da_get_base ((da), (s)))
19
+ #define trie_da_set_tail_index(da,s,v) (da_set_base ((da), (s), -(v)))
20
+ #define trie_state_is_terminal(s) trie_state_is_walkable((s),TRIE_CHAR_TERM)
21
+
22
+
23
+ Trie* trie_new();
24
+ void trie_free(Trie *trie);
25
+ static Bool trie_branch_in_branch (Trie *trie, TrieIndex sep_node, const TrieChar *suffix, TrieData data);
26
+ static Bool trie_branch_in_tail(Trie *trie, TrieIndex sep_node, const TrieChar *suffix, TrieData data);
27
+ Bool trie_store (Trie *trie, const TrieChar *key, TrieData data);
28
+ Bool trie_retrieve (const Trie *trie, const TrieChar *key, TrieData *o_data);
29
+ Bool trie_delete (Trie *trie, const TrieChar *key);
30
+ TrieState * trie_root (const Trie *trie);
31
+ static TrieState * trie_state_new (const Trie *trie, TrieIndex index, short suffix_idx, short is_suffix);
32
+ TrieState * trie_state_clone (const TrieState *s);
33
+ void trie_state_free (TrieState *s);
34
+ void trie_state_rewind (TrieState *s);
35
+ Bool trie_state_walk (TrieState *s, TrieChar c);
36
+ Bool trie_state_is_walkable (const TrieState *s, TrieChar c);
37
+ Bool trie_state_is_leaf (const TrieState *s);
38
+ TrieData trie_state_get_data (const TrieState *s);
39
+
40
+
@@ -0,0 +1,73 @@
1
+ /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
+ /*
3
+ * triedefs.h - General typedefs for trie
4
+ * Created: 2006-08-11
5
+ * Author: Theppitak Karoonboonyanan <thep@linux.thai.net>
6
+ */
7
+
8
+ #ifndef __TRIEDEFS_H
9
+ #define __TRIEDEFS_H
10
+
11
+ #include <datrie/typedefs.h>
12
+
13
+ /**
14
+ * @file triedefs.h
15
+ * @brief General typedefs for trie
16
+ */
17
+
18
+ /**
19
+ * @brief Trie IO modes
20
+ */
21
+ typedef enum {
22
+ TRIE_IO_READ = 0x01,
23
+ TRIE_IO_WRITE = 0x02,
24
+ TRIE_IO_CREATE = 0x04
25
+ } TrieIOMode;
26
+
27
+ /**
28
+ * @brief Trie character type for alphabet
29
+ */
30
+ typedef uint32 AlphaChar;
31
+
32
+ /**
33
+ * @brief Error value for alphabet character
34
+ */
35
+ #define ALPHA_CHAR_ERROR (~(AlphaChar)0)
36
+
37
+ /**
38
+ * @brief Trie character type for key
39
+ */
40
+ typedef unsigned char TrieChar;
41
+ /**
42
+ * @brief Trie terminator character
43
+ */
44
+ #define TRIE_CHAR_TERM '\0'
45
+ #define TRIE_CHAR_MAX 255
46
+
47
+ /**
48
+ * @brief Type of Trie index
49
+ */
50
+ typedef int32 TrieIndex;
51
+ /**
52
+ * @brief Trie error index
53
+ */
54
+ #define TRIE_INDEX_ERROR 0
55
+ /**
56
+ * @brief Maximum trie index value
57
+ */
58
+ #define TRIE_INDEX_MAX 0x7fffffff
59
+
60
+ /**
61
+ * @brief Type of value associated to trie entries
62
+ */
63
+ typedef int32 TrieData;
64
+ /**
65
+ * @brief Trie error data
66
+ */
67
+ #define TRIE_DATA_ERROR -1
68
+
69
+ #endif /* __TRIEDEFS_H */
70
+
71
+ /*
72
+ vi:ts=4:ai:expandtab
73
+ */
data/lib/trie.rb CHANGED
@@ -1 +1 @@
1
- require File.dirname(__FILE__) + '/../ext/trie/trie'
1
+ require File.dirname(__FILE__) + '/../ext/trie'
data/spec/trie_spec.rb CHANGED
@@ -1,27 +1,18 @@
1
- require 'trie'
2
-
3
- TRIE_PATH = 'spec/test-trie'
1
+ require File.dirname(__FILE__) + '/../ext/trie'
4
2
 
5
3
  describe Trie do
6
4
  before :each do
7
- @trie = Trie.new(TRIE_PATH);
5
+ @trie = Trie.new;
8
6
  @trie.add('rocket')
9
7
  @trie.add('rock')
10
8
  @trie.add('frederico')
11
9
  end
12
10
 
13
- after :each do
14
- @trie.close
15
- File.delete('spec/test-trie/trie.br')
16
- File.delete('spec/test-trie/trie.tl')
17
- File.delete('spec/test-trie/trie.sbm')
18
- end
19
-
20
- describe :path do
21
- it 'returns the correct path' do
22
- @trie.path.should == TRIE_PATH
23
- end
24
- end
11
+ #describe :path do
12
+ # it 'returns the correct path' do
13
+ # @trie.path.should == TRIE_PATH
14
+ # end
15
+ #end
25
16
 
26
17
  describe :has_key? do
27
18
  it 'returns true for words in the trie' do
@@ -120,23 +111,23 @@ describe Trie do
120
111
  end
121
112
  end
122
113
 
123
- describe :walk_to_terminal do
124
- it 'returns the first word found along a path' do
125
- @trie.add 'anderson'
126
- @trie.add 'andreas'
127
- @trie.add 'and'
114
+ #describe :walk_to_terminal do
115
+ # it 'returns the first word found along a path' do
116
+ # @trie.add 'anderson'
117
+ # @trie.add 'andreas'
118
+ # @trie.add 'and'
128
119
 
129
- @trie.walk_to_terminal('anderson').should == 'and'
130
- end
120
+ # @trie.walk_to_terminal('anderson').should == 'and'
121
+ # end
131
122
 
132
- it 'returns the first word and value along a path' do
133
- @trie.add 'anderson'
134
- @trie.add 'andreas'
135
- @trie.add 'and', 15
123
+ # it 'returns the first word and value along a path' do
124
+ # @trie.add 'anderson'
125
+ # @trie.add 'andreas'
126
+ # @trie.add 'and', 15
136
127
 
137
- @trie.walk_to_terminal('anderson',true).should == ['and', 15]
138
- end
139
- end
128
+ # @trie.walk_to_terminal('anderson',true).should == ['and', 15]
129
+ # end
130
+ #end
140
131
 
141
132
  describe :root do
142
133
  it 'returns a TrieNode' do
@@ -148,33 +139,26 @@ describe Trie do
148
139
  end
149
140
  end
150
141
 
151
- describe :save do
152
- it 'saves the trie to disk such that another trie can be spawned which will read succesfully' do
153
- @trie.add('omgwtf',123)
154
- @trie.save
155
-
156
- trie2 = Trie.new(TRIE_PATH)
157
- trie2.get('omgwtf').should == 123
158
- end
159
- end
142
+ #describe :save do
143
+ # it 'saves the trie to disk such that another trie can be spawned which will read succesfully' do
144
+ # @trie.add('omgwtf',123)
145
+ # @trie.save
146
+ #
147
+ # trie2 = Trie.new(TRIE_PATH)
148
+ # trie2.get('omgwtf').should == 123
149
+ # end
150
+ #end
160
151
  end
161
152
 
162
153
  describe TrieNode do
163
154
  before :each do
164
- @trie = Trie.new(TRIE_PATH);
155
+ @trie = Trie.new;
165
156
  @trie.add('rocket',1)
166
157
  @trie.add('rock',2)
167
158
  @trie.add('frederico',3)
168
159
  @node = @trie.root
169
160
  end
170
161
 
171
- after :each do
172
- @trie.close
173
- File.delete('spec/test-trie/trie.br')
174
- File.delete('spec/test-trie/trie.tl')
175
- File.delete('spec/test-trie/trie.sbm')
176
- end
177
-
178
162
  describe :state do
179
163
  it 'returns the most recent state character' do
180
164
  @node.walk!('r')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tyler-trie
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tyler McMullen
@@ -9,11 +9,11 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-03-14 00:00:00 -07:00
12
+ date: 2009-04-16 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
16
- description: TODO
16
+ description: Ruby Trie based on libdatrie.
17
17
  email: tyler@scribd.com
18
18
  executables: []
19
19
 
@@ -25,22 +25,29 @@ files:
25
25
  - README.textile
26
26
  - VERSION.yml
27
27
  - lib/trie.rb
28
- - spec/test-trie
29
- - spec/test-trie/README
30
28
  - spec/trie_spec.rb
31
- - ext/Makefile
32
29
  - ext/trie
30
+ - ext/trie/darray.c
31
+ - ext/trie/darray.h
33
32
  - ext/trie/extconf.rb
33
+ - ext/trie/fileutils.c
34
+ - ext/trie/fileutils.h
34
35
  - ext/trie/Makefile
36
+ - ext/trie/tail.c
37
+ - ext/trie/tail.h
38
+ - ext/trie/trie-private.c
39
+ - ext/trie/trie-private.h
35
40
  - ext/trie/trie.c
41
+ - ext/trie/trie.h
42
+ - ext/trie/triedefs.h
36
43
  has_rdoc: false
37
44
  homepage: http://github.com/tyler/trie
38
45
  post_install_message:
39
46
  rdoc_options: []
40
47
 
41
48
  require_paths:
42
- - lib
43
49
  - ext
50
+ - lib
44
51
  required_ruby_version: !ruby/object:Gem::Requirement
45
52
  requirements:
46
53
  - - ">="
@@ -1 +0,0 @@
1
- This directory is used to store Trie files while running the specs. Don't delete it.