oj 3.7.4 → 3.13.23
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +1360 -0
- data/README.md +31 -8
- data/RELEASE_NOTES.md +61 -0
- data/ext/oj/buf.h +53 -72
- data/ext/oj/cache.c +326 -0
- data/ext/oj/cache.h +21 -0
- data/ext/oj/cache8.c +61 -64
- data/ext/oj/cache8.h +12 -39
- data/ext/oj/circarray.c +37 -43
- data/ext/oj/circarray.h +16 -17
- data/ext/oj/code.c +165 -179
- data/ext/oj/code.h +27 -29
- data/ext/oj/compat.c +174 -194
- data/ext/oj/custom.c +790 -866
- data/ext/oj/debug.c +132 -0
- data/ext/oj/dump.c +848 -863
- data/ext/oj/dump.h +81 -67
- data/ext/oj/dump_compat.c +85 -123
- data/ext/oj/dump_leaf.c +100 -188
- data/ext/oj/dump_object.c +527 -656
- data/ext/oj/dump_strict.c +315 -338
- data/ext/oj/encode.h +7 -34
- data/ext/oj/encoder.c +43 -0
- data/ext/oj/err.c +40 -29
- data/ext/oj/err.h +48 -48
- data/ext/oj/extconf.rb +17 -4
- data/ext/oj/fast.c +1073 -1088
- data/ext/oj/intern.c +298 -0
- data/ext/oj/intern.h +26 -0
- data/ext/oj/mimic_json.c +469 -436
- data/ext/oj/object.c +532 -599
- data/ext/oj/odd.c +154 -138
- data/ext/oj/odd.h +37 -38
- data/ext/oj/oj.c +1333 -986
- data/ext/oj/oj.h +336 -316
- data/ext/oj/parse.c +1002 -846
- data/ext/oj/parse.h +92 -87
- data/ext/oj/parser.c +1587 -0
- data/ext/oj/parser.h +102 -0
- data/ext/oj/rails.c +888 -878
- data/ext/oj/rails.h +11 -14
- data/ext/oj/reader.c +141 -147
- data/ext/oj/reader.h +73 -89
- data/ext/oj/resolve.c +41 -62
- data/ext/oj/resolve.h +7 -9
- data/ext/oj/rxclass.c +71 -75
- data/ext/oj/rxclass.h +18 -19
- data/ext/oj/saj.c +443 -486
- data/ext/oj/saj2.c +596 -0
- data/ext/oj/saj2.h +23 -0
- data/ext/oj/scp.c +88 -113
- data/ext/oj/sparse.c +787 -709
- data/ext/oj/stream_writer.c +133 -159
- data/ext/oj/strict.c +127 -118
- data/ext/oj/string_writer.c +230 -249
- data/ext/oj/trace.c +34 -41
- data/ext/oj/trace.h +19 -19
- data/ext/oj/usual.c +1207 -0
- data/ext/oj/usual.h +68 -0
- data/ext/oj/util.c +136 -0
- data/ext/oj/util.h +20 -0
- data/ext/oj/val_stack.c +60 -68
- data/ext/oj/val_stack.h +91 -129
- data/ext/oj/validate.c +46 -0
- data/ext/oj/wab.c +342 -353
- data/lib/oj/bag.rb +1 -0
- data/lib/oj/easy_hash.rb +5 -4
- data/lib/oj/error.rb +1 -1
- data/lib/oj/json.rb +1 -1
- data/lib/oj/mimic.rb +48 -14
- data/lib/oj/saj.rb +20 -6
- data/lib/oj/state.rb +9 -8
- data/lib/oj/version.rb +2 -2
- data/lib/oj.rb +0 -8
- data/pages/Compatibility.md +1 -1
- data/pages/JsonGem.md +15 -0
- data/pages/Modes.md +53 -46
- data/pages/Options.md +78 -11
- data/pages/Parser.md +309 -0
- data/pages/Rails.md +73 -22
- data/pages/Security.md +1 -1
- data/test/activerecord/result_test.rb +7 -2
- data/test/activesupport5/abstract_unit.rb +45 -0
- data/test/activesupport5/decoding_test.rb +68 -60
- data/test/activesupport5/encoding_test.rb +111 -96
- data/test/activesupport5/encoding_test_cases.rb +33 -25
- data/test/activesupport5/test_helper.rb +43 -21
- data/test/activesupport5/time_zone_test_helpers.rb +18 -3
- data/test/activesupport6/abstract_unit.rb +44 -0
- data/test/activesupport6/decoding_test.rb +133 -0
- data/test/activesupport6/encoding_test.rb +507 -0
- data/test/activesupport6/encoding_test_cases.rb +98 -0
- data/test/activesupport6/test_common.rb +17 -0
- data/test/activesupport6/test_helper.rb +163 -0
- data/test/activesupport6/time_zone_test_helpers.rb +39 -0
- data/test/activesupport7/abstract_unit.rb +49 -0
- data/test/activesupport7/decoding_test.rb +125 -0
- data/test/activesupport7/encoding_test.rb +486 -0
- data/test/activesupport7/encoding_test_cases.rb +104 -0
- data/test/activesupport7/time_zone_test_helpers.rb +47 -0
- data/test/bar.rb +6 -12
- data/test/baz.rb +16 -0
- data/test/bug.rb +16 -0
- data/test/foo.rb +69 -75
- data/test/helper.rb +16 -0
- data/test/json_gem/json_common_interface_test.rb +8 -3
- data/test/json_gem/json_generator_test.rb +21 -8
- data/test/json_gem/json_parser_test.rb +8 -1
- data/test/json_gem/test_helper.rb +12 -0
- data/test/mem.rb +33 -0
- data/test/perf.rb +1 -1
- data/test/perf_dump.rb +50 -0
- data/test/perf_once.rb +58 -0
- data/test/perf_parser.rb +189 -0
- data/test/perf_scp.rb +11 -10
- data/test/perf_strict.rb +17 -23
- data/test/prec.rb +23 -0
- data/test/sample_json.rb +1 -1
- data/test/test_compat.rb +46 -10
- data/test/test_custom.rb +145 -7
- data/test/test_fast.rb +62 -2
- data/test/test_file.rb +23 -7
- data/test/test_gc.rb +11 -0
- data/test/test_generate.rb +21 -0
- data/test/test_hash.rb +11 -1
- data/test/test_integer_range.rb +1 -2
- data/test/test_object.rb +43 -12
- data/test/test_parser.rb +11 -0
- data/test/test_parser_debug.rb +27 -0
- data/test/test_parser_saj.rb +335 -0
- data/test/test_parser_usual.rb +217 -0
- data/test/test_rails.rb +35 -0
- data/test/test_saj.rb +1 -1
- data/test/test_scp.rb +3 -5
- data/test/test_strict.rb +26 -1
- data/test/test_various.rb +86 -65
- data/test/test_wab.rb +2 -0
- data/test/test_writer.rb +19 -2
- data/test/tests.rb +10 -1
- data/test/tests_mimic.rb +9 -0
- data/test/tests_mimic_addition.rb +9 -0
- data/test/zoo.rb +13 -0
- metadata +63 -110
- data/ext/oj/hash.c +0 -163
- data/ext/oj/hash.h +0 -46
- data/ext/oj/hash_test.c +0 -512
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: oj
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 3.
|
|
4
|
+
version: 3.13.23
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Peter Ohler
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2022-11-06 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rake-compiler
|
|
@@ -58,20 +58,6 @@ dependencies:
|
|
|
58
58
|
- - "~>"
|
|
59
59
|
- !ruby/object:Gem::Version
|
|
60
60
|
version: '3.0'
|
|
61
|
-
- !ruby/object:Gem::Dependency
|
|
62
|
-
name: wwtd
|
|
63
|
-
requirement: !ruby/object:Gem::Requirement
|
|
64
|
-
requirements:
|
|
65
|
-
- - "~>"
|
|
66
|
-
- !ruby/object:Gem::Version
|
|
67
|
-
version: '0'
|
|
68
|
-
type: :development
|
|
69
|
-
prerelease: false
|
|
70
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
71
|
-
requirements:
|
|
72
|
-
- - "~>"
|
|
73
|
-
- !ruby/object:Gem::Version
|
|
74
|
-
version: '0'
|
|
75
61
|
description: The fastest JSON parser and object serializer.
|
|
76
62
|
email: peter@ohler.com
|
|
77
63
|
executables: []
|
|
@@ -79,20 +65,28 @@ extensions:
|
|
|
79
65
|
- ext/oj/extconf.rb
|
|
80
66
|
extra_rdoc_files:
|
|
81
67
|
- README.md
|
|
82
|
-
-
|
|
83
|
-
-
|
|
84
|
-
-
|
|
85
|
-
- pages/WAB.md
|
|
86
|
-
- pages/Custom.md
|
|
68
|
+
- LICENSE
|
|
69
|
+
- CHANGELOG.md
|
|
70
|
+
- RELEASE_NOTES.md
|
|
87
71
|
- pages/Advanced.md
|
|
88
|
-
- pages/Options.md
|
|
89
72
|
- pages/Compatibility.md
|
|
73
|
+
- pages/Custom.md
|
|
74
|
+
- pages/Encoding.md
|
|
75
|
+
- pages/JsonGem.md
|
|
90
76
|
- pages/Modes.md
|
|
77
|
+
- pages/Options.md
|
|
78
|
+
- pages/Parser.md
|
|
79
|
+
- pages/Rails.md
|
|
91
80
|
- pages/Security.md
|
|
81
|
+
- pages/WAB.md
|
|
92
82
|
files:
|
|
83
|
+
- CHANGELOG.md
|
|
93
84
|
- LICENSE
|
|
94
85
|
- README.md
|
|
86
|
+
- RELEASE_NOTES.md
|
|
95
87
|
- ext/oj/buf.h
|
|
88
|
+
- ext/oj/cache.c
|
|
89
|
+
- ext/oj/cache.h
|
|
96
90
|
- ext/oj/cache8.c
|
|
97
91
|
- ext/oj/cache8.h
|
|
98
92
|
- ext/oj/circarray.c
|
|
@@ -101,6 +95,7 @@ files:
|
|
|
101
95
|
- ext/oj/code.h
|
|
102
96
|
- ext/oj/compat.c
|
|
103
97
|
- ext/oj/custom.c
|
|
98
|
+
- ext/oj/debug.c
|
|
104
99
|
- ext/oj/dump.c
|
|
105
100
|
- ext/oj/dump.h
|
|
106
101
|
- ext/oj/dump_compat.c
|
|
@@ -108,13 +103,13 @@ files:
|
|
|
108
103
|
- ext/oj/dump_object.c
|
|
109
104
|
- ext/oj/dump_strict.c
|
|
110
105
|
- ext/oj/encode.h
|
|
106
|
+
- ext/oj/encoder.c
|
|
111
107
|
- ext/oj/err.c
|
|
112
108
|
- ext/oj/err.h
|
|
113
109
|
- ext/oj/extconf.rb
|
|
114
110
|
- ext/oj/fast.c
|
|
115
|
-
- ext/oj/
|
|
116
|
-
- ext/oj/
|
|
117
|
-
- ext/oj/hash_test.c
|
|
111
|
+
- ext/oj/intern.c
|
|
112
|
+
- ext/oj/intern.h
|
|
118
113
|
- ext/oj/mimic_json.c
|
|
119
114
|
- ext/oj/object.c
|
|
120
115
|
- ext/oj/odd.c
|
|
@@ -123,6 +118,8 @@ files:
|
|
|
123
118
|
- ext/oj/oj.h
|
|
124
119
|
- ext/oj/parse.c
|
|
125
120
|
- ext/oj/parse.h
|
|
121
|
+
- ext/oj/parser.c
|
|
122
|
+
- ext/oj/parser.h
|
|
126
123
|
- ext/oj/rails.c
|
|
127
124
|
- ext/oj/rails.h
|
|
128
125
|
- ext/oj/reader.c
|
|
@@ -132,6 +129,8 @@ files:
|
|
|
132
129
|
- ext/oj/rxclass.c
|
|
133
130
|
- ext/oj/rxclass.h
|
|
134
131
|
- ext/oj/saj.c
|
|
132
|
+
- ext/oj/saj2.c
|
|
133
|
+
- ext/oj/saj2.h
|
|
135
134
|
- ext/oj/scp.c
|
|
136
135
|
- ext/oj/sparse.c
|
|
137
136
|
- ext/oj/stream_writer.c
|
|
@@ -139,8 +138,13 @@ files:
|
|
|
139
138
|
- ext/oj/string_writer.c
|
|
140
139
|
- ext/oj/trace.c
|
|
141
140
|
- ext/oj/trace.h
|
|
141
|
+
- ext/oj/usual.c
|
|
142
|
+
- ext/oj/usual.h
|
|
143
|
+
- ext/oj/util.c
|
|
144
|
+
- ext/oj/util.h
|
|
142
145
|
- ext/oj/val_stack.c
|
|
143
146
|
- ext/oj/val_stack.h
|
|
147
|
+
- ext/oj/validate.c
|
|
144
148
|
- ext/oj/wab.c
|
|
145
149
|
- lib/oj.rb
|
|
146
150
|
- lib/oj/active_support_helper.rb
|
|
@@ -160,6 +164,7 @@ files:
|
|
|
160
164
|
- pages/JsonGem.md
|
|
161
165
|
- pages/Modes.md
|
|
162
166
|
- pages/Options.md
|
|
167
|
+
- pages/Parser.md
|
|
163
168
|
- pages/Rails.md
|
|
164
169
|
- pages/Security.md
|
|
165
170
|
- pages/WAB.md
|
|
@@ -170,12 +175,27 @@ files:
|
|
|
170
175
|
- test/activesupport4/decoding_test.rb
|
|
171
176
|
- test/activesupport4/encoding_test.rb
|
|
172
177
|
- test/activesupport4/test_helper.rb
|
|
178
|
+
- test/activesupport5/abstract_unit.rb
|
|
173
179
|
- test/activesupport5/decoding_test.rb
|
|
174
180
|
- test/activesupport5/encoding_test.rb
|
|
175
181
|
- test/activesupport5/encoding_test_cases.rb
|
|
176
182
|
- test/activesupport5/test_helper.rb
|
|
177
183
|
- test/activesupport5/time_zone_test_helpers.rb
|
|
184
|
+
- test/activesupport6/abstract_unit.rb
|
|
185
|
+
- test/activesupport6/decoding_test.rb
|
|
186
|
+
- test/activesupport6/encoding_test.rb
|
|
187
|
+
- test/activesupport6/encoding_test_cases.rb
|
|
188
|
+
- test/activesupport6/test_common.rb
|
|
189
|
+
- test/activesupport6/test_helper.rb
|
|
190
|
+
- test/activesupport6/time_zone_test_helpers.rb
|
|
191
|
+
- test/activesupport7/abstract_unit.rb
|
|
192
|
+
- test/activesupport7/decoding_test.rb
|
|
193
|
+
- test/activesupport7/encoding_test.rb
|
|
194
|
+
- test/activesupport7/encoding_test_cases.rb
|
|
195
|
+
- test/activesupport7/time_zone_test_helpers.rb
|
|
178
196
|
- test/bar.rb
|
|
197
|
+
- test/baz.rb
|
|
198
|
+
- test/bug.rb
|
|
179
199
|
- test/files.rb
|
|
180
200
|
- test/foo.rb
|
|
181
201
|
- test/helper.rb
|
|
@@ -198,16 +218,21 @@ files:
|
|
|
198
218
|
- test/json_gem/json_parser_test.rb
|
|
199
219
|
- test/json_gem/json_string_matching_test.rb
|
|
200
220
|
- test/json_gem/test_helper.rb
|
|
221
|
+
- test/mem.rb
|
|
201
222
|
- test/perf.rb
|
|
202
223
|
- test/perf_compat.rb
|
|
224
|
+
- test/perf_dump.rb
|
|
203
225
|
- test/perf_fast.rb
|
|
204
226
|
- test/perf_file.rb
|
|
205
227
|
- test/perf_object.rb
|
|
228
|
+
- test/perf_once.rb
|
|
229
|
+
- test/perf_parser.rb
|
|
206
230
|
- test/perf_saj.rb
|
|
207
231
|
- test/perf_scp.rb
|
|
208
232
|
- test/perf_simple.rb
|
|
209
233
|
- test/perf_strict.rb
|
|
210
234
|
- test/perf_wab.rb
|
|
235
|
+
- test/prec.rb
|
|
211
236
|
- test/sample.rb
|
|
212
237
|
- test/sample/change.rb
|
|
213
238
|
- test/sample/dir.rb
|
|
@@ -228,10 +253,16 @@ files:
|
|
|
228
253
|
- test/test_fast.rb
|
|
229
254
|
- test/test_file.rb
|
|
230
255
|
- test/test_gc.rb
|
|
256
|
+
- test/test_generate.rb
|
|
231
257
|
- test/test_hash.rb
|
|
232
258
|
- test/test_integer_range.rb
|
|
233
259
|
- test/test_null.rb
|
|
234
260
|
- test/test_object.rb
|
|
261
|
+
- test/test_parser.rb
|
|
262
|
+
- test/test_parser_debug.rb
|
|
263
|
+
- test/test_parser_saj.rb
|
|
264
|
+
- test/test_parser_usual.rb
|
|
265
|
+
- test/test_rails.rb
|
|
235
266
|
- test/test_saj.rb
|
|
236
267
|
- test/test_scp.rb
|
|
237
268
|
- test/test_strict.rb
|
|
@@ -241,6 +272,7 @@ files:
|
|
|
241
272
|
- test/tests.rb
|
|
242
273
|
- test/tests_mimic.rb
|
|
243
274
|
- test/tests_mimic_addition.rb
|
|
275
|
+
- test/zoo.rb
|
|
244
276
|
homepage: http://www.ohler.com/oj
|
|
245
277
|
licenses:
|
|
246
278
|
- MIT
|
|
@@ -251,7 +283,7 @@ metadata:
|
|
|
251
283
|
homepage_uri: http://www.ohler.com/oj/
|
|
252
284
|
source_code_uri: https://github.com/ohler55/oj
|
|
253
285
|
wiki_uri: https://github.com/ohler55/oj/wiki
|
|
254
|
-
post_install_message:
|
|
286
|
+
post_install_message:
|
|
255
287
|
rdoc_options:
|
|
256
288
|
- "--title"
|
|
257
289
|
- Oj
|
|
@@ -263,94 +295,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
263
295
|
requirements:
|
|
264
296
|
- - ">="
|
|
265
297
|
- !ruby/object:Gem::Version
|
|
266
|
-
version: '2.
|
|
298
|
+
version: '2.4'
|
|
267
299
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
268
300
|
requirements:
|
|
269
301
|
- - ">="
|
|
270
302
|
- !ruby/object:Gem::Version
|
|
271
303
|
version: '0'
|
|
272
304
|
requirements: []
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
signing_key:
|
|
305
|
+
rubygems_version: 3.3.3
|
|
306
|
+
signing_key:
|
|
276
307
|
specification_version: 4
|
|
277
308
|
summary: A fast JSON parser and serializer.
|
|
278
|
-
test_files:
|
|
279
|
-
- test/foo.rb
|
|
280
|
-
- test/test_integer_range.rb
|
|
281
|
-
- test/test_strict.rb
|
|
282
|
-
- test/perf_strict.rb
|
|
283
|
-
- test/tests.rb
|
|
284
|
-
- test/perf_saj.rb
|
|
285
|
-
- test/test_compat.rb
|
|
286
|
-
- test/helper.rb
|
|
287
|
-
- test/perf_file.rb
|
|
288
|
-
- test/test_scp.rb
|
|
289
|
-
- test/perf_compat.rb
|
|
290
|
-
- test/json_gem/json_common_interface_test.rb
|
|
291
|
-
- test/json_gem/json_addition_test.rb
|
|
292
|
-
- test/json_gem/json_fixtures_test.rb
|
|
293
|
-
- test/json_gem/json_ext_parser_test.rb
|
|
294
|
-
- test/json_gem/json_string_matching_test.rb
|
|
295
|
-
- test/json_gem/json_generic_object_test.rb
|
|
296
|
-
- test/json_gem/json_generator_test.rb
|
|
297
|
-
- test/json_gem/test_helper.rb
|
|
298
|
-
- test/json_gem/json_encoding_test.rb
|
|
299
|
-
- test/json_gem/json_parser_test.rb
|
|
300
|
-
- test/perf_wab.rb
|
|
301
|
-
- test/test_file.rb
|
|
302
|
-
- test/test_object.rb
|
|
303
|
-
- test/sample.rb
|
|
304
|
-
- test/perf_object.rb
|
|
305
|
-
- test/test_hash.rb
|
|
306
|
-
- test/test_custom.rb
|
|
307
|
-
- test/bar.rb
|
|
308
|
-
- test/activesupport4/encoding_test.rb
|
|
309
|
-
- test/activesupport4/test_helper.rb
|
|
310
|
-
- test/activesupport4/decoding_test.rb
|
|
311
|
-
- test/sample_json.rb
|
|
312
|
-
- test/activesupport5/encoding_test_cases.rb
|
|
313
|
-
- test/activesupport5/encoding_test.rb
|
|
314
|
-
- test/activesupport5/time_zone_test_helpers.rb
|
|
315
|
-
- test/activesupport5/test_helper.rb
|
|
316
|
-
- test/activesupport5/decoding_test.rb
|
|
317
|
-
- test/test_saj.rb
|
|
318
|
-
- test/perf_scp.rb
|
|
319
|
-
- test/test_wab.rb
|
|
320
|
-
- test/test_null.rb
|
|
321
|
-
- test/_test_active.rb
|
|
322
|
-
- test/_test_mimic_rails.rb
|
|
323
|
-
- test/test_fast.rb
|
|
324
|
-
- test/perf_fast.rb
|
|
325
|
-
- test/sample/change.rb
|
|
326
|
-
- test/sample/text.rb
|
|
327
|
-
- test/sample/doc.rb
|
|
328
|
-
- test/sample/shape.rb
|
|
329
|
-
- test/sample/layer.rb
|
|
330
|
-
- test/sample/group.rb
|
|
331
|
-
- test/sample/file.rb
|
|
332
|
-
- test/sample/rect.rb
|
|
333
|
-
- test/sample/hasprops.rb
|
|
334
|
-
- test/sample/line.rb
|
|
335
|
-
- test/sample/dir.rb
|
|
336
|
-
- test/sample/oval.rb
|
|
337
|
-
- test/tests_mimic.rb
|
|
338
|
-
- test/perf_simple.rb
|
|
339
|
-
- test/activerecord/result_test.rb
|
|
340
|
-
- test/_test_active_mimic.rb
|
|
341
|
-
- test/tests_mimic_addition.rb
|
|
342
|
-
- test/test_writer.rb
|
|
343
|
-
- test/perf.rb
|
|
344
|
-
- test/isolated/test_mimic_define.rb
|
|
345
|
-
- test/isolated/test_mimic_after.rb
|
|
346
|
-
- test/isolated/test_mimic_rails_after.rb
|
|
347
|
-
- test/isolated/test_mimic_before.rb
|
|
348
|
-
- test/isolated/test_mimic_rails_before.rb
|
|
349
|
-
- test/isolated/test_mimic_redefine.rb
|
|
350
|
-
- test/isolated/shared.rb
|
|
351
|
-
- test/isolated/test_mimic_alone.rb
|
|
352
|
-
- test/isolated/test_mimic_as_json.rb
|
|
353
|
-
- test/test_debian.rb
|
|
354
|
-
- test/test_gc.rb
|
|
355
|
-
- test/files.rb
|
|
356
|
-
- test/test_various.rb
|
|
309
|
+
test_files: []
|
data/ext/oj/hash.c
DELETED
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
/* hash.c
|
|
2
|
-
* Copyright (c) 2011, Peter Ohler
|
|
3
|
-
* All rights reserved.
|
|
4
|
-
*
|
|
5
|
-
* Redistribution and use in source and binary forms, with or without
|
|
6
|
-
* modification, are permitted provided that the following conditions are met:
|
|
7
|
-
*
|
|
8
|
-
* - Redistributions of source code must retain the above copyright notice, this
|
|
9
|
-
* list of conditions and the following disclaimer.
|
|
10
|
-
*
|
|
11
|
-
* - Redistributions in binary form must reproduce the above copyright notice,
|
|
12
|
-
* this list of conditions and the following disclaimer in the documentation
|
|
13
|
-
* and/or other materials provided with the distribution.
|
|
14
|
-
*
|
|
15
|
-
* - Neither the name of Peter Ohler nor the names of its contributors may be
|
|
16
|
-
* used to endorse or promote products derived from this software without
|
|
17
|
-
* specific prior written permission.
|
|
18
|
-
*
|
|
19
|
-
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
20
|
-
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
21
|
-
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
22
|
-
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
23
|
-
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
24
|
-
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
25
|
-
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
26
|
-
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
27
|
-
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
28
|
-
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
29
|
-
*/
|
|
30
|
-
|
|
31
|
-
#include "hash.h"
|
|
32
|
-
#include <stdint.h>
|
|
33
|
-
|
|
34
|
-
#define HASH_MASK 0x000003FF
|
|
35
|
-
#define HASH_SLOT_CNT 1024
|
|
36
|
-
|
|
37
|
-
typedef struct _KeyVal {
|
|
38
|
-
struct _KeyVal *next;
|
|
39
|
-
const char *key;
|
|
40
|
-
size_t len;
|
|
41
|
-
VALUE val;
|
|
42
|
-
} *KeyVal;
|
|
43
|
-
|
|
44
|
-
struct _Hash {
|
|
45
|
-
struct _KeyVal slots[HASH_SLOT_CNT];
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
struct _Hash class_hash;
|
|
49
|
-
struct _Hash intern_hash;
|
|
50
|
-
|
|
51
|
-
// almost the Murmur hash algorithm
|
|
52
|
-
#define M 0x5bd1e995
|
|
53
|
-
#define C1 0xCC9E2D51
|
|
54
|
-
#define C2 0x1B873593
|
|
55
|
-
#define N 0xE6546B64
|
|
56
|
-
|
|
57
|
-
static uint32_t
|
|
58
|
-
hash_calc(const uint8_t *key, size_t len) {
|
|
59
|
-
const uint8_t *end = key + len;
|
|
60
|
-
const uint8_t *endless = key + (len / 4 * 4);
|
|
61
|
-
uint32_t h = (uint32_t)len;
|
|
62
|
-
uint32_t k;
|
|
63
|
-
|
|
64
|
-
while (key < endless) {
|
|
65
|
-
k = (uint32_t)*key++;
|
|
66
|
-
k |= (uint32_t)*key++ << 8;
|
|
67
|
-
k |= (uint32_t)*key++ << 16;
|
|
68
|
-
k |= (uint32_t)*key++ << 24;
|
|
69
|
-
|
|
70
|
-
k *= M;
|
|
71
|
-
k ^= k >> 24;
|
|
72
|
-
h *= M;
|
|
73
|
-
h ^= k * M;
|
|
74
|
-
}
|
|
75
|
-
if (1 < end - key) {
|
|
76
|
-
uint16_t k16 = (uint16_t)*key++;
|
|
77
|
-
|
|
78
|
-
k16 |= (uint16_t)*key++ << 8;
|
|
79
|
-
h ^= k16 << 8;
|
|
80
|
-
}
|
|
81
|
-
if (key < end) {
|
|
82
|
-
h ^= *key;
|
|
83
|
-
}
|
|
84
|
-
h *= M;
|
|
85
|
-
h ^= h >> 13;
|
|
86
|
-
h *= M;
|
|
87
|
-
h ^= h >> 15;
|
|
88
|
-
|
|
89
|
-
return h;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
void
|
|
93
|
-
oj_hash_init() {
|
|
94
|
-
memset(class_hash.slots, 0, sizeof(class_hash.slots));
|
|
95
|
-
memset(intern_hash.slots, 0, sizeof(intern_hash.slots));
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
// if slotp is 0 then just lookup
|
|
99
|
-
static VALUE
|
|
100
|
-
hash_get(Hash hash, const char *key, size_t len, VALUE **slotp, VALUE def_value) {
|
|
101
|
-
uint32_t h = hash_calc((const uint8_t*)key, len) & HASH_MASK;
|
|
102
|
-
KeyVal bucket = hash->slots + h;
|
|
103
|
-
|
|
104
|
-
if (0 != bucket->key) {
|
|
105
|
-
KeyVal b;
|
|
106
|
-
|
|
107
|
-
for (b = bucket; 0 != b; b = b->next) {
|
|
108
|
-
if (len == b->len && 0 == strncmp(b->key, key, len)) {
|
|
109
|
-
*slotp = &b->val;
|
|
110
|
-
return b->val;
|
|
111
|
-
}
|
|
112
|
-
bucket = b;
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
if (0 != slotp) {
|
|
116
|
-
if (0 != bucket->key) {
|
|
117
|
-
KeyVal b = ALLOC(struct _KeyVal);
|
|
118
|
-
|
|
119
|
-
b->next = 0;
|
|
120
|
-
bucket->next = b;
|
|
121
|
-
bucket = b;
|
|
122
|
-
}
|
|
123
|
-
bucket->key = oj_strndup(key, len);
|
|
124
|
-
bucket->len = len;
|
|
125
|
-
bucket->val = def_value;
|
|
126
|
-
*slotp = &bucket->val;
|
|
127
|
-
}
|
|
128
|
-
return def_value;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
void
|
|
132
|
-
oj_hash_print() {
|
|
133
|
-
int i;
|
|
134
|
-
KeyVal b;
|
|
135
|
-
|
|
136
|
-
for (i = 0; i < HASH_SLOT_CNT; i++) {
|
|
137
|
-
printf("%4d:", i);
|
|
138
|
-
for (b = class_hash.slots + i; 0 != b && 0 != b->key; b = b->next) {
|
|
139
|
-
printf(" %s", b->key);
|
|
140
|
-
}
|
|
141
|
-
printf("\n");
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
VALUE
|
|
146
|
-
oj_class_hash_get(const char *key, size_t len, VALUE **slotp) {
|
|
147
|
-
return hash_get(&class_hash, key, len, slotp, Qnil);
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
ID
|
|
151
|
-
oj_attr_hash_get(const char *key, size_t len, ID **slotp) {
|
|
152
|
-
return (ID)hash_get(&intern_hash, key, len, (VALUE**)slotp, 0);
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
char*
|
|
156
|
-
oj_strndup(const char *s, size_t len) {
|
|
157
|
-
char *d = ALLOC_N(char, len + 1);
|
|
158
|
-
|
|
159
|
-
memcpy(d, s, len);
|
|
160
|
-
d[len] = '\0';
|
|
161
|
-
|
|
162
|
-
return d;
|
|
163
|
-
}
|
data/ext/oj/hash.h
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
/* hash.h
|
|
2
|
-
* Copyright (c) 2011, Peter Ohler
|
|
3
|
-
* All rights reserved.
|
|
4
|
-
*
|
|
5
|
-
* Redistribution and use in source and binary forms, with or without
|
|
6
|
-
* modification, are permitted provided that the following conditions are met:
|
|
7
|
-
*
|
|
8
|
-
* - Redistributions of source code must retain the above copyright notice, this
|
|
9
|
-
* list of conditions and the following disclaimer.
|
|
10
|
-
*
|
|
11
|
-
* - Redistributions in binary form must reproduce the above copyright notice,
|
|
12
|
-
* this list of conditions and the following disclaimer in the documentation
|
|
13
|
-
* and/or other materials provided with the distribution.
|
|
14
|
-
*
|
|
15
|
-
* - Neither the name of Peter Ohler nor the names of its contributors may be
|
|
16
|
-
* used to endorse or promote products derived from this software without
|
|
17
|
-
* specific prior written permission.
|
|
18
|
-
*
|
|
19
|
-
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
20
|
-
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
21
|
-
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
22
|
-
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
23
|
-
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
24
|
-
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
25
|
-
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
26
|
-
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
27
|
-
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
28
|
-
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
29
|
-
*/
|
|
30
|
-
|
|
31
|
-
#ifndef __OJ_HASH_H__
|
|
32
|
-
#define __OJ_HASH_H__
|
|
33
|
-
|
|
34
|
-
#include "ruby.h"
|
|
35
|
-
|
|
36
|
-
typedef struct _Hash *Hash;
|
|
37
|
-
|
|
38
|
-
extern void oj_hash_init();
|
|
39
|
-
|
|
40
|
-
extern VALUE oj_class_hash_get(const char *key, size_t len, VALUE **slotp);
|
|
41
|
-
extern ID oj_attr_hash_get(const char *key, size_t len, ID **slotp);
|
|
42
|
-
|
|
43
|
-
extern void oj_hash_print();
|
|
44
|
-
extern char* oj_strndup(const char *s, size_t len);
|
|
45
|
-
|
|
46
|
-
#endif /* __OJ_HASH_H__ */
|