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.
Files changed (155) hide show
  1. checksums.yaml +7 -0
  2. data/ext/jsoncons/extconf.rb +43 -0
  3. data/ext/jsoncons/jsoncons.cpp +161 -0
  4. data/ext/jsoncons/jsoncons.h +10 -0
  5. data/jsoncons.gemspec +44 -0
  6. data/lib/jsoncons/jsoncons/examples/input/address-book.json +13 -0
  7. data/lib/jsoncons/jsoncons/examples/input/books.json +28 -0
  8. data/lib/jsoncons/jsoncons/examples/input/countries.json +7 -0
  9. data/lib/jsoncons/jsoncons/examples/input/employees.json +30 -0
  10. data/lib/jsoncons/jsoncons/examples/input/jsonschema/name.json +15 -0
  11. data/lib/jsoncons/jsoncons/examples/input/multiple-json-objects.json +3 -0
  12. data/lib/jsoncons/jsoncons/examples/input/sales.csv +6 -0
  13. data/lib/jsoncons/jsoncons/examples/input/store.json +28 -0
  14. data/lib/jsoncons/jsoncons/examples/input/tasks.csv +6 -0
  15. data/lib/jsoncons/jsoncons/include/jsoncons/allocator_holder.hpp +38 -0
  16. data/lib/jsoncons/jsoncons/include/jsoncons/basic_json.hpp +5905 -0
  17. data/lib/jsoncons/jsoncons/include/jsoncons/bigint.hpp +1611 -0
  18. data/lib/jsoncons/jsoncons/include/jsoncons/byte_string.hpp +820 -0
  19. data/lib/jsoncons/jsoncons/include/jsoncons/config/binary_config.hpp +226 -0
  20. data/lib/jsoncons/jsoncons/include/jsoncons/config/compiler_support.hpp +375 -0
  21. data/lib/jsoncons/jsoncons/include/jsoncons/config/jsoncons_config.hpp +309 -0
  22. data/lib/jsoncons/jsoncons/include/jsoncons/config/version.hpp +40 -0
  23. data/lib/jsoncons/jsoncons/include/jsoncons/conv_error.hpp +218 -0
  24. data/lib/jsoncons/jsoncons/include/jsoncons/decode_json.hpp +209 -0
  25. data/lib/jsoncons/jsoncons/include/jsoncons/decode_traits.hpp +651 -0
  26. data/lib/jsoncons/jsoncons/include/jsoncons/detail/endian.hpp +44 -0
  27. data/lib/jsoncons/jsoncons/include/jsoncons/detail/grisu3.hpp +312 -0
  28. data/lib/jsoncons/jsoncons/include/jsoncons/detail/optional.hpp +483 -0
  29. data/lib/jsoncons/jsoncons/include/jsoncons/detail/parse_number.hpp +1133 -0
  30. data/lib/jsoncons/jsoncons/include/jsoncons/detail/span.hpp +188 -0
  31. data/lib/jsoncons/jsoncons/include/jsoncons/detail/string_view.hpp +537 -0
  32. data/lib/jsoncons/jsoncons/include/jsoncons/detail/string_wrapper.hpp +370 -0
  33. data/lib/jsoncons/jsoncons/include/jsoncons/detail/write_number.hpp +567 -0
  34. data/lib/jsoncons/jsoncons/include/jsoncons/encode_json.hpp +315 -0
  35. data/lib/jsoncons/jsoncons/include/jsoncons/encode_traits.hpp +378 -0
  36. data/lib/jsoncons/jsoncons/include/jsoncons/json.hpp +18 -0
  37. data/lib/jsoncons/jsoncons/include/jsoncons/json_array.hpp +324 -0
  38. data/lib/jsoncons/jsoncons/include/jsoncons/json_content_handler.hpp +12 -0
  39. data/lib/jsoncons/jsoncons/include/jsoncons/json_cursor.hpp +448 -0
  40. data/lib/jsoncons/jsoncons/include/jsoncons/json_decoder.hpp +420 -0
  41. data/lib/jsoncons/jsoncons/include/jsoncons/json_encoder.hpp +1587 -0
  42. data/lib/jsoncons/jsoncons/include/jsoncons/json_error.hpp +156 -0
  43. data/lib/jsoncons/jsoncons/include/jsoncons/json_exception.hpp +241 -0
  44. data/lib/jsoncons/jsoncons/include/jsoncons/json_filter.hpp +653 -0
  45. data/lib/jsoncons/jsoncons/include/jsoncons/json_fwd.hpp +23 -0
  46. data/lib/jsoncons/jsoncons/include/jsoncons/json_object.hpp +1772 -0
  47. data/lib/jsoncons/jsoncons/include/jsoncons/json_options.hpp +862 -0
  48. data/lib/jsoncons/jsoncons/include/jsoncons/json_parser.hpp +2900 -0
  49. data/lib/jsoncons/jsoncons/include/jsoncons/json_reader.hpp +731 -0
  50. data/lib/jsoncons/jsoncons/include/jsoncons/json_traits_macros.hpp +1072 -0
  51. data/lib/jsoncons/jsoncons/include/jsoncons/json_traits_macros_deprecated.hpp +144 -0
  52. data/lib/jsoncons/jsoncons/include/jsoncons/json_type.hpp +206 -0
  53. data/lib/jsoncons/jsoncons/include/jsoncons/json_type_traits.hpp +1830 -0
  54. data/lib/jsoncons/jsoncons/include/jsoncons/json_visitor.hpp +1560 -0
  55. data/lib/jsoncons/jsoncons/include/jsoncons/json_visitor2.hpp +2079 -0
  56. data/lib/jsoncons/jsoncons/include/jsoncons/pretty_print.hpp +89 -0
  57. data/lib/jsoncons/jsoncons/include/jsoncons/ser_context.hpp +62 -0
  58. data/lib/jsoncons/jsoncons/include/jsoncons/sink.hpp +289 -0
  59. data/lib/jsoncons/jsoncons/include/jsoncons/source.hpp +777 -0
  60. data/lib/jsoncons/jsoncons/include/jsoncons/source_adaptor.hpp +148 -0
  61. data/lib/jsoncons/jsoncons/include/jsoncons/staj2_cursor.hpp +1189 -0
  62. data/lib/jsoncons/jsoncons/include/jsoncons/staj_cursor.hpp +1254 -0
  63. data/lib/jsoncons/jsoncons/include/jsoncons/staj_iterator.hpp +449 -0
  64. data/lib/jsoncons/jsoncons/include/jsoncons/tag_type.hpp +245 -0
  65. data/lib/jsoncons/jsoncons/include/jsoncons/text_source_adaptor.hpp +144 -0
  66. data/lib/jsoncons/jsoncons/include/jsoncons/traits_extension.hpp +884 -0
  67. data/lib/jsoncons/jsoncons/include/jsoncons/typed_array_view.hpp +250 -0
  68. data/lib/jsoncons/jsoncons/include/jsoncons/unicode_traits.hpp +1330 -0
  69. data/lib/jsoncons/jsoncons/include/jsoncons/uri.hpp +635 -0
  70. data/lib/jsoncons/jsoncons/include/jsoncons/value_converter.hpp +340 -0
  71. data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson.hpp +23 -0
  72. data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_cursor.hpp +320 -0
  73. data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_decimal128.hpp +865 -0
  74. data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_encoder.hpp +585 -0
  75. data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_error.hpp +103 -0
  76. data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_oid.hpp +245 -0
  77. data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_options.hpp +75 -0
  78. data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_parser.hpp +645 -0
  79. data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_reader.hpp +92 -0
  80. data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_type.hpp +44 -0
  81. data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/decode_bson.hpp +201 -0
  82. data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/encode_bson.hpp +144 -0
  83. data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor.hpp +26 -0
  84. data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor_cursor.hpp +351 -0
  85. data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor_cursor2.hpp +265 -0
  86. data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor_detail.hpp +93 -0
  87. data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor_encoder.hpp +1766 -0
  88. data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor_error.hpp +105 -0
  89. data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor_options.hpp +113 -0
  90. data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor_parser.hpp +1942 -0
  91. data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor_reader.hpp +116 -0
  92. data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/decode_cbor.hpp +203 -0
  93. data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/encode_cbor.hpp +151 -0
  94. data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/csv.hpp +17 -0
  95. data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/csv_cursor.hpp +358 -0
  96. data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/csv_encoder.hpp +954 -0
  97. data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/csv_error.hpp +85 -0
  98. data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/csv_options.hpp +973 -0
  99. data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/csv_parser.hpp +2099 -0
  100. data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/csv_reader.hpp +348 -0
  101. data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/csv_serializer.hpp +12 -0
  102. data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/decode_csv.hpp +208 -0
  103. data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/encode_csv.hpp +122 -0
  104. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jmespath/jmespath.hpp +5215 -0
  105. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jmespath/jmespath_error.hpp +215 -0
  106. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpatch/jsonpatch.hpp +579 -0
  107. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpatch/jsonpatch_error.hpp +121 -0
  108. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpath/expression.hpp +3329 -0
  109. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpath/flatten.hpp +432 -0
  110. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpath/json_location.hpp +445 -0
  111. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpath/json_query.hpp +115 -0
  112. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpath/jsonpath.hpp +13 -0
  113. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpath/jsonpath_error.hpp +240 -0
  114. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpath/jsonpath_expression.hpp +2612 -0
  115. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpath/jsonpath_selector.hpp +1322 -0
  116. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpointer/jsonpointer.hpp +1577 -0
  117. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpointer/jsonpointer_error.hpp +119 -0
  118. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/format_validator.hpp +968 -0
  119. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/json_validator.hpp +120 -0
  120. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/jsonschema.hpp +13 -0
  121. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/jsonschema_error.hpp +105 -0
  122. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/jsonschema_version.hpp +18 -0
  123. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/keyword_validator.hpp +1745 -0
  124. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/keyword_validator_factory.hpp +556 -0
  125. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/schema_draft7.hpp +198 -0
  126. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/schema_location.hpp +200 -0
  127. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/schema_version.hpp +35 -0
  128. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/subschema.hpp +144 -0
  129. data/lib/jsoncons/jsoncons/include/jsoncons_ext/mergepatch/mergepatch.hpp +103 -0
  130. data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/decode_msgpack.hpp +202 -0
  131. data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/encode_msgpack.hpp +142 -0
  132. data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack.hpp +24 -0
  133. data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack_cursor.hpp +343 -0
  134. data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack_cursor2.hpp +259 -0
  135. data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack_encoder.hpp +753 -0
  136. data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack_error.hpp +94 -0
  137. data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack_options.hpp +74 -0
  138. data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack_parser.hpp +748 -0
  139. data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack_reader.hpp +116 -0
  140. data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack_type.hpp +63 -0
  141. data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/decode_ubjson.hpp +201 -0
  142. data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/encode_ubjson.hpp +142 -0
  143. data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/ubjson.hpp +23 -0
  144. data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/ubjson_cursor.hpp +307 -0
  145. data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/ubjson_encoder.hpp +502 -0
  146. data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/ubjson_error.hpp +100 -0
  147. data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/ubjson_options.hpp +87 -0
  148. data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/ubjson_parser.hpp +880 -0
  149. data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/ubjson_reader.hpp +92 -0
  150. data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/ubjson_type.hpp +43 -0
  151. data/lib/jsoncons/version.rb +5 -0
  152. data/lib/jsoncons.rb +33 -0
  153. data/test/jsoncons_test.rb +108 -0
  154. data/test/test_helper.rb +7 -0
  155. 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