@@ -9,53 +9,55 @@ using namespace simdjson;
9
9
// Convert tape to Ruby's Object
10
10
static VALUE make_ruby_object (dom::element element)
11
11
{
12
- auto t = element.type ();
13
- if (t == dom::element_type::ARRAY)
12
+ switch (element.type ())
14
13
{
15
- VALUE ary = rb_ary_new ();
16
- for (dom::element x : element)
14
+ case dom::element_type::ARRAY:
17
15
{
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;
20
23
}
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:
27
25
{
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;
32
60
}
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;
59
61
}
60
62
// unknown case (bug)
61
63
rb_raise (rb_eException, " [BUG] must not happen" );
0 commit comments