Coverage Report

Created: 2026-05-20 06:17

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/jsoncons/include/jsoncons/json_decoder.hpp
Line
Count
Source
1
// Copyright 2013-2026 Daniel Parker
2
// Distributed under the Boost license, Version 1.0.
3
// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
4
5
// See https://github.com/danielaparker/jsoncons for latest version
6
7
#ifndef JSONCONS_JSON_DECODER_HPP
8
#define JSONCONS_JSON_DECODER_HPP
9
10
#include <cstddef>
11
#include <cstdint>
12
#include <memory> // std::allocator
13
#include <system_error>
14
#include <utility> // std::move
15
#include <vector>
16
17
#include <jsoncons/json_object.hpp>
18
#include <jsoncons/json_type.hpp>
19
#include <jsoncons/json_visitor.hpp>
20
#include <jsoncons/semantic_tag.hpp>
21
#include <jsoncons/ser_utils.hpp>
22
23
namespace jsoncons {
24
25
template <typename Json,typename TempAlloc =std::allocator<char>>
26
class json_decoder final : public basic_json_visitor<typename Json::char_type>
27
{
28
public:
29
    using char_type = typename Json::char_type;
30
    using typename basic_json_visitor<char_type>::string_view_type;
31
32
    using key_value_type = typename Json::key_value_type;
33
    using key_type = typename Json::key_type;
34
    using array = typename Json::array;
35
    using object = typename Json::object;
36
    using allocator_type = typename Json::allocator_type;
37
    using json_string_allocator = typename key_type::allocator_type;
38
    using json_array_allocator = typename array::allocator_type;
39
    using json_object_allocator = typename object::allocator_type;
40
    using json_byte_allocator_type = typename std::allocator_traits<allocator_type>:: template rebind_alloc<uint8_t>;
41
private:
42
43
    enum class structure_type {root_t, array_t, object_t};
44
45
    struct structure_info
46
    {
47
        structure_type type_;
48
        std::size_t container_index_{0};
49
50
        structure_info(structure_type type, std::size_t offset) noexcept
51
80.8k
            : type_(type), container_index_(offset)
52
80.8k
        {
53
80.8k
        }
54
        ~structure_info() = default;
55
    };
56
57
    using temp_allocator_type = TempAlloc;
58
    using stack_item_allocator_type = typename std::allocator_traits<allocator_type>:: template rebind_alloc<index_key_value<Json>>;
59
    using structure_info_allocator_type = typename std::allocator_traits<temp_allocator_type>:: template rebind_alloc<structure_info>;
60
 
61
    allocator_type allocator_;
62
63
    Json result_;
64
65
    std::size_t index_{0};
66
    key_type name_;
67
    std::vector<index_key_value<Json>,stack_item_allocator_type> item_stack_;
68
    std::vector<structure_info,structure_info_allocator_type> structure_stack_;
69
    bool is_valid_{false};
70
71
public:
72
    json_decoder(const allocator_type& alloc = allocator_type(), 
73
        const temp_allocator_type& temp_alloc = temp_allocator_type())
74
4.39k
        : allocator_(alloc),
75
4.39k
          result_(),
76
4.39k
          name_(alloc),
77
4.39k
          item_stack_(alloc),
78
4.39k
          structure_stack_(temp_alloc)
79
4.39k
    {
80
4.39k
        item_stack_.reserve(1000);
81
4.39k
        structure_stack_.reserve(100);
82
4.39k
        structure_stack_.emplace_back(structure_type::root_t, 0);
83
4.39k
    }
84
85
    json_decoder(temp_allocator_arg_t, 
86
        const temp_allocator_type& temp_alloc = temp_allocator_type())
87
        : allocator_(),
88
          result_(),
89
          name_(),
90
          item_stack_(),
91
          structure_stack_(temp_alloc)
92
    {
93
        item_stack_.reserve(1000);
94
        structure_stack_.reserve(100);
95
        structure_stack_.emplace_back(structure_type::root_t, 0);
96
    }
97
98
    void reset()
99
    {
100
        is_valid_ = false;
101
        index_ = 0;
102
        item_stack_.clear();
103
        structure_stack_.clear();
104
        structure_stack_.emplace_back(structure_type::root_t, 0);
105
    }
106
107
    bool is_valid() const
108
18
    {
109
18
        return is_valid_;
110
18
    }
jsoncons::json_decoder<jsoncons::basic_json<char, jsoncons::sorted_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::is_valid() const
Line
Count
Source
108
18
    {
109
18
        return is_valid_;
110
18
    }
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<wchar_t, jsoncons::sorted_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::is_valid() const
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<char, jsoncons::order_preserving_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::is_valid() const
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<wchar_t, jsoncons::order_preserving_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::is_valid() const
111
112
    Json get_result()
113
18
    {
114
18
        JSONCONS_ASSERT(is_valid_);
115
18
        is_valid_ = false;
116
18
        return std::move(result_);
117
18
    }
jsoncons::json_decoder<jsoncons::basic_json<char, jsoncons::sorted_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::get_result()
Line
Count
Source
113
18
    {
114
18
        JSONCONS_ASSERT(is_valid_);
115
18
        is_valid_ = false;
116
18
        return std::move(result_);
117
18
    }
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<wchar_t, jsoncons::sorted_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::get_result()
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<char, jsoncons::order_preserving_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::get_result()
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<wchar_t, jsoncons::order_preserving_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::get_result()
118
119
private:
120
121
    void visit_flush() override
122
18
    {
123
18
    }
jsoncons::json_decoder<jsoncons::basic_json<char, jsoncons::sorted_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_flush()
Line
Count
Source
122
18
    {
123
18
    }
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<wchar_t, jsoncons::sorted_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_flush()
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<char, jsoncons::order_preserving_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_flush()
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<wchar_t, jsoncons::order_preserving_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_flush()
124
125
    JSONCONS_VISITOR_RETURN_TYPE visit_begin_object(semantic_tag tag, const ser_context&, std::error_code&) override
126
36.6k
    {
127
36.6k
        if (structure_stack_.back().type_ == structure_type::root_t)
128
4.39k
        {
129
4.39k
            index_ = 0;
130
4.39k
            item_stack_.clear();
131
4.39k
            is_valid_ = false;
132
4.39k
        }
133
36.6k
        item_stack_.emplace_back(std::move(name_), index_++, json_object_arg, tag);
134
36.6k
        structure_stack_.emplace_back(structure_type::object_t, item_stack_.size()-1);
135
36.6k
        JSONCONS_VISITOR_RETURN;
136
36.6k
    }
jsoncons::json_decoder<jsoncons::basic_json<char, jsoncons::sorted_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_begin_object(jsoncons::semantic_tag, jsoncons::ser_context const&, std::__1::error_code&)
Line
Count
Source
126
36.6k
    {
127
36.6k
        if (structure_stack_.back().type_ == structure_type::root_t)
128
4.39k
        {
129
4.39k
            index_ = 0;
130
4.39k
            item_stack_.clear();
131
4.39k
            is_valid_ = false;
132
4.39k
        }
133
36.6k
        item_stack_.emplace_back(std::move(name_), index_++, json_object_arg, tag);
134
36.6k
        structure_stack_.emplace_back(structure_type::object_t, item_stack_.size()-1);
135
36.6k
        JSONCONS_VISITOR_RETURN;
136
36.6k
    }
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<wchar_t, jsoncons::sorted_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_begin_object(jsoncons::semantic_tag, jsoncons::ser_context const&, std::__1::error_code&)
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<char, jsoncons::order_preserving_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_begin_object(jsoncons::semantic_tag, jsoncons::ser_context const&, std::__1::error_code&)
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<wchar_t, jsoncons::order_preserving_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_begin_object(jsoncons::semantic_tag, jsoncons::ser_context const&, std::__1::error_code&)
137
138
    JSONCONS_VISITOR_RETURN_TYPE visit_end_object(const ser_context&, std::error_code&) override
139
24.3k
    {
140
24.3k
        JSONCONS_ASSERT(structure_stack_.size() > 0);
141
24.3k
        JSONCONS_ASSERT(structure_stack_.back().type_ == structure_type::object_t);
142
24.3k
        const size_t structure_index = structure_stack_.back().container_index_;
143
24.3k
        JSONCONS_ASSERT(item_stack_.size() > structure_index);
144
24.3k
        const size_t count = item_stack_.size() - (structure_index + 1);
145
24.3k
        auto first = item_stack_.begin() + (structure_index+1);
146
147
24.3k
        if (count > 0)
148
13.1k
        {
149
13.1k
            item_stack_[structure_index].value.template cast<typename Json::object_storage>().value().uninitialized_init(
150
13.1k
                &item_stack_[structure_index+1], count);
151
13.1k
        }
152
153
24.3k
        item_stack_.erase(first, item_stack_.end());
154
24.3k
        structure_stack_.pop_back();
155
24.3k
        if (structure_stack_.back().type_ == structure_type::root_t)
156
1.98k
        {
157
1.98k
            result_.swap(item_stack_.front().value);
158
1.98k
            item_stack_.pop_back();
159
1.98k
            is_valid_ = true;
160
1.98k
            JSONCONS_VISITOR_RETURN;
161
1.98k
        }
162
24.3k
        JSONCONS_VISITOR_RETURN;
163
24.3k
    }
jsoncons::json_decoder<jsoncons::basic_json<char, jsoncons::sorted_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_end_object(jsoncons::ser_context const&, std::__1::error_code&)
Line
Count
Source
139
24.3k
    {
140
24.3k
        JSONCONS_ASSERT(structure_stack_.size() > 0);
141
24.3k
        JSONCONS_ASSERT(structure_stack_.back().type_ == structure_type::object_t);
142
24.3k
        const size_t structure_index = structure_stack_.back().container_index_;
143
24.3k
        JSONCONS_ASSERT(item_stack_.size() > structure_index);
144
24.3k
        const size_t count = item_stack_.size() - (structure_index + 1);
145
24.3k
        auto first = item_stack_.begin() + (structure_index+1);
146
147
24.3k
        if (count > 0)
148
13.1k
        {
149
13.1k
            item_stack_[structure_index].value.template cast<typename Json::object_storage>().value().uninitialized_init(
150
13.1k
                &item_stack_[structure_index+1], count);
151
13.1k
        }
152
153
24.3k
        item_stack_.erase(first, item_stack_.end());
154
24.3k
        structure_stack_.pop_back();
155
24.3k
        if (structure_stack_.back().type_ == structure_type::root_t)
156
1.98k
        {
157
1.98k
            result_.swap(item_stack_.front().value);
158
1.98k
            item_stack_.pop_back();
159
1.98k
            is_valid_ = true;
160
1.98k
            JSONCONS_VISITOR_RETURN;
161
1.98k
        }
162
22.3k
        JSONCONS_VISITOR_RETURN;
163
24.3k
    }
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<wchar_t, jsoncons::sorted_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_end_object(jsoncons::ser_context const&, std::__1::error_code&)
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<char, jsoncons::order_preserving_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_end_object(jsoncons::ser_context const&, std::__1::error_code&)
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<wchar_t, jsoncons::order_preserving_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_end_object(jsoncons::ser_context const&, std::__1::error_code&)
164
165
    JSONCONS_VISITOR_RETURN_TYPE visit_begin_array(semantic_tag tag, const ser_context&, std::error_code&) override
166
39.8k
    {
167
39.8k
        if (structure_stack_.back().type_ == structure_type::root_t)
168
0
        {
169
0
            index_ = 0;
170
0
            item_stack_.clear();
171
0
            is_valid_ = false;
172
0
        }
173
39.8k
        item_stack_.emplace_back(std::move(name_), index_++, json_array_arg, tag);
174
39.8k
        structure_stack_.emplace_back(structure_type::array_t, item_stack_.size()-1);
175
39.8k
        JSONCONS_VISITOR_RETURN;
176
39.8k
    }
jsoncons::json_decoder<jsoncons::basic_json<char, jsoncons::sorted_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_begin_array(jsoncons::semantic_tag, jsoncons::ser_context const&, std::__1::error_code&)
Line
Count
Source
166
39.8k
    {
167
39.8k
        if (structure_stack_.back().type_ == structure_type::root_t)
168
0
        {
169
0
            index_ = 0;
170
0
            item_stack_.clear();
171
0
            is_valid_ = false;
172
0
        }
173
39.8k
        item_stack_.emplace_back(std::move(name_), index_++, json_array_arg, tag);
174
39.8k
        structure_stack_.emplace_back(structure_type::array_t, item_stack_.size()-1);
175
39.8k
        JSONCONS_VISITOR_RETURN;
176
39.8k
    }
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<wchar_t, jsoncons::sorted_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_begin_array(jsoncons::semantic_tag, jsoncons::ser_context const&, std::__1::error_code&)
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<char, jsoncons::order_preserving_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_begin_array(jsoncons::semantic_tag, jsoncons::ser_context const&, std::__1::error_code&)
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<wchar_t, jsoncons::order_preserving_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_begin_array(jsoncons::semantic_tag, jsoncons::ser_context const&, std::__1::error_code&)
177
178
    JSONCONS_VISITOR_RETURN_TYPE visit_end_array(const ser_context&, std::error_code&) override
179
17.5k
    {
180
17.5k
        JSONCONS_ASSERT(structure_stack_.size() > 1);
181
17.5k
        JSONCONS_ASSERT(structure_stack_.back().type_ == structure_type::array_t);
182
17.5k
        const size_t container_index = structure_stack_.back().container_index_;
183
17.5k
        JSONCONS_ASSERT(item_stack_.size() > container_index);
184
185
17.5k
        auto& container = item_stack_[container_index].value;
186
187
17.5k
        const size_t size = item_stack_.size() - (container_index + 1);
188
        //std::cout << "size on item stack: " << size << "\n";
189
190
17.5k
        if (size > 0)
191
6.16k
        {
192
6.16k
            container.reserve(size);
193
6.16k
            auto first = item_stack_.begin() + (container_index+1);
194
6.16k
            auto last = first + size;
195
5.11M
            for (auto it = first; it != last; ++it)
196
5.11M
            {
197
5.11M
                container.push_back(std::move((*it).value));
198
5.11M
            }
199
6.16k
            item_stack_.erase(first, item_stack_.end());
200
6.16k
        }
201
202
17.5k
        structure_stack_.pop_back();
203
17.5k
        if (structure_stack_.back().type_ == structure_type::root_t)
204
0
        {
205
0
            result_.swap(item_stack_.front().value);
206
0
            item_stack_.pop_back();
207
0
            is_valid_ = true;
208
0
            JSONCONS_VISITOR_RETURN;
209
0
        }
210
17.5k
        JSONCONS_VISITOR_RETURN;
211
17.5k
    }
jsoncons::json_decoder<jsoncons::basic_json<char, jsoncons::sorted_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_end_array(jsoncons::ser_context const&, std::__1::error_code&)
Line
Count
Source
179
17.5k
    {
180
17.5k
        JSONCONS_ASSERT(structure_stack_.size() > 1);
181
17.5k
        JSONCONS_ASSERT(structure_stack_.back().type_ == structure_type::array_t);
182
17.5k
        const size_t container_index = structure_stack_.back().container_index_;
183
17.5k
        JSONCONS_ASSERT(item_stack_.size() > container_index);
184
185
17.5k
        auto& container = item_stack_[container_index].value;
186
187
17.5k
        const size_t size = item_stack_.size() - (container_index + 1);
188
        //std::cout << "size on item stack: " << size << "\n";
189
190
17.5k
        if (size > 0)
191
6.16k
        {
192
6.16k
            container.reserve(size);
193
6.16k
            auto first = item_stack_.begin() + (container_index+1);
194
6.16k
            auto last = first + size;
195
5.11M
            for (auto it = first; it != last; ++it)
196
5.11M
            {
197
5.11M
                container.push_back(std::move((*it).value));
198
5.11M
            }
199
6.16k
            item_stack_.erase(first, item_stack_.end());
200
6.16k
        }
201
202
17.5k
        structure_stack_.pop_back();
203
17.5k
        if (structure_stack_.back().type_ == structure_type::root_t)
204
0
        {
205
0
            result_.swap(item_stack_.front().value);
206
0
            item_stack_.pop_back();
207
0
            is_valid_ = true;
208
0
            JSONCONS_VISITOR_RETURN;
209
0
        }
210
17.5k
        JSONCONS_VISITOR_RETURN;
211
17.5k
    }
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<wchar_t, jsoncons::sorted_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_end_array(jsoncons::ser_context const&, std::__1::error_code&)
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<char, jsoncons::order_preserving_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_end_array(jsoncons::ser_context const&, std::__1::error_code&)
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<wchar_t, jsoncons::order_preserving_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_end_array(jsoncons::ser_context const&, std::__1::error_code&)
212
213
    JSONCONS_VISITOR_RETURN_TYPE visit_key(const string_view_type& name, const ser_context&, std::error_code&) override
214
9.55M
    {
215
9.55M
        name_ = key_type(name.data(),name.length(),allocator_);
216
9.55M
        JSONCONS_VISITOR_RETURN;
217
9.55M
    }
jsoncons::json_decoder<jsoncons::basic_json<char, jsoncons::sorted_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_key(std::__1::basic_string_view<char, std::__1::char_traits<char> > const&, jsoncons::ser_context const&, std::__1::error_code&)
Line
Count
Source
214
9.55M
    {
215
9.55M
        name_ = key_type(name.data(),name.length(),allocator_);
216
9.55M
        JSONCONS_VISITOR_RETURN;
217
9.55M
    }
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<wchar_t, jsoncons::sorted_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_key(std::__1::basic_string_view<wchar_t, std::__1::char_traits<wchar_t> > const&, jsoncons::ser_context const&, std::__1::error_code&)
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<char, jsoncons::order_preserving_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_key(std::__1::basic_string_view<char, std::__1::char_traits<char> > const&, jsoncons::ser_context const&, std::__1::error_code&)
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<wchar_t, jsoncons::order_preserving_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_key(std::__1::basic_string_view<wchar_t, std::__1::char_traits<wchar_t> > const&, jsoncons::ser_context const&, std::__1::error_code&)
218
219
    JSONCONS_VISITOR_RETURN_TYPE visit_string(const string_view_type& sv, semantic_tag tag, const ser_context&, std::error_code&) override
220
32.8k
    {
221
32.8k
        switch (structure_stack_.back().type_)
222
32.8k
        {
223
29.8k
            case structure_type::object_t:
224
32.8k
            case structure_type::array_t:
225
32.8k
                item_stack_.emplace_back(std::move(name_), index_++, sv, tag);
226
32.8k
                break;
227
0
            case structure_type::root_t:
228
0
                result_ = Json(sv, tag, allocator_);
229
0
                is_valid_ = true;
230
0
                JSONCONS_VISITOR_RETURN;
231
32.8k
        }
232
32.8k
        JSONCONS_VISITOR_RETURN;
233
32.8k
    }
jsoncons::json_decoder<jsoncons::basic_json<char, jsoncons::sorted_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_string(std::__1::basic_string_view<char, std::__1::char_traits<char> > const&, jsoncons::semantic_tag, jsoncons::ser_context const&, std::__1::error_code&)
Line
Count
Source
220
32.8k
    {
221
32.8k
        switch (structure_stack_.back().type_)
222
32.8k
        {
223
29.8k
            case structure_type::object_t:
224
32.8k
            case structure_type::array_t:
225
32.8k
                item_stack_.emplace_back(std::move(name_), index_++, sv, tag);
226
32.8k
                break;
227
0
            case structure_type::root_t:
228
0
                result_ = Json(sv, tag, allocator_);
229
0
                is_valid_ = true;
230
0
                JSONCONS_VISITOR_RETURN;
231
32.8k
        }
232
32.8k
        JSONCONS_VISITOR_RETURN;
233
32.8k
    }
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<wchar_t, jsoncons::sorted_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_string(std::__1::basic_string_view<wchar_t, std::__1::char_traits<wchar_t> > const&, jsoncons::semantic_tag, jsoncons::ser_context const&, std::__1::error_code&)
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<char, jsoncons::order_preserving_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_string(std::__1::basic_string_view<char, std::__1::char_traits<char> > const&, jsoncons::semantic_tag, jsoncons::ser_context const&, std::__1::error_code&)
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<wchar_t, jsoncons::order_preserving_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_string(std::__1::basic_string_view<wchar_t, std::__1::char_traits<wchar_t> > const&, jsoncons::semantic_tag, jsoncons::ser_context const&, std::__1::error_code&)
234
235
    JSONCONS_VISITOR_RETURN_TYPE visit_byte_string(const byte_string_view& b, 
236
                           semantic_tag tag, 
237
                           const ser_context&,
238
                           std::error_code&) override
239
0
    {
240
0
        switch (structure_stack_.back().type_)
241
0
        {
242
0
            case structure_type::object_t:
243
0
            case structure_type::array_t:
244
0
                item_stack_.emplace_back(std::move(name_), index_++, byte_string_arg, b, tag);
245
0
                break;
246
0
            case structure_type::root_t:
247
0
                result_ = Json(byte_string_arg, b, tag, allocator_);
248
0
                is_valid_ = true;
249
0
                JSONCONS_VISITOR_RETURN;
250
0
        }
251
0
        JSONCONS_VISITOR_RETURN;
252
0
    }
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<char, jsoncons::sorted_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_byte_string(jsoncons::byte_string_view const&, jsoncons::semantic_tag, jsoncons::ser_context const&, std::__1::error_code&)
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<wchar_t, jsoncons::sorted_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_byte_string(jsoncons::byte_string_view const&, jsoncons::semantic_tag, jsoncons::ser_context const&, std::__1::error_code&)
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<char, jsoncons::order_preserving_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_byte_string(jsoncons::byte_string_view const&, jsoncons::semantic_tag, jsoncons::ser_context const&, std::__1::error_code&)
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<wchar_t, jsoncons::order_preserving_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_byte_string(jsoncons::byte_string_view const&, jsoncons::semantic_tag, jsoncons::ser_context const&, std::__1::error_code&)
253
254
    JSONCONS_VISITOR_RETURN_TYPE visit_byte_string(const byte_string_view& b, 
255
        uint64_t ext_tag, 
256
        const ser_context&,
257
        std::error_code&) override
258
16.4k
    {
259
16.4k
        switch (structure_stack_.back().type_)
260
16.4k
        {
261
14.0k
            case structure_type::object_t:
262
16.4k
            case structure_type::array_t:
263
16.4k
                item_stack_.emplace_back(std::move(name_), index_++, byte_string_arg, b, ext_tag);
264
16.4k
                break;
265
0
            case structure_type::root_t:
266
0
                result_ = Json(byte_string_arg, b, ext_tag, allocator_);
267
0
                is_valid_ = true;
268
0
                JSONCONS_VISITOR_RETURN;
269
16.4k
        }
270
16.4k
        JSONCONS_VISITOR_RETURN;
271
16.4k
    }
jsoncons::json_decoder<jsoncons::basic_json<char, jsoncons::sorted_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_byte_string(jsoncons::byte_string_view const&, unsigned long, jsoncons::ser_context const&, std::__1::error_code&)
Line
Count
Source
258
16.4k
    {
259
16.4k
        switch (structure_stack_.back().type_)
260
16.4k
        {
261
14.0k
            case structure_type::object_t:
262
16.4k
            case structure_type::array_t:
263
16.4k
                item_stack_.emplace_back(std::move(name_), index_++, byte_string_arg, b, ext_tag);
264
16.4k
                break;
265
0
            case structure_type::root_t:
266
0
                result_ = Json(byte_string_arg, b, ext_tag, allocator_);
267
0
                is_valid_ = true;
268
0
                JSONCONS_VISITOR_RETURN;
269
16.4k
        }
270
16.4k
        JSONCONS_VISITOR_RETURN;
271
16.4k
    }
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<wchar_t, jsoncons::sorted_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_byte_string(jsoncons::byte_string_view const&, unsigned long, jsoncons::ser_context const&, std::__1::error_code&)
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<char, jsoncons::order_preserving_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_byte_string(jsoncons::byte_string_view const&, unsigned long, jsoncons::ser_context const&, std::__1::error_code&)
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<wchar_t, jsoncons::order_preserving_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_byte_string(jsoncons::byte_string_view const&, unsigned long, jsoncons::ser_context const&, std::__1::error_code&)
272
273
    JSONCONS_VISITOR_RETURN_TYPE visit_int64(int64_t value, 
274
        semantic_tag tag, 
275
        const ser_context&,
276
        std::error_code&) override
277
130k
    {
278
130k
        switch (structure_stack_.back().type_)
279
130k
        {
280
123k
            case structure_type::object_t:
281
130k
            case structure_type::array_t:
282
130k
                item_stack_.emplace_back(std::move(name_), index_++, value, tag);
283
130k
                break;
284
0
            case structure_type::root_t:
285
0
                result_ = Json(value,tag);
286
0
                is_valid_ = true;
287
0
                JSONCONS_VISITOR_RETURN;
288
130k
        }
289
130k
        JSONCONS_VISITOR_RETURN;
290
130k
    }
jsoncons::json_decoder<jsoncons::basic_json<char, jsoncons::sorted_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_int64(long, jsoncons::semantic_tag, jsoncons::ser_context const&, std::__1::error_code&)
Line
Count
Source
277
130k
    {
278
130k
        switch (structure_stack_.back().type_)
279
130k
        {
280
123k
            case structure_type::object_t:
281
130k
            case structure_type::array_t:
282
130k
                item_stack_.emplace_back(std::move(name_), index_++, value, tag);
283
130k
                break;
284
0
            case structure_type::root_t:
285
0
                result_ = Json(value,tag);
286
0
                is_valid_ = true;
287
0
                JSONCONS_VISITOR_RETURN;
288
130k
        }
289
130k
        JSONCONS_VISITOR_RETURN;
290
130k
    }
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<wchar_t, jsoncons::sorted_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_int64(long, jsoncons::semantic_tag, jsoncons::ser_context const&, std::__1::error_code&)
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<char, jsoncons::order_preserving_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_int64(long, jsoncons::semantic_tag, jsoncons::ser_context const&, std::__1::error_code&)
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<wchar_t, jsoncons::order_preserving_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_int64(long, jsoncons::semantic_tag, jsoncons::ser_context const&, std::__1::error_code&)
291
292
    JSONCONS_VISITOR_RETURN_TYPE visit_uint64(uint64_t value, 
293
        semantic_tag tag, 
294
        const ser_context&,
295
        std::error_code&) override
296
21.9k
    {
297
21.9k
        switch (structure_stack_.back().type_)
298
21.9k
        {
299
19.8k
            case structure_type::object_t:
300
21.9k
            case structure_type::array_t:
301
21.9k
                item_stack_.emplace_back(std::move(name_), index_++, value, tag);
302
21.9k
                break;
303
0
            case structure_type::root_t:
304
0
                result_ = Json(value,tag);
305
0
                is_valid_ = true;
306
0
                JSONCONS_VISITOR_RETURN;
307
21.9k
        }
308
21.9k
        JSONCONS_VISITOR_RETURN;
309
21.9k
    }
jsoncons::json_decoder<jsoncons::basic_json<char, jsoncons::sorted_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_uint64(unsigned long, jsoncons::semantic_tag, jsoncons::ser_context const&, std::__1::error_code&)
Line
Count
Source
296
21.9k
    {
297
21.9k
        switch (structure_stack_.back().type_)
298
21.9k
        {
299
19.8k
            case structure_type::object_t:
300
21.9k
            case structure_type::array_t:
301
21.9k
                item_stack_.emplace_back(std::move(name_), index_++, value, tag);
302
21.9k
                break;
303
0
            case structure_type::root_t:
304
0
                result_ = Json(value,tag);
305
0
                is_valid_ = true;
306
0
                JSONCONS_VISITOR_RETURN;
307
21.9k
        }
308
21.9k
        JSONCONS_VISITOR_RETURN;
309
21.9k
    }
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<wchar_t, jsoncons::sorted_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_uint64(unsigned long, jsoncons::semantic_tag, jsoncons::ser_context const&, std::__1::error_code&)
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<char, jsoncons::order_preserving_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_uint64(unsigned long, jsoncons::semantic_tag, jsoncons::ser_context const&, std::__1::error_code&)
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<wchar_t, jsoncons::order_preserving_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_uint64(unsigned long, jsoncons::semantic_tag, jsoncons::ser_context const&, std::__1::error_code&)
310
311
    JSONCONS_VISITOR_RETURN_TYPE visit_half(uint16_t value, 
312
        semantic_tag tag,   
313
        const ser_context&,
314
        std::error_code&) override
315
0
    {
316
0
        switch (structure_stack_.back().type_)
317
0
        {
318
0
            case structure_type::object_t:
319
0
            case structure_type::array_t:
320
0
                item_stack_.emplace_back(std::move(name_), index_++, half_arg, value, tag);
321
0
                break;
322
0
            case structure_type::root_t:
323
0
                result_ = Json(half_arg, value, tag);
324
0
                is_valid_ = true;
325
0
                JSONCONS_VISITOR_RETURN;
326
0
        }
327
0
        JSONCONS_VISITOR_RETURN;
328
0
    }
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<char, jsoncons::sorted_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_half(unsigned short, jsoncons::semantic_tag, jsoncons::ser_context const&, std::__1::error_code&)
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<wchar_t, jsoncons::sorted_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_half(unsigned short, jsoncons::semantic_tag, jsoncons::ser_context const&, std::__1::error_code&)
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<char, jsoncons::order_preserving_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_half(unsigned short, jsoncons::semantic_tag, jsoncons::ser_context const&, std::__1::error_code&)
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<wchar_t, jsoncons::order_preserving_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_half(unsigned short, jsoncons::semantic_tag, jsoncons::ser_context const&, std::__1::error_code&)
329
330
    JSONCONS_VISITOR_RETURN_TYPE visit_double(double value, 
331
        semantic_tag tag,   
332
        const ser_context&,
333
        std::error_code&) override
334
13.8k
    {
335
13.8k
        switch (structure_stack_.back().type_)
336
13.8k
        {
337
12.7k
            case structure_type::object_t:
338
13.8k
            case structure_type::array_t:
339
13.8k
                item_stack_.emplace_back(std::move(name_), index_++, value, tag);
340
13.8k
                break;
341
0
            case structure_type::root_t:
342
0
                result_ = Json(value, tag);
343
0
                is_valid_ = true;
344
0
                JSONCONS_VISITOR_RETURN;
345
13.8k
        }
346
13.8k
        JSONCONS_VISITOR_RETURN;
347
13.8k
    }
jsoncons::json_decoder<jsoncons::basic_json<char, jsoncons::sorted_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_double(double, jsoncons::semantic_tag, jsoncons::ser_context const&, std::__1::error_code&)
Line
Count
Source
334
13.8k
    {
335
13.8k
        switch (structure_stack_.back().type_)
336
13.8k
        {
337
12.7k
            case structure_type::object_t:
338
13.8k
            case structure_type::array_t:
339
13.8k
                item_stack_.emplace_back(std::move(name_), index_++, value, tag);
340
13.8k
                break;
341
0
            case structure_type::root_t:
342
0
                result_ = Json(value, tag);
343
0
                is_valid_ = true;
344
0
                JSONCONS_VISITOR_RETURN;
345
13.8k
        }
346
13.8k
        JSONCONS_VISITOR_RETURN;
347
13.8k
    }
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<wchar_t, jsoncons::sorted_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_double(double, jsoncons::semantic_tag, jsoncons::ser_context const&, std::__1::error_code&)
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<char, jsoncons::order_preserving_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_double(double, jsoncons::semantic_tag, jsoncons::ser_context const&, std::__1::error_code&)
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<wchar_t, jsoncons::order_preserving_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_double(double, jsoncons::semantic_tag, jsoncons::ser_context const&, std::__1::error_code&)
348
349
    JSONCONS_VISITOR_RETURN_TYPE visit_bool(bool value, semantic_tag tag, const ser_context&, std::error_code&) override
350
130k
    {
351
130k
        switch (structure_stack_.back().type_)
352
130k
        {
353
110k
            case structure_type::object_t:
354
130k
            case structure_type::array_t:
355
130k
                item_stack_.emplace_back(std::move(name_), index_++, value, tag);
356
130k
                break;
357
0
            case structure_type::root_t:
358
0
                result_ = Json(value, tag);
359
0
                is_valid_ = true;
360
0
                JSONCONS_VISITOR_RETURN;
361
130k
        }
362
130k
        JSONCONS_VISITOR_RETURN;
363
130k
    }
jsoncons::json_decoder<jsoncons::basic_json<char, jsoncons::sorted_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_bool(bool, jsoncons::semantic_tag, jsoncons::ser_context const&, std::__1::error_code&)
Line
Count
Source
350
130k
    {
351
130k
        switch (structure_stack_.back().type_)
352
130k
        {
353
110k
            case structure_type::object_t:
354
130k
            case structure_type::array_t:
355
130k
                item_stack_.emplace_back(std::move(name_), index_++, value, tag);
356
130k
                break;
357
0
            case structure_type::root_t:
358
0
                result_ = Json(value, tag);
359
0
                is_valid_ = true;
360
0
                JSONCONS_VISITOR_RETURN;
361
130k
        }
362
130k
        JSONCONS_VISITOR_RETURN;
363
130k
    }
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<wchar_t, jsoncons::sorted_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_bool(bool, jsoncons::semantic_tag, jsoncons::ser_context const&, std::__1::error_code&)
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<char, jsoncons::order_preserving_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_bool(bool, jsoncons::semantic_tag, jsoncons::ser_context const&, std::__1::error_code&)
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<wchar_t, jsoncons::order_preserving_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_bool(bool, jsoncons::semantic_tag, jsoncons::ser_context const&, std::__1::error_code&)
364
365
    JSONCONS_VISITOR_RETURN_TYPE visit_null(semantic_tag tag, const ser_context&, std::error_code&) override
366
20.7M
    {
367
20.7M
        switch (structure_stack_.back().type_)
368
20.7M
        {
369
9.19M
            case structure_type::object_t:
370
20.7M
            case structure_type::array_t:
371
20.7M
                item_stack_.emplace_back(std::move(name_), index_++, null_type(), tag);
372
20.7M
                break;
373
0
            case structure_type::root_t:
374
0
                result_ = Json(null_type(), tag);
375
0
                is_valid_ = true;
376
0
                JSONCONS_VISITOR_RETURN;
377
20.7M
        }
378
20.7M
        JSONCONS_VISITOR_RETURN;
379
20.7M
    }
jsoncons::json_decoder<jsoncons::basic_json<char, jsoncons::sorted_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_null(jsoncons::semantic_tag, jsoncons::ser_context const&, std::__1::error_code&)
Line
Count
Source
366
20.7M
    {
367
20.7M
        switch (structure_stack_.back().type_)
368
20.7M
        {
369
9.19M
            case structure_type::object_t:
370
20.7M
            case structure_type::array_t:
371
20.7M
                item_stack_.emplace_back(std::move(name_), index_++, null_type(), tag);
372
20.7M
                break;
373
0
            case structure_type::root_t:
374
0
                result_ = Json(null_type(), tag);
375
0
                is_valid_ = true;
376
0
                JSONCONS_VISITOR_RETURN;
377
20.7M
        }
378
20.7M
        JSONCONS_VISITOR_RETURN;
379
20.7M
    }
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<wchar_t, jsoncons::sorted_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_null(jsoncons::semantic_tag, jsoncons::ser_context const&, std::__1::error_code&)
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<char, jsoncons::order_preserving_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_null(jsoncons::semantic_tag, jsoncons::ser_context const&, std::__1::error_code&)
Unexecuted instantiation: jsoncons::json_decoder<jsoncons::basic_json<wchar_t, jsoncons::order_preserving_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_null(jsoncons::semantic_tag, jsoncons::ser_context const&, std::__1::error_code&)
380
};
381
382
} // namespace jsoncons
383
384
#endif // JSONCONS_JSON_DECODER_HPP