jsoncons 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/ext/jsoncons/extconf.rb +43 -0
- data/ext/jsoncons/jsoncons.cpp +161 -0
- data/ext/jsoncons/jsoncons.h +10 -0
- data/jsoncons.gemspec +44 -0
- data/lib/jsoncons/jsoncons/examples/input/address-book.json +13 -0
- data/lib/jsoncons/jsoncons/examples/input/books.json +28 -0
- data/lib/jsoncons/jsoncons/examples/input/countries.json +7 -0
- data/lib/jsoncons/jsoncons/examples/input/employees.json +30 -0
- data/lib/jsoncons/jsoncons/examples/input/jsonschema/name.json +15 -0
- data/lib/jsoncons/jsoncons/examples/input/multiple-json-objects.json +3 -0
- data/lib/jsoncons/jsoncons/examples/input/sales.csv +6 -0
- data/lib/jsoncons/jsoncons/examples/input/store.json +28 -0
- data/lib/jsoncons/jsoncons/examples/input/tasks.csv +6 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/allocator_holder.hpp +38 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/basic_json.hpp +5905 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/bigint.hpp +1611 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/byte_string.hpp +820 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/config/binary_config.hpp +226 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/config/compiler_support.hpp +375 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/config/jsoncons_config.hpp +309 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/config/version.hpp +40 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/conv_error.hpp +218 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/decode_json.hpp +209 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/decode_traits.hpp +651 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/detail/endian.hpp +44 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/detail/grisu3.hpp +312 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/detail/optional.hpp +483 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/detail/parse_number.hpp +1133 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/detail/span.hpp +188 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/detail/string_view.hpp +537 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/detail/string_wrapper.hpp +370 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/detail/write_number.hpp +567 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/encode_json.hpp +315 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/encode_traits.hpp +378 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/json.hpp +18 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/json_array.hpp +324 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/json_content_handler.hpp +12 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/json_cursor.hpp +448 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/json_decoder.hpp +420 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/json_encoder.hpp +1587 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/json_error.hpp +156 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/json_exception.hpp +241 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/json_filter.hpp +653 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/json_fwd.hpp +23 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/json_object.hpp +1772 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/json_options.hpp +862 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/json_parser.hpp +2900 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/json_reader.hpp +731 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/json_traits_macros.hpp +1072 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/json_traits_macros_deprecated.hpp +144 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/json_type.hpp +206 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/json_type_traits.hpp +1830 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/json_visitor.hpp +1560 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/json_visitor2.hpp +2079 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/pretty_print.hpp +89 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/ser_context.hpp +62 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/sink.hpp +289 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/source.hpp +777 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/source_adaptor.hpp +148 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/staj2_cursor.hpp +1189 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/staj_cursor.hpp +1254 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/staj_iterator.hpp +449 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/tag_type.hpp +245 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/text_source_adaptor.hpp +144 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/traits_extension.hpp +884 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/typed_array_view.hpp +250 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/unicode_traits.hpp +1330 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/uri.hpp +635 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/value_converter.hpp +340 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson.hpp +23 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_cursor.hpp +320 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_decimal128.hpp +865 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_encoder.hpp +585 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_error.hpp +103 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_oid.hpp +245 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_options.hpp +75 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_parser.hpp +645 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_reader.hpp +92 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_type.hpp +44 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/decode_bson.hpp +201 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/encode_bson.hpp +144 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor.hpp +26 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor_cursor.hpp +351 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor_cursor2.hpp +265 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor_detail.hpp +93 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor_encoder.hpp +1766 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor_error.hpp +105 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor_options.hpp +113 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor_parser.hpp +1942 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor_reader.hpp +116 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/decode_cbor.hpp +203 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/encode_cbor.hpp +151 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/csv.hpp +17 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/csv_cursor.hpp +358 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/csv_encoder.hpp +954 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/csv_error.hpp +85 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/csv_options.hpp +973 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/csv_parser.hpp +2099 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/csv_reader.hpp +348 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/csv_serializer.hpp +12 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/decode_csv.hpp +208 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/encode_csv.hpp +122 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jmespath/jmespath.hpp +5215 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jmespath/jmespath_error.hpp +215 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpatch/jsonpatch.hpp +579 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpatch/jsonpatch_error.hpp +121 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpath/expression.hpp +3329 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpath/flatten.hpp +432 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpath/json_location.hpp +445 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpath/json_query.hpp +115 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpath/jsonpath.hpp +13 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpath/jsonpath_error.hpp +240 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpath/jsonpath_expression.hpp +2612 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpath/jsonpath_selector.hpp +1322 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpointer/jsonpointer.hpp +1577 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpointer/jsonpointer_error.hpp +119 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/format_validator.hpp +968 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/json_validator.hpp +120 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/jsonschema.hpp +13 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/jsonschema_error.hpp +105 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/jsonschema_version.hpp +18 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/keyword_validator.hpp +1745 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/keyword_validator_factory.hpp +556 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/schema_draft7.hpp +198 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/schema_location.hpp +200 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/schema_version.hpp +35 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/subschema.hpp +144 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/mergepatch/mergepatch.hpp +103 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/decode_msgpack.hpp +202 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/encode_msgpack.hpp +142 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack.hpp +24 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack_cursor.hpp +343 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack_cursor2.hpp +259 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack_encoder.hpp +753 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack_error.hpp +94 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack_options.hpp +74 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack_parser.hpp +748 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack_reader.hpp +116 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack_type.hpp +63 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/decode_ubjson.hpp +201 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/encode_ubjson.hpp +142 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/ubjson.hpp +23 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/ubjson_cursor.hpp +307 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/ubjson_encoder.hpp +502 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/ubjson_error.hpp +100 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/ubjson_options.hpp +87 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/ubjson_parser.hpp +880 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/ubjson_reader.hpp +92 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/ubjson_type.hpp +43 -0
- data/lib/jsoncons/version.rb +5 -0
- data/lib/jsoncons.rb +33 -0
- data/test/jsoncons_test.rb +108 -0
- data/test/test_helper.rb +7 -0
- metadata +268 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// Copyright 2018 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_HPP
|
|
8
|
+
#define JSONCONS_JSON_HPP
|
|
9
|
+
|
|
10
|
+
#include <jsoncons/basic_json.hpp>
|
|
11
|
+
#include <jsoncons/encode_json.hpp>
|
|
12
|
+
#include <jsoncons/decode_json.hpp>
|
|
13
|
+
#include <jsoncons/json_traits_macros.hpp>
|
|
14
|
+
#include <jsoncons/json_traits_macros_deprecated.hpp>
|
|
15
|
+
#include <jsoncons/staj_iterator.hpp>
|
|
16
|
+
|
|
17
|
+
#endif
|
|
18
|
+
|
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
// Copyright 2013 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_ARRAY_HPP
|
|
8
|
+
#define JSONCONS_JSON_ARRAY_HPP
|
|
9
|
+
|
|
10
|
+
#include <string>
|
|
11
|
+
#include <vector>
|
|
12
|
+
#include <exception>
|
|
13
|
+
#include <cstring>
|
|
14
|
+
#include <algorithm> // std::sort, std::stable_sort, std::lower_bound, std::unique
|
|
15
|
+
#include <utility>
|
|
16
|
+
#include <initializer_list>
|
|
17
|
+
#include <iterator> // std::iterator_traits
|
|
18
|
+
#include <memory> // std::allocator
|
|
19
|
+
#include <utility> // std::move
|
|
20
|
+
#include <cassert> // assert
|
|
21
|
+
#include <type_traits> // std::enable_if
|
|
22
|
+
#include <jsoncons/json_exception.hpp>
|
|
23
|
+
#include <jsoncons/allocator_holder.hpp>
|
|
24
|
+
|
|
25
|
+
namespace jsoncons {
|
|
26
|
+
|
|
27
|
+
// json_array
|
|
28
|
+
|
|
29
|
+
template <class Json,template<typename,typename> class SequenceContainer = std::vector>
|
|
30
|
+
class json_array : public allocator_holder<typename Json::allocator_type>
|
|
31
|
+
{
|
|
32
|
+
public:
|
|
33
|
+
using allocator_type = typename Json::allocator_type;
|
|
34
|
+
using value_type = Json;
|
|
35
|
+
private:
|
|
36
|
+
using value_allocator_type = typename std::allocator_traits<allocator_type>:: template rebind_alloc<value_type>;
|
|
37
|
+
using value_container_type = SequenceContainer<value_type,value_allocator_type>;
|
|
38
|
+
value_container_type elements_;
|
|
39
|
+
public:
|
|
40
|
+
using iterator = typename value_container_type::iterator;
|
|
41
|
+
using const_iterator = typename value_container_type::const_iterator;
|
|
42
|
+
using reference = typename std::iterator_traits<iterator>::reference;
|
|
43
|
+
using const_reference = typename std::iterator_traits<const_iterator>::reference;
|
|
44
|
+
|
|
45
|
+
using allocator_holder<allocator_type>::get_allocator;
|
|
46
|
+
|
|
47
|
+
json_array()
|
|
48
|
+
{
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
explicit json_array(const allocator_type& alloc)
|
|
52
|
+
: allocator_holder<allocator_type>(alloc),
|
|
53
|
+
elements_(value_allocator_type(alloc))
|
|
54
|
+
{
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
explicit json_array(std::size_t n,
|
|
58
|
+
const allocator_type& alloc = allocator_type())
|
|
59
|
+
: allocator_holder<allocator_type>(alloc),
|
|
60
|
+
elements_(n,Json(),value_allocator_type(alloc))
|
|
61
|
+
{
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
explicit json_array(std::size_t n,
|
|
65
|
+
const Json& value,
|
|
66
|
+
const allocator_type& alloc = allocator_type())
|
|
67
|
+
: allocator_holder<allocator_type>(alloc),
|
|
68
|
+
elements_(n,value,value_allocator_type(alloc))
|
|
69
|
+
{
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
template <class InputIterator>
|
|
73
|
+
json_array(InputIterator begin, InputIterator end, const allocator_type& alloc = allocator_type())
|
|
74
|
+
: allocator_holder<allocator_type>(alloc),
|
|
75
|
+
elements_(begin,end,value_allocator_type(alloc))
|
|
76
|
+
{
|
|
77
|
+
}
|
|
78
|
+
json_array(const json_array& val)
|
|
79
|
+
: allocator_holder<allocator_type>(val.get_allocator()),
|
|
80
|
+
elements_(val.elements_)
|
|
81
|
+
{
|
|
82
|
+
}
|
|
83
|
+
json_array(const json_array& val, const allocator_type& alloc)
|
|
84
|
+
: allocator_holder<allocator_type>(alloc),
|
|
85
|
+
elements_(val.elements_,value_allocator_type(alloc))
|
|
86
|
+
{
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
json_array(json_array&& val) noexcept
|
|
90
|
+
: allocator_holder<allocator_type>(val.get_allocator()),
|
|
91
|
+
elements_(std::move(val.elements_))
|
|
92
|
+
{
|
|
93
|
+
}
|
|
94
|
+
json_array(json_array&& val, const allocator_type& alloc)
|
|
95
|
+
: allocator_holder<allocator_type>(alloc),
|
|
96
|
+
elements_(std::move(val.elements_),value_allocator_type(alloc))
|
|
97
|
+
{
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
json_array(const std::initializer_list<Json>& init,
|
|
101
|
+
const allocator_type& alloc = allocator_type())
|
|
102
|
+
: allocator_holder<allocator_type>(alloc),
|
|
103
|
+
elements_(init,value_allocator_type(alloc))
|
|
104
|
+
{
|
|
105
|
+
}
|
|
106
|
+
~json_array() noexcept
|
|
107
|
+
{
|
|
108
|
+
flatten_and_destroy();
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
reference back()
|
|
112
|
+
{
|
|
113
|
+
return elements_.back();
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
const_reference back() const
|
|
117
|
+
{
|
|
118
|
+
return elements_.back();
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
void pop_back()
|
|
122
|
+
{
|
|
123
|
+
elements_.pop_back();
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
bool empty() const
|
|
127
|
+
{
|
|
128
|
+
return elements_.empty();
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
void swap(json_array& val) noexcept
|
|
132
|
+
{
|
|
133
|
+
elements_.swap(val.elements_);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
std::size_t size() const {return elements_.size();}
|
|
137
|
+
|
|
138
|
+
std::size_t capacity() const {return elements_.capacity();}
|
|
139
|
+
|
|
140
|
+
void clear() {elements_.clear();}
|
|
141
|
+
|
|
142
|
+
void shrink_to_fit()
|
|
143
|
+
{
|
|
144
|
+
for (std::size_t i = 0; i < elements_.size(); ++i)
|
|
145
|
+
{
|
|
146
|
+
elements_[i].shrink_to_fit();
|
|
147
|
+
}
|
|
148
|
+
elements_.shrink_to_fit();
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
void reserve(std::size_t n) {elements_.reserve(n);}
|
|
152
|
+
|
|
153
|
+
void resize(std::size_t n) {elements_.resize(n);}
|
|
154
|
+
|
|
155
|
+
void resize(std::size_t n, const Json& val) {elements_.resize(n,val);}
|
|
156
|
+
|
|
157
|
+
#if !defined(JSONCONS_NO_DEPRECATED)
|
|
158
|
+
JSONCONS_DEPRECATED_MSG("Instead, use erase(const_iterator, const_iterator)")
|
|
159
|
+
void remove_range(std::size_t from_index, std::size_t to_index)
|
|
160
|
+
{
|
|
161
|
+
JSONCONS_ASSERT(from_index <= to_index);
|
|
162
|
+
JSONCONS_ASSERT(to_index <= elements_.size());
|
|
163
|
+
elements_.erase(elements_.cbegin()+from_index,elements_.cbegin()+to_index);
|
|
164
|
+
}
|
|
165
|
+
#endif
|
|
166
|
+
|
|
167
|
+
iterator erase(const_iterator pos)
|
|
168
|
+
{
|
|
169
|
+
#if defined(JSONCONS_NO_VECTOR_ERASE_TAKES_CONST_ITERATOR)
|
|
170
|
+
iterator it = elements_.begin() + (pos - elements_.begin());
|
|
171
|
+
return elements_.erase(it);
|
|
172
|
+
#else
|
|
173
|
+
return elements_.erase(pos);
|
|
174
|
+
#endif
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
iterator erase(const_iterator first, const_iterator last)
|
|
178
|
+
{
|
|
179
|
+
#if defined(JSONCONS_NO_VECTOR_ERASE_TAKES_CONST_ITERATOR)
|
|
180
|
+
iterator it1 = elements_.begin() + (first - elements_.begin());
|
|
181
|
+
iterator it2 = elements_.begin() + (last - elements_.begin());
|
|
182
|
+
return elements_.erase(it1,it2);
|
|
183
|
+
#else
|
|
184
|
+
return elements_.erase(first,last);
|
|
185
|
+
#endif
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
Json& operator[](std::size_t i) {return elements_[i];}
|
|
189
|
+
|
|
190
|
+
const Json& operator[](std::size_t i) const {return elements_[i];}
|
|
191
|
+
|
|
192
|
+
// push_back
|
|
193
|
+
|
|
194
|
+
template <class T, class A=allocator_type>
|
|
195
|
+
typename std::enable_if<traits_extension::is_stateless<A>::value,void>::type
|
|
196
|
+
push_back(T&& value)
|
|
197
|
+
{
|
|
198
|
+
elements_.emplace_back(std::forward<T>(value));
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
template <class T, class A=allocator_type>
|
|
202
|
+
typename std::enable_if<!traits_extension::is_stateless<A>::value,void>::type
|
|
203
|
+
push_back(T&& value)
|
|
204
|
+
{
|
|
205
|
+
elements_.emplace_back(std::forward<T>(value),get_allocator());
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
template <class T, class A=allocator_type>
|
|
209
|
+
typename std::enable_if<traits_extension::is_stateless<A>::value,iterator>::type
|
|
210
|
+
insert(const_iterator pos, T&& value)
|
|
211
|
+
{
|
|
212
|
+
#if defined(JSONCONS_NO_VECTOR_ERASE_TAKES_CONST_ITERATOR)
|
|
213
|
+
iterator it = elements_.begin() + (pos - elements_.begin());
|
|
214
|
+
return elements_.emplace(it, std::forward<T>(value));
|
|
215
|
+
#else
|
|
216
|
+
return elements_.emplace(pos, std::forward<T>(value));
|
|
217
|
+
#endif
|
|
218
|
+
}
|
|
219
|
+
template <class T, class A=allocator_type>
|
|
220
|
+
typename std::enable_if<!traits_extension::is_stateless<A>::value,iterator>::type
|
|
221
|
+
insert(const_iterator pos, T&& value)
|
|
222
|
+
{
|
|
223
|
+
#if defined(JSONCONS_NO_VECTOR_ERASE_TAKES_CONST_ITERATOR)
|
|
224
|
+
iterator it = elements_.begin() + (pos - elements_.begin());
|
|
225
|
+
return elements_.emplace(it, std::forward<T>(value), get_allocator());
|
|
226
|
+
#else
|
|
227
|
+
return elements_.emplace(pos, std::forward<T>(value), get_allocator());
|
|
228
|
+
#endif
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
template <class InputIt>
|
|
232
|
+
iterator insert(const_iterator pos, InputIt first, InputIt last)
|
|
233
|
+
{
|
|
234
|
+
#if defined(JSONCONS_NO_VECTOR_ERASE_TAKES_CONST_ITERATOR)
|
|
235
|
+
iterator it = elements_.begin() + (pos - elements_.begin());
|
|
236
|
+
elements_.insert(it, first, last);
|
|
237
|
+
return first == last ? it : it + 1;
|
|
238
|
+
#else
|
|
239
|
+
return elements_.insert(pos, first, last);
|
|
240
|
+
#endif
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
template <class A=allocator_type, class... Args>
|
|
244
|
+
typename std::enable_if<traits_extension::is_stateless<A>::value,iterator>::type
|
|
245
|
+
emplace(const_iterator pos, Args&&... args)
|
|
246
|
+
{
|
|
247
|
+
#if defined(JSONCONS_NO_VECTOR_ERASE_TAKES_CONST_ITERATOR)
|
|
248
|
+
iterator it = elements_.begin() + (pos - elements_.begin());
|
|
249
|
+
return elements_.emplace(it, std::forward<Args>(args)...);
|
|
250
|
+
#else
|
|
251
|
+
return elements_.emplace(pos, std::forward<Args>(args)...);
|
|
252
|
+
#endif
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
template <class... Args>
|
|
256
|
+
Json& emplace_back(Args&&... args)
|
|
257
|
+
{
|
|
258
|
+
elements_.emplace_back(std::forward<Args>(args)...);
|
|
259
|
+
return elements_.back();
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
iterator begin() {return elements_.begin();}
|
|
263
|
+
|
|
264
|
+
iterator end() {return elements_.end();}
|
|
265
|
+
|
|
266
|
+
const_iterator begin() const {return elements_.begin();}
|
|
267
|
+
|
|
268
|
+
const_iterator end() const {return elements_.end();}
|
|
269
|
+
|
|
270
|
+
bool operator==(const json_array& rhs) const noexcept
|
|
271
|
+
{
|
|
272
|
+
return elements_ == rhs.elements_;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
bool operator<(const json_array& rhs) const noexcept
|
|
276
|
+
{
|
|
277
|
+
return elements_ < rhs.elements_;
|
|
278
|
+
}
|
|
279
|
+
private:
|
|
280
|
+
|
|
281
|
+
json_array& operator=(const json_array&) = delete;
|
|
282
|
+
|
|
283
|
+
void flatten_and_destroy() noexcept
|
|
284
|
+
{
|
|
285
|
+
while (!elements_.empty())
|
|
286
|
+
{
|
|
287
|
+
value_type current = std::move(elements_.back());
|
|
288
|
+
elements_.pop_back();
|
|
289
|
+
switch (current.storage_kind())
|
|
290
|
+
{
|
|
291
|
+
case json_storage_kind::array_value:
|
|
292
|
+
{
|
|
293
|
+
for (auto&& item : current.array_range())
|
|
294
|
+
{
|
|
295
|
+
if (item.size() > 0) // non-empty object or array
|
|
296
|
+
{
|
|
297
|
+
elements_.push_back(std::move(item));
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
current.clear();
|
|
301
|
+
break;
|
|
302
|
+
}
|
|
303
|
+
case json_storage_kind::object_value:
|
|
304
|
+
{
|
|
305
|
+
for (auto&& kv : current.object_range())
|
|
306
|
+
{
|
|
307
|
+
if (kv.value().size() > 0) // non-empty object or array
|
|
308
|
+
{
|
|
309
|
+
elements_.push_back(std::move(kv.value()));
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
current.clear();
|
|
313
|
+
break;
|
|
314
|
+
}
|
|
315
|
+
default:
|
|
316
|
+
break;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
};
|
|
321
|
+
|
|
322
|
+
} // namespace jsoncons
|
|
323
|
+
|
|
324
|
+
#endif
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// Copyright 2018 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_CONTENT_HANDLER_HPP
|
|
8
|
+
#define JSONCONS_JSON_CONTENT_HANDLER_HPP
|
|
9
|
+
|
|
10
|
+
#include <jsoncons/json_visitor.hpp>
|
|
11
|
+
|
|
12
|
+
#endif
|