Skip to content

Commit e94eea0

Browse files
committed
Use a switch/case rather than if/else
1 parent d57a012 commit e94eea0

File tree

5 files changed

+56
-46
lines changed

5 files changed

+56
-46
lines changed

benchmark/file_benchmark.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
#!/usr/bin/env ruby
22

3+
$LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__))
4+
35
require 'benchmark'
46
require 'json'
5-
require './lib/fast_jsonparser/fast_jsonparser'
7+
require 'fast_jsonparser'
68
require 'oj'
79

810
def run_report(rep, src)

benchmark/file_ips_benchmark.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
#!/usr/bin/env ruby
22

3+
$LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__))
4+
35
require 'benchmark/ips'
46
require 'json'
5-
require './lib/fast_jsonparser/fast_jsonparser'
7+
require 'fast_jsonparser'
68
require 'oj'
79

810
def run_report(rep, src)

benchmark/json_benchmark.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1+
$LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__))
2+
13
sample_json = '{"a":"Alpha","b":true,"c":12345,"d":[true,[false,[-123456789,null],3.9676,["Something else.",false],null]],"e":{"zero":null,"one":1,"two":2,"three":[3],"four":[0,1,2,3,4]},"f":null,"h":{"a":{"b":{"c":{"d":{"e":{"f":{"g":null}}}}}}},"i":[[[[[[[null]]]]]]]}'
24

35
require 'benchmark'
46
require 'benchmark/memory'
57
require 'json'
6-
require './lib/fast_jsonparser/fast_jsonparser'
8+
require 'fast_jsonparser'
79
require 'oj'
810

911
def run_report(rep, json)

benchmark/stream_benchmark.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
#!/usr/bin/env ruby
22

3+
$LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__))
4+
35
require 'benchmark'
46
require 'json'
5-
require './lib/fast_jsonparser/fast_jsonparser'
7+
require 'fast_jsonparser'
68
require 'yajl'
79

810
def run_report(rep, src)

ext/fast_jsonparser/fast_jsonparser.cpp

Lines changed: 44 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -9,53 +9,55 @@ using namespace simdjson;
99
// Convert tape to Ruby's Object
1010
static VALUE make_ruby_object(dom::element element)
1111
{
12-
auto t = element.type();
13-
if (t == dom::element_type::ARRAY)
12+
switch (element.type())
1413
{
15-
VALUE ary = rb_ary_new();
16-
for (dom::element x : element)
14+
case dom::element_type::ARRAY:
1715
{
18-
VALUE e = make_ruby_object(x);
19-
rb_ary_push(ary, e);
16+
VALUE ary = rb_ary_new();
17+
for (dom::element x : element)
18+
{
19+
VALUE e = make_ruby_object(x);
20+
rb_ary_push(ary, e);
21+
}
22+
return ary;
2023
}
21-
return ary;
22-
}
23-
else if (t == dom::element_type::OBJECT)
24-
{
25-
VALUE hash = rb_hash_new();
26-
for (dom::key_value_pair field : dom::object(element))
24+
case dom::element_type::OBJECT:
2725
{
28-
std::string_view view(field.key);
29-
VALUE k = rb_intern(view.data());
30-
VALUE v = make_ruby_object(field.value);
31-
rb_hash_aset(hash, ID2SYM(k), v);
26+
VALUE hash = rb_hash_new();
27+
for (dom::key_value_pair field : dom::object(element))
28+
{
29+
std::string_view view(field.key);
30+
VALUE k = rb_intern(view.data());
31+
VALUE v = make_ruby_object(field.value);
32+
rb_hash_aset(hash, ID2SYM(k), v);
33+
}
34+
return hash;
35+
}
36+
case dom::element_type::INT64:
37+
{
38+
return LONG2NUM(element.get<int64_t>());
39+
}
40+
case dom::element_type::UINT64:
41+
{
42+
return ULONG2NUM(element.get<uint64_t>());
43+
}
44+
case dom::element_type::DOUBLE:
45+
{
46+
return DBL2NUM(double(element));
47+
}
48+
case dom::element_type::STRING:
49+
{
50+
std::string_view view(element);
51+
return rb_str_new(view.data(), view.size());
52+
}
53+
case dom::element_type::BOOL:
54+
{
55+
return bool(element) ? Qtrue : Qfalse;
56+
}
57+
case dom::element_type::NULL_VALUE:
58+
{
59+
return Qnil;
3260
}
33-
return hash;
34-
}
35-
else if (t == dom::element_type::INT64)
36-
{
37-
return LONG2NUM(element.get<int64_t>());
38-
}
39-
else if (t == dom::element_type::UINT64)
40-
{
41-
return ULONG2NUM(element.get<uint64_t>());
42-
}
43-
else if (t == dom::element_type::DOUBLE)
44-
{
45-
return DBL2NUM(double(element));
46-
}
47-
else if (t == dom::element_type::STRING)
48-
{
49-
std::string_view view(element);
50-
return rb_str_new(view.data(), view.size());
51-
}
52-
else if (t == dom::element_type::BOOL)
53-
{
54-
return bool(element) ? Qtrue : Qfalse;
55-
}
56-
else if (t == dom::element_type::NULL_VALUE)
57-
{
58-
return Qnil;
5961
}
6062
// unknown case (bug)
6163
rb_raise(rb_eException, "[BUG] must not happen");

0 commit comments

Comments
 (0)