Coverage Report

Created: 2025-11-09 06:40

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-2025 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_util.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
347k
            : type_(type), container_index_(offset)
52
347k
        {
53
347k
        }
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
5.51k
        : allocator_(alloc),
75
5.51k
          result_(),
76
5.51k
          name_(alloc),
77
5.51k
          item_stack_(alloc),
78
5.51k
          structure_stack_(temp_alloc)
79
5.51k
    {
80
5.51k
        item_stack_.reserve(1000);
81
5.51k
        structure_stack_.reserve(100);
82
5.51k
        structure_stack_.emplace_back(structure_type::root_t, 0);
83
5.51k
    }
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
2.20k
    {
109
2.20k
        return is_valid_;
110
2.20k
    }
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
2.20k
    {
109
2.20k
        return is_valid_;
110
2.20k
    }
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
2.20k
    {
114
2.20k
        JSONCONS_ASSERT(is_valid_);
115
2.20k
        is_valid_ = false;
116
2.20k
        return std::move(result_);
117
2.20k
    }
jsoncons::json_decoder<jsoncons::basic_json<char, jsoncons::sorted_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::get_result()
Line
Count
Source
113
2.20k
    {
114
2.20k
        JSONCONS_ASSERT(is_valid_);
115
2.20k
        is_valid_ = false;
116
2.20k
        return std::move(result_);
117
2.20k
    }
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
2.40k
    {
123
2.40k
    }
jsoncons::json_decoder<jsoncons::basic_json<char, jsoncons::sorted_policy, std::__1::allocator<char> >, std::__1::allocator<char> >::visit_flush()
Line
Count
Source
122
2.40k
    {
123
2.40k
    }
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
161k
    {
127
161k
        if (structure_stack_.back().type_ == structure_type::root_t)
128
2.01k
        {
129
2.01k
            index_ = 0;
130
2.01k
            item_stack_.clear();
131
2.01k
            is_valid_ = false;
132
2.01k
        }
133
161k
        item_stack_.emplace_back(std::move(name_), index_++, json_object_arg, tag);
134
161k
        structure_stack_.emplace_back(structure_type::object_t, item_stack_.size()-1);
135
161k
        JSONCONS_VISITOR_RETURN;
136
161k
    }
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
161k
    {
127
161k
        if (structure_stack_.back().type_ == structure_type::root_t)
128
2.01k
        {
129
2.01k
            index_ = 0;
130
2.01k
            item_stack_.clear();
131
2.01k
            is_valid_ = false;
132
2.01k
        }
133
161k
        item_stack_.emplace_back(std::move(name_), index_++, json_object_arg, tag);
134
161k
        structure_stack_.emplace_back(structure_type::object_t, item_stack_.size()-1);
135
161k
        JSONCONS_VISITOR_RETURN;
136
161k
    }
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
159k
    {
140
159k
        JSONCONS_ASSERT(structure_stack_.size() > 0);
141
159k
        JSONCONS_ASSERT(structure_stack_.back().type_ == structure_type::object_t);
142
159k
        const size_t structure_index = structure_stack_.back().container_index_;
143
159k
        JSONCONS_ASSERT(item_stack_.size() > structure_index);
144
159k
        const size_t count = item_stack_.size() - (structure_index + 1);
145
159k
        auto first = item_stack_.begin() + (structure_index+1);
146
147
159k
        if (count > 0)
148
15.4k
        {
149
15.4k
            item_stack_[structure_index].value.template cast<typename Json::object_storage>().value().uninitialized_init(
150
15.4k
                &item_stack_[structure_index+1], count);
151
15.4k
        }
152
153
159k
        item_stack_.erase(first, item_stack_.end());
154
159k
        structure_stack_.pop_back();
155
159k
        if (structure_stack_.back().type_ == structure_type::root_t)
156
1.53k
        {
157
1.53k
            result_.swap(item_stack_.front().value);
158
1.53k
            item_stack_.pop_back();
159
1.53k
            is_valid_ = true;
160
1.53k
            JSONCONS_VISITOR_RETURN;
161
1.53k
        }
162
159k
        JSONCONS_VISITOR_RETURN;
163
159k
    }
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
159k
    {
140
159k
        JSONCONS_ASSERT(structure_stack_.size() > 0);
141
159k
        JSONCONS_ASSERT(structure_stack_.back().type_ == structure_type::object_t);
142
159k
        const size_t structure_index = structure_stack_.back().container_index_;
143
159k
        JSONCONS_ASSERT(item_stack_.size() > structure_index);
144
159k
        const size_t count = item_stack_.size() - (structure_index + 1);
145
159k
        auto first = item_stack_.begin() + (structure_index+1);
146
147
159k
        if (count > 0)
148
15.4k
        {
149
15.4k
            item_stack_[structure_index].value.template cast<typename Json::object_storage>().value().uninitialized_init(
150
15.4k
                &item_stack_[structure_index+1], count);
151
15.4k
        }
152
153
159k
        item_stack_.erase(first, item_stack_.end());
154
159k
        structure_stack_.pop_back();
155
159k
        if (structure_stack_.back().type_ == structure_type::root_t)
156
1.53k
        {
157
1.53k
            result_.swap(item_stack_.front().value);
158
1.53k
            item_stack_.pop_back();
159
1.53k
            is_valid_ = true;
160
1.53k
            JSONCONS_VISITOR_RETURN;
161
1.53k
        }
162
157k
        JSONCONS_VISITOR_RETURN;
163
159k
    }
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
179k
    {
167
179k
        if (structure_stack_.back().type_ == structure_type::root_t)
168
1.76k
        {
169
1.76k
            index_ = 0;
170
1.76k
            item_stack_.clear();
171
1.76k
            is_valid_ = false;
172
1.76k
        }
173
179k
        item_stack_.emplace_back(std::move(name_), index_++, json_array_arg, tag);
174
179k
        structure_stack_.emplace_back(structure_type::array_t, item_stack_.size()-1);
175
179k
        JSONCONS_VISITOR_RETURN;
176
179k
    }
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
179k
    {
167
179k
        if (structure_stack_.back().type_ == structure_type::root_t)
168
1.76k
        {
169
1.76k
            index_ = 0;
170
1.76k
            item_stack_.clear();
171
1.76k
            is_valid_ = false;
172
1.76k
        }
173
179k
        item_stack_.emplace_back(std::move(name_), index_++, json_array_arg, tag);
174
179k
        structure_stack_.emplace_back(structure_type::array_t, item_stack_.size()-1);
175
179k
        JSONCONS_VISITOR_RETURN;
176
179k
    }
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
22.8k
    {
180
22.8k
        JSONCONS_ASSERT(structure_stack_.size() > 1);
181
22.8k
        JSONCONS_ASSERT(structure_stack_.back().type_ == structure_type::array_t);
182
22.8k
        const size_t container_index = structure_stack_.back().container_index_;
183
22.8k
        JSONCONS_ASSERT(item_stack_.size() > container_index);
184
185
22.8k
        auto& container = item_stack_[container_index].value;
186
187
22.8k
        const size_t size = item_stack_.size() - (container_index + 1);
188
        //std::cout << "size on item stack: " << size << "\n";
189
190
22.8k
        if (size > 0)
191
6.48k
        {
192
6.48k
            container.reserve(size);
193
6.48k
            auto first = item_stack_.begin() + (container_index+1);
194
6.48k
            auto last = first + size;
195
4.87M
            for (auto it = first; it != last; ++it)
196
4.86M
            {
197
4.86M
                container.push_back(std::move((*it).value));
198
4.86M
            }
199
6.48k
            item_stack_.erase(first, item_stack_.end());
200
6.48k
        }
201
202
22.8k
        structure_stack_.pop_back();
203
22.8k
        if (structure_stack_.back().type_ == structure_type::root_t)
204
253
        {
205
253
            result_.swap(item_stack_.front().value);
206
253
            item_stack_.pop_back();
207
253
            is_valid_ = true;
208
253
            JSONCONS_VISITOR_RETURN;
209
253
        }
210
22.8k
        JSONCONS_VISITOR_RETURN;
211
22.8k
    }
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
22.8k
    {
180
22.8k
        JSONCONS_ASSERT(structure_stack_.size() > 1);
181
22.8k
        JSONCONS_ASSERT(structure_stack_.back().type_ == structure_type::array_t);
182
22.8k
        const size_t container_index = structure_stack_.back().container_index_;
183
22.8k
        JSONCONS_ASSERT(item_stack_.size() > container_index);
184
185
22.8k
        auto& container = item_stack_[container_index].value;
186
187
22.8k
        const size_t size = item_stack_.size() - (container_index + 1);
188
        //std::cout << "size on item stack: " << size << "\n";
189
190
22.8k
        if (size > 0)
191
6.48k
        {
192
6.48k
            container.reserve(size);
193
6.48k
            auto first = item_stack_.begin() + (container_index+1);
194
6.48k
            auto last = first + size;
195
4.87M
            for (auto it = first; it != last; ++it)
196
4.86M
            {
197
4.86M
                container.push_back(std::move((*it).value));
198
4.86M
            }
199
6.48k
            item_stack_.erase(first, item_stack_.end());
200
6.48k
        }
201
202
22.8k
        structure_stack_.pop_back();
203
22.8k
        if (structure_stack_.back().type_ == structure_type::root_t)
204
253
        {
205
253
            result_.swap(item_stack_.front().value);
206
253
            item_stack_.pop_back();
207
253
            is_valid_ = true;
208
253
            JSONCONS_VISITOR_RETURN;
209
253
        }
210
22.6k
        JSONCONS_VISITOR_RETURN;
211
22.8k
    }
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
2.82M
    {
215
2.82M
        name_ = key_type(name.data(),name.length(),allocator_);
216
2.82M
        JSONCONS_VISITOR_RETURN;
217
2.82M
    }
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
2.82M
    {
215
2.82M
        name_ = key_type(name.data(),name.length(),allocator_);
216
2.82M
        JSONCONS_VISITOR_RETURN;
217
2.82M
    }
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
63.5k
    {
221
63.5k
        switch (structure_stack_.back().type_)
222
63.5k
        {
223
5.49k
            case structure_type::object_t:
224
63.2k
            case structure_type::array_t:
225
63.2k
                item_stack_.emplace_back(std::move(name_), index_++, sv, tag);
226
63.2k
                break;
227
313
            case structure_type::root_t:
228
313
                result_ = Json(sv, tag, allocator_);
229
313
                is_valid_ = true;
230
313
                JSONCONS_VISITOR_RETURN;
231
63.5k
        }
232
63.5k
        JSONCONS_VISITOR_RETURN;
233
63.5k
    }
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
63.5k
    {
221
63.5k
        switch (structure_stack_.back().type_)
222
63.5k
        {
223
5.49k
            case structure_type::object_t:
224
63.2k
            case structure_type::array_t:
225
63.2k
                item_stack_.emplace_back(std::move(name_), index_++, sv, tag);
226
63.2k
                break;
227
313
            case structure_type::root_t:
228
313
                result_ = Json(sv, tag, allocator_);
229
313
                is_valid_ = true;
230
313
                JSONCONS_VISITOR_RETURN;
231
63.5k
        }
232
63.2k
        JSONCONS_VISITOR_RETURN;
233
63.5k
    }
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
0
    {
259
0
        switch (structure_stack_.back().type_)
260
0
        {
261
0
            case structure_type::object_t:
262
0
            case structure_type::array_t:
263
0
                item_stack_.emplace_back(std::move(name_), index_++, byte_string_arg, b, ext_tag);
264
0
                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
0
        }
270
0
        JSONCONS_VISITOR_RETURN;
271
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&, unsigned long, 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&, 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
55.0k
    {
278
55.0k
        switch (structure_stack_.back().type_)
279
55.0k
        {
280
4.58k
            case structure_type::object_t:
281
54.9k
            case structure_type::array_t:
282
54.9k
                item_stack_.emplace_back(std::move(name_), index_++, value, tag);
283
54.9k
                break;
284
123
            case structure_type::root_t:
285
123
                result_ = Json(value,tag);
286
123
                is_valid_ = true;
287
123
                JSONCONS_VISITOR_RETURN;
288
55.0k
        }
289
55.0k
        JSONCONS_VISITOR_RETURN;
290
55.0k
    }
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
55.0k
    {
278
55.0k
        switch (structure_stack_.back().type_)
279
55.0k
        {
280
4.58k
            case structure_type::object_t:
281
54.9k
            case structure_type::array_t:
282
54.9k
                item_stack_.emplace_back(std::move(name_), index_++, value, tag);
283
54.9k
                break;
284
123
            case structure_type::root_t:
285
123
                result_ = Json(value,tag);
286
123
                is_valid_ = true;
287
123
                JSONCONS_VISITOR_RETURN;
288
55.0k
        }
289
54.9k
        JSONCONS_VISITOR_RETURN;
290
55.0k
    }
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
15.8M
    {
297
15.8M
        switch (structure_stack_.back().type_)
298
15.8M
        {
299
2.75M
            case structure_type::object_t:
300
15.8M
            case structure_type::array_t:
301
15.8M
                item_stack_.emplace_back(std::move(name_), index_++, value, tag);
302
15.8M
                break;
303
162
            case structure_type::root_t:
304
162
                result_ = Json(value,tag);
305
162
                is_valid_ = true;
306
162
                JSONCONS_VISITOR_RETURN;
307
15.8M
        }
308
15.8M
        JSONCONS_VISITOR_RETURN;
309
15.8M
    }
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
15.8M
    {
297
15.8M
        switch (structure_stack_.back().type_)
298
15.8M
        {
299
2.75M
            case structure_type::object_t:
300
15.8M
            case structure_type::array_t:
301
15.8M
                item_stack_.emplace_back(std::move(name_), index_++, value, tag);
302
15.8M
                break;
303
162
            case structure_type::root_t:
304
162
                result_ = Json(value,tag);
305
162
                is_valid_ = true;
306
162
                JSONCONS_VISITOR_RETURN;
307
15.8M
        }
308
15.8M
        JSONCONS_VISITOR_RETURN;
309
15.8M
    }
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
56.2k
    {
335
56.2k
        switch (structure_stack_.back().type_)
336
56.2k
        {
337
2.55k
            case structure_type::object_t:
338
56.1k
            case structure_type::array_t:
339
56.1k
                item_stack_.emplace_back(std::move(name_), index_++, value, tag);
340
56.1k
                break;
341
16
            case structure_type::root_t:
342
16
                result_ = Json(value, tag);
343
16
                is_valid_ = true;
344
16
                JSONCONS_VISITOR_RETURN;
345
56.2k
        }
346
56.2k
        JSONCONS_VISITOR_RETURN;
347
56.2k
    }
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
56.2k
    {
335
56.2k
        switch (structure_stack_.back().type_)
336
56.2k
        {
337
2.55k
            case structure_type::object_t:
338
56.1k
            case structure_type::array_t:
339
56.1k
                item_stack_.emplace_back(std::move(name_), index_++, value, tag);
340
56.1k
                break;
341
16
            case structure_type::root_t:
342
16
                result_ = Json(value, tag);
343
16
                is_valid_ = true;
344
16
                JSONCONS_VISITOR_RETURN;
345
56.2k
        }
346
56.1k
        JSONCONS_VISITOR_RETURN;
347
56.2k
    }
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
3.54k
    {
351
3.54k
        switch (structure_stack_.back().type_)
352
3.54k
        {
353
225
            case structure_type::object_t:
354
3.54k
            case structure_type::array_t:
355
3.54k
                item_stack_.emplace_back(std::move(name_), index_++, value, tag);
356
3.54k
                break;
357
2
            case structure_type::root_t:
358
2
                result_ = Json(value, tag);
359
2
                is_valid_ = true;
360
2
                JSONCONS_VISITOR_RETURN;
361
3.54k
        }
362
3.54k
        JSONCONS_VISITOR_RETURN;
363
3.54k
    }
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
3.54k
    {
351
3.54k
        switch (structure_stack_.back().type_)
352
3.54k
        {
353
225
            case structure_type::object_t:
354
3.54k
            case structure_type::array_t:
355
3.54k
                item_stack_.emplace_back(std::move(name_), index_++, value, tag);
356
3.54k
                break;
357
2
            case structure_type::root_t:
358
2
                result_ = Json(value, tag);
359
2
                is_valid_ = true;
360
2
                JSONCONS_VISITOR_RETURN;
361
3.54k
        }
362
3.54k
        JSONCONS_VISITOR_RETURN;
363
3.54k
    }
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
1.44k
    {
367
1.44k
        switch (structure_stack_.back().type_)
368
1.44k
        {
369
287
            case structure_type::object_t:
370
1.44k
            case structure_type::array_t:
371
1.44k
                item_stack_.emplace_back(std::move(name_), index_++, null_type(), tag);
372
1.44k
                break;
373
1
            case structure_type::root_t:
374
1
                result_ = Json(null_type(), tag);
375
1
                is_valid_ = true;
376
1
                JSONCONS_VISITOR_RETURN;
377
1.44k
        }
378
1.44k
        JSONCONS_VISITOR_RETURN;
379
1.44k
    }
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
1.44k
    {
367
1.44k
        switch (structure_stack_.back().type_)
368
1.44k
        {
369
287
            case structure_type::object_t:
370
1.44k
            case structure_type::array_t:
371
1.44k
                item_stack_.emplace_back(std::move(name_), index_++, null_type(), tag);
372
1.44k
                break;
373
1
            case structure_type::root_t:
374
1
                result_ = Json(null_type(), tag);
375
1
                is_valid_ = true;
376
1
                JSONCONS_VISITOR_RETURN;
377
1.44k
        }
378
1.44k
        JSONCONS_VISITOR_RETURN;
379
1.44k
    }
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