oj 3.12.0 → 3.12.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d5bf6799d9923c05b62b3bde88f052bb4373e9e0f15153f59e137b1023205a23
4
- data.tar.gz: 872155b5f53adb9a8dfbd20e54a9b1a329762c353b25b656eba071e85966acbd
3
+ metadata.gz: 7316e25014cf4268799f3f1e4a01a74fada832b1d68bf64d82cbeb42b2caf1dd
4
+ data.tar.gz: a02fdb9676efeacfec86475ff35afdb88cfef33e0c94188355cad69401ee2304
5
5
  SHA512:
6
- metadata.gz: 5426970bd5c337bb387de75baa6589a82e81549d54b77c4ee7557fc52767cc933dcafb88b30e995ddf0c265ccd3e0d572c173bd4246d7c3998894879808aa68e
7
- data.tar.gz: d6748332981816586e67aa48b80f0730b7bfe13b124e0afea70fae323b8908b49dede05b39f80586a017391dc7d257ad889a2f828cedfdd0ccd272835f69e2a6
6
+ metadata.gz: 8f83d20545998db46a7dd0bd0e2560f47198fbb0f192bc80f17ffbce046e38727e0c143e022f8d00ba2332e2cb0be27ddda294b6a96d6f4b091ec95e282d2f01
7
+ data.tar.gz: e62a125cf992f510296bbe6b3eeeaaadaa8ccd2891b764a290518f785b706a797af7fbd247ac360364cd610e67ad038488d6eefb55e4dc028a3b20540995e4df
data/ext/oj/compat.c CHANGED
@@ -26,22 +26,30 @@ static void hash_set_cstr(ParseInfo pi, Val kval, const char *str, size_t len, c
26
26
  volatile VALUE rstr = oj_cstr_to_value(str, len, (size_t)pi->options.cache_str);
27
27
 
28
28
  if (Qundef == rkey) {
29
- VALUE *slot;
30
-
31
- if (Yes == pi->options.sym_key) {
32
- if (Qnil == (rkey = oj_sym_hash_get(key, klen, &slot))) {
33
- rkey = rb_str_new(key, klen);
34
- rkey = oj_encode(rkey);
35
- rkey = rb_str_intern(rkey);
36
- *slot = rkey;
37
- rb_gc_register_address(slot);
29
+ if (Yes != pi->options.cache_keys) {
30
+ rkey = rb_str_new(key, klen);
31
+ rkey = oj_encode(rkey);
32
+ if (Yes == pi->options.sym_key) {
33
+ rkey = rb_str_intern(rkey);
38
34
  }
39
35
  } else {
40
- if (Qnil == (rkey = oj_str_hash_get(key, klen, &slot))) {
41
- rkey = rb_str_new(key, klen);
42
- rkey = oj_encode(rkey);
43
- *slot = rkey;
44
- rb_gc_register_address(slot);
36
+ VALUE *slot;
37
+
38
+ if (Yes == pi->options.sym_key) {
39
+ if (Qnil == (rkey = oj_sym_hash_get(key, klen, &slot))) {
40
+ rkey = rb_str_new(key, klen);
41
+ rkey = oj_encode(rkey);
42
+ rkey = rb_str_intern(rkey);
43
+ *slot = rkey;
44
+ rb_gc_register_address(slot);
45
+ }
46
+ } else {
47
+ if (Qnil == (rkey = oj_str_hash_get(key, klen, &slot))) {
48
+ rkey = rb_str_new(key, klen);
49
+ rkey = oj_encode(rkey);
50
+ *slot = rkey;
51
+ rb_gc_register_address(slot);
52
+ }
45
53
  }
46
54
  }
47
55
  }
data/ext/oj/hash.c CHANGED
@@ -5,8 +5,8 @@
5
5
 
6
6
  #include <stdint.h>
7
7
 
8
- #define HASH_MASK 0x000003FF
9
- #define HASH_SLOT_CNT 1024
8
+ #define HASH_SLOT_CNT ((uint32_t)8192)
9
+ #define HASH_MASK (HASH_SLOT_CNT - 1)
10
10
 
11
11
  typedef struct _keyVal {
12
12
  struct _keyVal *next;
@@ -104,8 +104,8 @@ static VALUE hash_get(Hash hash, const char *key, size_t len, VALUE **slotp, VAL
104
104
  }
105
105
 
106
106
  void oj_hash_print() {
107
- int i;
108
- KeyVal b;
107
+ uint32_t i;
108
+ KeyVal b;
109
109
 
110
110
  for (i = 0; i < HASH_SLOT_CNT; i++) {
111
111
  printf("%4d:", i);
@@ -116,6 +116,29 @@ void oj_hash_print() {
116
116
  }
117
117
  }
118
118
 
119
+ void oj_hash_sizes() {
120
+ uint32_t i;
121
+ KeyVal b;
122
+ int max = 0;
123
+ int min = 1000000;
124
+
125
+ for (i = 0; i < HASH_SLOT_CNT; i++) {
126
+ int cnt = 0;
127
+
128
+ for (b = str_hash.slots + i; 0 != b && 0 != b->key; b = b->next) {
129
+ cnt++;
130
+ }
131
+ // printf(" %4d\n", cnt);
132
+ if (max < cnt) {
133
+ max = cnt;
134
+ }
135
+ if (cnt < min) {
136
+ min = cnt;
137
+ }
138
+ }
139
+ printf("min: %d max: %d\n", min, max);
140
+ }
141
+
119
142
  VALUE
120
143
  oj_class_hash_get(const char *key, size_t len, VALUE **slotp) {
121
144
  return hash_get(&class_hash, key, len, slotp, Qnil);
@@ -131,8 +154,7 @@ oj_sym_hash_get(const char *key, size_t len, VALUE **slotp) {
131
154
  return hash_get(&sym_hash, key, len, slotp, Qnil);
132
155
  }
133
156
 
134
- ID
135
- oj_attr_hash_get(const char *key, size_t len, ID **slotp) {
157
+ ID oj_attr_hash_get(const char *key, size_t len, ID **slotp) {
136
158
  return (ID)hash_get(&intern_hash, key, len, (VALUE **)slotp, 0);
137
159
  }
138
160
 
data/ext/oj/oj.c CHANGED
@@ -1673,13 +1673,20 @@ extern VALUE oj_optimize_rails(VALUE self);
1673
1673
 
1674
1674
  /*
1675
1675
  extern void oj_hash_test();
1676
-
1677
1676
  static VALUE
1678
1677
  hash_test(VALUE self) {
1679
1678
  oj_hash_test();
1680
1679
  return Qnil;
1681
1680
  }
1682
1681
  */
1682
+ /*
1683
+ extern void oj_hash_sizes();
1684
+ static VALUE
1685
+ hash_test(VALUE self) {
1686
+ oj_hash_sizes();
1687
+ return Qnil;
1688
+ }
1689
+ */
1683
1690
 
1684
1691
  static VALUE protect_require(VALUE x) {
1685
1692
  rb_require("time");
data/ext/oj/wab.c CHANGED
@@ -293,7 +293,7 @@ void oj_dump_wab_val(VALUE obj, int depth, Out out) {
293
293
 
294
294
  ///// load functions /////
295
295
 
296
- static VALUE oj_hash_key(Val parent) {
296
+ static VALUE calc_hash_key(ParseInfo pi, Val parent) {
297
297
  volatile VALUE rkey = parent->key_val;
298
298
 
299
299
  if (Qundef != rkey) {
@@ -302,6 +302,13 @@ static VALUE oj_hash_key(Val parent) {
302
302
 
303
303
  return rkey;
304
304
  }
305
+ if (Yes != pi->options.cache_keys) {
306
+ rkey = rb_str_new(parent->key, parent->klen);
307
+ rkey = oj_encode(rkey);
308
+ rkey = rb_str_intern(rkey);
309
+
310
+ return rkey;
311
+ }
305
312
  VALUE *slot;
306
313
 
307
314
  if (Qnil == (rkey = oj_sym_hash_get(parent->key, parent->klen, &slot))) {
@@ -509,7 +516,7 @@ static VALUE start_hash(ParseInfo pi) {
509
516
  static void hash_set_cstr(ParseInfo pi, Val parent, const char *str, size_t len, const char *orig) {
510
517
  volatile VALUE rval = cstr_to_rstr(pi, str, len);
511
518
 
512
- rb_hash_aset(stack_peek(&pi->stack)->val, oj_hash_key(parent), rval);
519
+ rb_hash_aset(stack_peek(&pi->stack)->val, calc_hash_key(pi, parent), rval);
513
520
  if (Yes == pi->options.trace) {
514
521
  oj_trace_parse_call("set_string", pi, __FILE__, __LINE__, rval);
515
522
  }
@@ -522,14 +529,14 @@ static void hash_set_num(ParseInfo pi, Val parent, NumInfo ni) {
522
529
  oj_set_error_at(pi, oj_parse_error_class, __FILE__, __LINE__, "not a number or other value");
523
530
  }
524
531
  rval = oj_num_as_value(ni);
525
- rb_hash_aset(stack_peek(&pi->stack)->val, oj_hash_key(parent), rval);
532
+ rb_hash_aset(stack_peek(&pi->stack)->val, calc_hash_key(pi, parent), rval);
526
533
  if (Yes == pi->options.trace) {
527
534
  oj_trace_parse_call("set_number", pi, __FILE__, __LINE__, rval);
528
535
  }
529
536
  }
530
537
 
531
538
  static void hash_set_value(ParseInfo pi, Val parent, VALUE value) {
532
- rb_hash_aset(stack_peek(&pi->stack)->val, oj_hash_key(parent), value);
539
+ rb_hash_aset(stack_peek(&pi->stack)->val, calc_hash_key(pi, parent), value);
533
540
  if (Yes == pi->options.trace) {
534
541
  oj_trace_parse_call("set_value", pi, __FILE__, __LINE__, value);
535
542
  }
data/lib/oj/mimic.rb CHANGED
@@ -23,6 +23,8 @@ module Oj
23
23
  bigdecimal_load: :auto,
24
24
  circular: false,
25
25
  class_cache: false,
26
+ cache_keys: true,
27
+ cache_str: false,
26
28
  create_additions: false,
27
29
  create_id: "json_class",
28
30
  empty_string: false,
data/lib/oj/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
 
2
2
  module Oj
3
3
  # Current version of the module.
4
- VERSION = '3.12.0'
4
+ VERSION = '3.12.1'
5
5
  end
data/test/foo.rb CHANGED
@@ -7,14 +7,14 @@ $oj_dir = File.dirname(File.expand_path(File.dirname(__FILE__)))
7
7
  end
8
8
 
9
9
  require 'oj'
10
- require 'active_support'
11
10
 
12
- Oj.default_options = {trace: true}
11
+ Oj.default_options = {cache_keys: false, cache_str: 0}
13
12
 
14
- Oj::Rails.mimic_JSON
15
- #Oj.mimic_JSON
16
- begin
17
- ::JSON.load('foo=&bar')
18
- rescue Exception => e
19
- puts "*** #{e.class}: #{e.message}"
20
- end
13
+ [:compat, :strict, :object].each { |mode|
14
+ GC.start
15
+ t = Time.now
16
+ Oj.load_file('pt_lemma_lookup.json', mode: mode)
17
+ puts "#{mode}: #{Time.now - t}"
18
+ }
19
+
20
+ # check saj and scp
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.12.0
4
+ version: 3.12.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Ohler
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-07-05 00:00:00.000000000 Z
11
+ date: 2021-07-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake-compiler