ztx 0.0.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.
@@ -0,0 +1,210 @@
1
+ require "ztx/version"
2
+ require "tx_core"
3
+ require "forwardable"
4
+
5
+ module Tx
6
+ module Util
7
+ module_function
8
+
9
+ # Defines wrapper methods which perform boundary checking of pos and len.
10
+ def def_wrapper_methods(*methods)
11
+ methods.each() do |name|
12
+ define_method(name) do |*args|
13
+ (str, pos, len, *opt) = args
14
+ raise(ArgumentError, "argument pos is negative") if pos && pos < 0
15
+ str_len = bytesize(str)
16
+ pos ||= 0
17
+ pos = str_len if pos > str_len
18
+ len = str_len - pos if !len || len < 0 || len > str_len - pos
19
+ add_encoding(@unsafe.__send__(name, str, pos, len, *opt))
20
+ end
21
+ end
22
+ end
23
+
24
+ if RUBY_VERSION >= "1.9.0"
25
+
26
+ def default_encoding
27
+ return Encoding.default_internal || Encoding::UTF_8
28
+ end
29
+
30
+ def add_encoding(obj)
31
+ case obj
32
+ when Array
33
+ obj.each(){ |e| add_encoding(e) }
34
+ when String
35
+ obj.force_encoding(@encoding)
36
+ end
37
+ return obj
38
+ end
39
+
40
+ def to_binary(str)
41
+ return str.dup().force_encoding(Encoding::ASCII_8BIT)
42
+ end
43
+
44
+ def bytesize(str)
45
+ return str.bytesize
46
+ end
47
+
48
+ else
49
+
50
+ def default_encoding
51
+ return nil
52
+ end
53
+
54
+ def add_encoding(obj)
55
+ return obj
56
+ end
57
+
58
+ def to_binary(str)
59
+ return str
60
+ end
61
+
62
+ def bytesize(str)
63
+ return str.length
64
+ end
65
+ end
66
+ end
67
+
68
+ # Wrapper of UnsafeIndex. Boundary checking of pos/len and some methods are added.
69
+ class Index
70
+ extend(Forwardable)
71
+ extend(Util)
72
+ include(Util)
73
+ include(Enumerable)
74
+
75
+ class << self
76
+ alias open new
77
+ end
78
+
79
+ def initialize(arg, encoding = nil)
80
+ if arg.is_a?(UnsafeIndex)
81
+ @unsafe = arg
82
+ else
83
+ @unsafe = UnsafeIndex.new()
84
+ if !@unsafe.open(arg)
85
+ raise(IOError, "failed to open #{arg}")
86
+ end
87
+ end
88
+ @encoding = encoding || default_encoding()
89
+ end
90
+
91
+ attr_reader(:encoding)
92
+ def_delegators(:@unsafe, :num_keys, :result_log, :error_log)
93
+ def_wrapper_methods(:longest_prefix, :include, :search_prefixes, :search_expansions)
94
+ alias common_prefix_search search_prefixes
95
+ alias predictive_search search_expansions
96
+ alias include? include
97
+ alias size num_keys
98
+
99
+ def inspect()
100
+ return "\#<%p:0x%x>" % [self.class, self.object_id]
101
+ end
102
+
103
+ def to_a()
104
+ return search_expansions("")
105
+ end
106
+
107
+ def each(&block)
108
+ to_a().each(&block)
109
+ end
110
+
111
+ def scan(str, &block)
112
+ bstr = to_binary(str)
113
+ result = []
114
+ pos = 0
115
+ while pos < bytesize(str)
116
+ plen = longest_prefix(str, pos)
117
+ if plen >= 0
118
+ args = [add_encoding(bstr[pos, plen]), pos]
119
+ block ? yield(*args) : result.push(args)
120
+ end
121
+ pos += plen > 0 ? plen : 1
122
+ end
123
+ return block ? str : result
124
+ end
125
+
126
+ def gsub(str, &block)
127
+ bstr = to_binary(str)
128
+ result = add_encoding("")
129
+ prev_pos = 0
130
+ scan(str) do |match, pos|
131
+ result << add_encoding(bstr[prev_pos...pos])
132
+ result << yield(match, pos)
133
+ prev_pos = pos + bytesize(match)
134
+ end
135
+ result << add_encoding(bstr[prev_pos..-1])
136
+ return result
137
+ end
138
+ end
139
+
140
+ # Wrapper of UnsafeMap. Boundary checking of pos/len and some methods are added.
141
+ class Map
142
+ extend(Forwardable)
143
+ extend(Util)
144
+ include(Util)
145
+ include(Enumerable)
146
+
147
+ class << self
148
+ alias open new
149
+ end
150
+
151
+ def initialize(file_pefix, encoding = nil)
152
+ @unsafe = UnsafeMap.new()
153
+ if !@unsafe.open(file_pefix)
154
+ raise(IOError, "failed to open #{file_pefix}.key, #{file_pefix}.val or #{file_pefix}.map")
155
+ end
156
+ @encoding = encoding || default_encoding()
157
+ @key_index = Index.new(@unsafe.key_index, @encoding)
158
+ @value_index = Index.new(@unsafe.value_index, @encoding)
159
+ end
160
+
161
+ attr_reader(:key_index, :value_index, :encoding)
162
+ def_wrapper_methods(:has_key, :lookup)
163
+ alias has_key? has_key
164
+
165
+ def inspect()
166
+ return "\#<%p:0x%x>" % [self.class, self.object_id]
167
+ end
168
+
169
+ def [](str, pos = 0, len = -1)
170
+ return has_key(str, pos, len) ? lookup(str, pos, len) : nil
171
+ end
172
+
173
+ def size
174
+ return self.keys.sizse
175
+ end
176
+
177
+ def keys
178
+ return @key_index.search_expansions("")
179
+ end
180
+
181
+ def values
182
+ return self.keys.map(){ |k| lookup(k) }
183
+ end
184
+
185
+ def each_key(&block)
186
+ return self.keys.each(&block)
187
+ end
188
+
189
+ def each_value(&block)
190
+ return self.values.each(&block)
191
+ end
192
+
193
+ def each(&block)
194
+ each_key(){ |k| yield([k, lookup(k)]) }
195
+ end
196
+
197
+ def each_pair(&block)
198
+ each_key(){ |k| yield(k, lookup(k)) }
199
+ end
200
+
201
+ def scan(str, &block)
202
+ result = []
203
+ @key_index.scan(str) do |key, pos|
204
+ args = [key, pos, lookup(key)]
205
+ block ? yield(*args) : result.push(args)
206
+ end
207
+ return block ? str : result
208
+ end
209
+ end
210
+ end
@@ -0,0 +1,3 @@
1
+ module Tx
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,4 @@
1
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
+ require 'ztx'
3
+
4
+ require 'minitest/autorun'
@@ -0,0 +1,11 @@
1
+ require 'test_helper'
2
+
3
+ class ZtxTest < Minitest::Test
4
+ def test_that_it_has_a_version_number
5
+ refute_nil ::Tx::VERSION
6
+ end
7
+
8
+ def test_it_does_something_useful
9
+ assert false
10
+ end
11
+ end
metadata ADDED
@@ -0,0 +1,118 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ztx
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Vy Dao Nguyen
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-10-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.12'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.12'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '5.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '5.0'
55
+ description: Fork of old Tx gem, a library for a compact trie data structure, compatible
56
+ with Ruby 2.2/2.3.
57
+ email:
58
+ - vydn@zigexn.vn
59
+ executables: []
60
+ extensions:
61
+ - ext/extconf.rb
62
+ extra_rdoc_files:
63
+ - doc_src/README.txt
64
+ files:
65
+ - Gemfile
66
+ - README.md
67
+ - Rakefile
68
+ - doc_src/README.txt
69
+ - ext/Makefile
70
+ - ext/depend
71
+ - ext/extconf.rb
72
+ - ext/ssv.cpp
73
+ - ext/ssv.hpp
74
+ - ext/swig.patch
75
+ - ext/tx.cpp
76
+ - ext/tx.hpp
77
+ - ext/tx_swig.cpp
78
+ - ext/tx_swig.h
79
+ - ext/tx_swig.i
80
+ - ext/tx_swig_wrap.cxx
81
+ - lib/i386-msvcrt/tx_core.so
82
+ - lib/ztx.rb
83
+ - lib/ztx/version.rb
84
+ - test/test_helper.rb
85
+ - test/ztx_test.rb
86
+ homepage: https://github.com/vydao/ztx
87
+ licenses:
88
+ - MIT
89
+ metadata: {}
90
+ post_install_message:
91
+ rdoc_options:
92
+ - "--quiet"
93
+ - "--title"
94
+ - tx-ruby Reference
95
+ - "--main"
96
+ - doc_src/README.txt
97
+ require_paths:
98
+ - lib
99
+ - lib/i386-msvcrt
100
+ required_ruby_version: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ required_rubygems_version: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ requirements: []
111
+ rubyforge_project:
112
+ rubygems_version: 2.6.7
113
+ signing_key:
114
+ specification_version: 4
115
+ summary: Fork of old Tx gem, a library for a compact trie data structure, compatible
116
+ with Ruby 2.2/2.3.
117
+ test_files: []
118
+ has_rdoc: true