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,309 @@
|
|
|
1
|
+
// Copyright 2019 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_CONFIG_JSONCONS_CONFIG_HPP
|
|
8
|
+
#define JSONCONS_CONFIG_JSONCONS_CONFIG_HPP
|
|
9
|
+
|
|
10
|
+
#include <type_traits>
|
|
11
|
+
#include <limits>
|
|
12
|
+
#include <jsoncons/config/compiler_support.hpp>
|
|
13
|
+
#include <jsoncons/config/binary_config.hpp>
|
|
14
|
+
|
|
15
|
+
#if !defined(JSONCONS_HAS_STD_STRING_VIEW)
|
|
16
|
+
#include <jsoncons/detail/string_view.hpp>
|
|
17
|
+
namespace jsoncons {
|
|
18
|
+
using jsoncons::detail::basic_string_view;
|
|
19
|
+
using string_view = basic_string_view<char, std::char_traits<char>>;
|
|
20
|
+
using wstring_view = basic_string_view<wchar_t, std::char_traits<wchar_t>>;
|
|
21
|
+
}
|
|
22
|
+
#else
|
|
23
|
+
#include <string_view>
|
|
24
|
+
namespace jsoncons {
|
|
25
|
+
using std::basic_string_view;
|
|
26
|
+
using std::string_view;
|
|
27
|
+
using std::wstring_view;
|
|
28
|
+
}
|
|
29
|
+
#endif
|
|
30
|
+
|
|
31
|
+
#if !defined(JSONCONS_HAS_STD_SPAN)
|
|
32
|
+
#include <jsoncons/detail/span.hpp>
|
|
33
|
+
namespace jsoncons {
|
|
34
|
+
using jsoncons::detail::span;
|
|
35
|
+
}
|
|
36
|
+
#else
|
|
37
|
+
#include <span>
|
|
38
|
+
namespace jsoncons {
|
|
39
|
+
using std::span;
|
|
40
|
+
}
|
|
41
|
+
#endif
|
|
42
|
+
|
|
43
|
+
#if defined(JSONCONS_HAS_STD_OPTIONAL)
|
|
44
|
+
#include <optional>
|
|
45
|
+
namespace jsoncons {
|
|
46
|
+
using std::optional;
|
|
47
|
+
}
|
|
48
|
+
#elif defined(JSONCONS_HAS_BOOST_OPTIONAL)
|
|
49
|
+
#include <boost/optional.hpp>
|
|
50
|
+
namespace jsoncons {
|
|
51
|
+
using boost::optional;
|
|
52
|
+
}
|
|
53
|
+
#else
|
|
54
|
+
#include <jsoncons/detail/optional.hpp>
|
|
55
|
+
namespace jsoncons {
|
|
56
|
+
using jsoncons::detail::optional;
|
|
57
|
+
}
|
|
58
|
+
#endif // !defined(JSONCONS_HAS_STD_OPTIONAL)
|
|
59
|
+
|
|
60
|
+
#if !defined(JSONCONS_HAS_STD_ENDIAN)
|
|
61
|
+
#include <jsoncons/detail/endian.hpp>
|
|
62
|
+
namespace jsoncons {
|
|
63
|
+
using jsoncons::detail::endian;
|
|
64
|
+
}
|
|
65
|
+
#else
|
|
66
|
+
#include <bit>
|
|
67
|
+
namespace jsoncons
|
|
68
|
+
{
|
|
69
|
+
using std::endian;
|
|
70
|
+
}
|
|
71
|
+
#endif
|
|
72
|
+
|
|
73
|
+
#if !defined(JSONCONS_HAS_STD_MAKE_UNIQUE)
|
|
74
|
+
|
|
75
|
+
#include <cstddef>
|
|
76
|
+
#include <memory>
|
|
77
|
+
#include <type_traits>
|
|
78
|
+
#include <utility>
|
|
79
|
+
|
|
80
|
+
namespace jsoncons {
|
|
81
|
+
|
|
82
|
+
template<class T>
|
|
83
|
+
struct unique_if
|
|
84
|
+
{
|
|
85
|
+
using value_is_not_array = std::unique_ptr<T>;
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
template<class T>
|
|
89
|
+
struct unique_if<T[]>
|
|
90
|
+
{
|
|
91
|
+
typedef std::unique_ptr<T[]> value_is_array_of_unknown_bound;
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
template<class T, std::size_t N>
|
|
95
|
+
struct unique_if<T[N]> {
|
|
96
|
+
using value_is_array_of_known_bound = void;
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
template<class T, class... Args>
|
|
100
|
+
typename unique_if<T>::value_is_not_array
|
|
101
|
+
make_unique(Args&&... args)
|
|
102
|
+
{
|
|
103
|
+
return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
template<class T>
|
|
107
|
+
typename unique_if<T>::value_is_array_of_unknown_bound
|
|
108
|
+
make_unique(std::size_t n)
|
|
109
|
+
{
|
|
110
|
+
using U = typename std::remove_extent<T>::type;
|
|
111
|
+
return std::unique_ptr<T>(new U[n]());
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
template<class T, class... Args>
|
|
115
|
+
typename unique_if<T>::value_is_array_of_known_bound
|
|
116
|
+
make_unique(Args&&...) = delete;
|
|
117
|
+
} // jsoncons
|
|
118
|
+
|
|
119
|
+
#else
|
|
120
|
+
|
|
121
|
+
#include <memory>
|
|
122
|
+
namespace jsoncons
|
|
123
|
+
{
|
|
124
|
+
using std::make_unique;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
#endif // !defined(JSONCONS_HAS_STD_MAKE_UNIQUE)
|
|
128
|
+
|
|
129
|
+
namespace jsoncons {
|
|
130
|
+
namespace binary {
|
|
131
|
+
|
|
132
|
+
// native_to_big
|
|
133
|
+
|
|
134
|
+
template<typename T, class OutputIt, class Endian=endian>
|
|
135
|
+
typename std::enable_if<Endian::native == Endian::big,void>::type
|
|
136
|
+
native_to_big(T val, OutputIt d_first)
|
|
137
|
+
{
|
|
138
|
+
uint8_t buf[sizeof(T)];
|
|
139
|
+
std::memcpy(buf, &val, sizeof(T));
|
|
140
|
+
for (auto item : buf)
|
|
141
|
+
{
|
|
142
|
+
*d_first++ = item;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
template<typename T, class OutputIt, class Endian=endian>
|
|
147
|
+
typename std::enable_if<Endian::native == Endian::little,void>::type
|
|
148
|
+
native_to_big(T val, OutputIt d_first)
|
|
149
|
+
{
|
|
150
|
+
T val2 = byte_swap(val);
|
|
151
|
+
uint8_t buf[sizeof(T)];
|
|
152
|
+
std::memcpy(buf, &val2, sizeof(T));
|
|
153
|
+
for (auto item : buf)
|
|
154
|
+
{
|
|
155
|
+
*d_first++ = item;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// native_to_little
|
|
160
|
+
|
|
161
|
+
template<typename T, class OutputIt, class Endian = endian>
|
|
162
|
+
typename std::enable_if<Endian::native == Endian::little,void>::type
|
|
163
|
+
native_to_little(T val, OutputIt d_first)
|
|
164
|
+
{
|
|
165
|
+
uint8_t buf[sizeof(T)];
|
|
166
|
+
std::memcpy(buf, &val, sizeof(T));
|
|
167
|
+
for (auto item : buf)
|
|
168
|
+
{
|
|
169
|
+
*d_first++ = item;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
template<typename T, class OutputIt, class Endian=endian>
|
|
174
|
+
typename std::enable_if<Endian::native == Endian::big, void>::type
|
|
175
|
+
native_to_little(T val, OutputIt d_first)
|
|
176
|
+
{
|
|
177
|
+
T val2 = byte_swap(val);
|
|
178
|
+
uint8_t buf[sizeof(T)];
|
|
179
|
+
std::memcpy(buf, &val2, sizeof(T));
|
|
180
|
+
for (auto item : buf)
|
|
181
|
+
{
|
|
182
|
+
*d_first++ = item;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// big_to_native
|
|
187
|
+
|
|
188
|
+
template<class T,class Endian=endian>
|
|
189
|
+
typename std::enable_if<Endian::native == Endian::big,T>::type
|
|
190
|
+
big_to_native(const uint8_t* first, std::size_t count)
|
|
191
|
+
{
|
|
192
|
+
if (sizeof(T) > count)
|
|
193
|
+
{
|
|
194
|
+
return T{};
|
|
195
|
+
}
|
|
196
|
+
T val;
|
|
197
|
+
std::memcpy(&val,first,sizeof(T));
|
|
198
|
+
return val;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
template<class T,class Endian=endian>
|
|
202
|
+
typename std::enable_if<Endian::native == Endian::little,T>::type
|
|
203
|
+
big_to_native(const uint8_t* first, std::size_t count)
|
|
204
|
+
{
|
|
205
|
+
if (sizeof(T) > count)
|
|
206
|
+
{
|
|
207
|
+
return T{};
|
|
208
|
+
}
|
|
209
|
+
T val;
|
|
210
|
+
std::memcpy(&val,first,sizeof(T));
|
|
211
|
+
return byte_swap(val);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// little_to_native
|
|
215
|
+
|
|
216
|
+
template<class T,class Endian=endian>
|
|
217
|
+
typename std::enable_if<Endian::native == Endian::little,T>::type
|
|
218
|
+
little_to_native(const uint8_t* first, std::size_t count)
|
|
219
|
+
{
|
|
220
|
+
if (sizeof(T) > count)
|
|
221
|
+
{
|
|
222
|
+
return T{};
|
|
223
|
+
}
|
|
224
|
+
T val;
|
|
225
|
+
std::memcpy(&val,first,sizeof(T));
|
|
226
|
+
return val;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
template<class T,class Endian=endian>
|
|
230
|
+
typename std::enable_if<Endian::native == Endian::big,T>::type
|
|
231
|
+
little_to_native(const uint8_t* first, std::size_t count)
|
|
232
|
+
{
|
|
233
|
+
if (sizeof(T) > count)
|
|
234
|
+
{
|
|
235
|
+
return T{};
|
|
236
|
+
}
|
|
237
|
+
T val;
|
|
238
|
+
std::memcpy(&val,first,sizeof(T));
|
|
239
|
+
return byte_swap(val);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
} // binary
|
|
243
|
+
} // jsoncons
|
|
244
|
+
|
|
245
|
+
namespace jsoncons {
|
|
246
|
+
|
|
247
|
+
template<typename CharT>
|
|
248
|
+
constexpr const CharT* cstring_constant_of_type(const char* c, const wchar_t* w);
|
|
249
|
+
|
|
250
|
+
template<> inline
|
|
251
|
+
constexpr const char* cstring_constant_of_type<char>(const char* c, const wchar_t*)
|
|
252
|
+
{
|
|
253
|
+
return c;
|
|
254
|
+
}
|
|
255
|
+
template<> inline
|
|
256
|
+
constexpr const wchar_t* cstring_constant_of_type<wchar_t>(const char*, const wchar_t* w)
|
|
257
|
+
{
|
|
258
|
+
return w;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
template<typename CharT>
|
|
262
|
+
std::basic_string<CharT> string_constant_of_type(const char* c, const wchar_t* w);
|
|
263
|
+
|
|
264
|
+
template<> inline
|
|
265
|
+
std::string string_constant_of_type<char>(const char* c, const wchar_t*)
|
|
266
|
+
{
|
|
267
|
+
return std::string(c);
|
|
268
|
+
}
|
|
269
|
+
template<> inline
|
|
270
|
+
std::wstring string_constant_of_type<wchar_t>(const char*, const wchar_t* w)
|
|
271
|
+
{
|
|
272
|
+
return std::wstring(w);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
template<typename CharT>
|
|
276
|
+
jsoncons::basic_string_view<CharT> string_view_constant_of_type(const char* c, const wchar_t* w);
|
|
277
|
+
|
|
278
|
+
template<> inline
|
|
279
|
+
jsoncons::string_view string_view_constant_of_type<char>(const char* c, const wchar_t*)
|
|
280
|
+
{
|
|
281
|
+
return jsoncons::string_view(c);
|
|
282
|
+
}
|
|
283
|
+
template<> inline
|
|
284
|
+
jsoncons::wstring_view string_view_constant_of_type<wchar_t>(const char*, const wchar_t* w)
|
|
285
|
+
{
|
|
286
|
+
return jsoncons::wstring_view(w);
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
} // jsoncons
|
|
290
|
+
|
|
291
|
+
#define JSONCONS_EXPAND(X) X
|
|
292
|
+
#define JSONCONS_QUOTE(Prefix, A) JSONCONS_EXPAND(Prefix ## #A)
|
|
293
|
+
#define JSONCONS_WIDEN(A) JSONCONS_EXPAND(L ## A)
|
|
294
|
+
|
|
295
|
+
#define JSONCONS_CSTRING_CONSTANT(CharT, Str) cstring_constant_of_type<CharT>(Str, JSONCONS_WIDEN(Str))
|
|
296
|
+
#define JSONCONS_STRING_CONSTANT(CharT, Str) string_constant_of_type<CharT>(Str, JSONCONS_WIDEN(Str))
|
|
297
|
+
#define JSONCONS_STRING_VIEW_CONSTANT(CharT, Str) string_view_constant_of_type<CharT>(Str, JSONCONS_WIDEN(Str))
|
|
298
|
+
|
|
299
|
+
#if defined(__clang__)
|
|
300
|
+
#define JSONCONS_HAS_STD_REGEX 1
|
|
301
|
+
#elif (defined(__GNUC__) && (__GNUC__ == 4)) && (defined(__GNUC__) && __GNUC_MINOR__ < 9)
|
|
302
|
+
// GCC 4.8 has broken regex support: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53631
|
|
303
|
+
#else
|
|
304
|
+
#define JSONCONS_HAS_STD_REGEX 1
|
|
305
|
+
#endif
|
|
306
|
+
|
|
307
|
+
#endif // JSONCONS_CONFIG_JSONCONS_CONFIG_HPP
|
|
308
|
+
|
|
309
|
+
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// Copyright 2017 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_VERSION_HPP
|
|
8
|
+
#define JSONCONS_VERSION_HPP
|
|
9
|
+
|
|
10
|
+
#include <iostream>
|
|
11
|
+
|
|
12
|
+
#define JSONCONS_VERSION_MAJOR 0
|
|
13
|
+
#define JSONCONS_VERSION_MINOR 169
|
|
14
|
+
#define JSONCONS_VERSION_PATCH 0
|
|
15
|
+
|
|
16
|
+
namespace jsoncons {
|
|
17
|
+
|
|
18
|
+
struct versioning_info
|
|
19
|
+
{
|
|
20
|
+
unsigned int const major;
|
|
21
|
+
unsigned int const minor;
|
|
22
|
+
unsigned int const patch;
|
|
23
|
+
|
|
24
|
+
friend std::ostream& operator<<(std::ostream& os, const versioning_info& ver)
|
|
25
|
+
{
|
|
26
|
+
os << ver.major << '.'
|
|
27
|
+
<< ver.minor << '.'
|
|
28
|
+
<< ver.patch;
|
|
29
|
+
return os;
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
constexpr versioning_info version()
|
|
34
|
+
{
|
|
35
|
+
return versioning_info{JSONCONS_VERSION_MAJOR, JSONCONS_VERSION_MINOR, JSONCONS_VERSION_PATCH};
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
#endif
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
/// Copyright 2019 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_CONV_ERROR_HPP
|
|
8
|
+
#define JSONCONS_CONV_ERROR_HPP
|
|
9
|
+
|
|
10
|
+
#include <system_error>
|
|
11
|
+
#include <jsoncons/config/jsoncons_config.hpp>
|
|
12
|
+
|
|
13
|
+
namespace jsoncons {
|
|
14
|
+
|
|
15
|
+
class conv_error : public std::system_error, public virtual json_exception
|
|
16
|
+
{
|
|
17
|
+
std::size_t line_number_;
|
|
18
|
+
std::size_t column_number_;
|
|
19
|
+
mutable std::string what_;
|
|
20
|
+
public:
|
|
21
|
+
conv_error(std::error_code ec)
|
|
22
|
+
: std::system_error(ec), line_number_(0), column_number_(0)
|
|
23
|
+
{
|
|
24
|
+
}
|
|
25
|
+
conv_error(std::error_code ec, const std::string& what_arg)
|
|
26
|
+
: std::system_error(ec, what_arg), line_number_(0), column_number_(0)
|
|
27
|
+
{
|
|
28
|
+
}
|
|
29
|
+
conv_error(std::error_code ec, std::size_t position)
|
|
30
|
+
: std::system_error(ec), line_number_(0), column_number_(position)
|
|
31
|
+
{
|
|
32
|
+
}
|
|
33
|
+
conv_error(std::error_code ec, std::size_t line, std::size_t column)
|
|
34
|
+
: std::system_error(ec), line_number_(line), column_number_(column)
|
|
35
|
+
{
|
|
36
|
+
}
|
|
37
|
+
conv_error(const conv_error& other) = default;
|
|
38
|
+
|
|
39
|
+
conv_error(conv_error&& other) = default;
|
|
40
|
+
|
|
41
|
+
const char* what() const noexcept override
|
|
42
|
+
{
|
|
43
|
+
if (what_.empty())
|
|
44
|
+
{
|
|
45
|
+
JSONCONS_TRY
|
|
46
|
+
{
|
|
47
|
+
what_.append(std::system_error::what());
|
|
48
|
+
if (line_number_ != 0 && column_number_ != 0)
|
|
49
|
+
{
|
|
50
|
+
what_.append(" at line ");
|
|
51
|
+
what_.append(std::to_string(line_number_));
|
|
52
|
+
what_.append(" and column ");
|
|
53
|
+
what_.append(std::to_string(column_number_));
|
|
54
|
+
}
|
|
55
|
+
else if (column_number_ != 0)
|
|
56
|
+
{
|
|
57
|
+
what_.append(" at position ");
|
|
58
|
+
what_.append(std::to_string(column_number_));
|
|
59
|
+
}
|
|
60
|
+
return what_.c_str();
|
|
61
|
+
}
|
|
62
|
+
JSONCONS_CATCH(...)
|
|
63
|
+
{
|
|
64
|
+
return std::system_error::what();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
else
|
|
68
|
+
{
|
|
69
|
+
return what_.c_str();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
std::size_t line() const noexcept
|
|
74
|
+
{
|
|
75
|
+
return line_number_;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
std::size_t column() const noexcept
|
|
79
|
+
{
|
|
80
|
+
return column_number_;
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
enum class conv_errc
|
|
85
|
+
{
|
|
86
|
+
success = 0,
|
|
87
|
+
conversion_failed,
|
|
88
|
+
not_utf8,
|
|
89
|
+
not_wide_char,
|
|
90
|
+
not_vector,
|
|
91
|
+
not_array,
|
|
92
|
+
not_map,
|
|
93
|
+
not_pair,
|
|
94
|
+
not_string,
|
|
95
|
+
not_string_view,
|
|
96
|
+
not_byte_string,
|
|
97
|
+
not_byte_string_view,
|
|
98
|
+
not_integer,
|
|
99
|
+
not_signed_integer,
|
|
100
|
+
not_unsigned_integer,
|
|
101
|
+
not_bigint,
|
|
102
|
+
not_double,
|
|
103
|
+
not_bool,
|
|
104
|
+
not_variant,
|
|
105
|
+
not_nullptr,
|
|
106
|
+
not_jsoncons_null_type,
|
|
107
|
+
not_bitset,
|
|
108
|
+
not_base64,
|
|
109
|
+
not_base64url,
|
|
110
|
+
not_base16
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
template <class InputIt>
|
|
114
|
+
struct decode_result
|
|
115
|
+
{
|
|
116
|
+
InputIt it;
|
|
117
|
+
conv_errc ec;
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
#if !defined(JSONCONS_NO_DEPRECATED)
|
|
121
|
+
JSONCONS_DEPRECATED_MSG("Instead, use conv_error") typedef conv_error convert_error;
|
|
122
|
+
#endif
|
|
123
|
+
|
|
124
|
+
} // namespace jsoncons
|
|
125
|
+
|
|
126
|
+
namespace std {
|
|
127
|
+
template<>
|
|
128
|
+
struct is_error_code_enum<jsoncons::conv_errc> : public true_type
|
|
129
|
+
{
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
namespace jsoncons {
|
|
134
|
+
|
|
135
|
+
namespace detail {
|
|
136
|
+
class conv_error_category_impl
|
|
137
|
+
: public std::error_category
|
|
138
|
+
{
|
|
139
|
+
public:
|
|
140
|
+
const char* name() const noexcept override
|
|
141
|
+
{
|
|
142
|
+
return "jsoncons/convert";
|
|
143
|
+
}
|
|
144
|
+
std::string message(int ev) const override
|
|
145
|
+
{
|
|
146
|
+
switch (static_cast<conv_errc>(ev))
|
|
147
|
+
{
|
|
148
|
+
case conv_errc::conversion_failed:
|
|
149
|
+
return "Unable to convert into the provided type";
|
|
150
|
+
case conv_errc::not_utf8:
|
|
151
|
+
return "Cannot convert string to UTF-8";
|
|
152
|
+
case conv_errc::not_wide_char:
|
|
153
|
+
return "Cannot convert string to wide characters";
|
|
154
|
+
case conv_errc::not_vector:
|
|
155
|
+
return "Cannot convert to vector";
|
|
156
|
+
case conv_errc::not_array:
|
|
157
|
+
return "Cannot convert to std::array";
|
|
158
|
+
case conv_errc::not_map:
|
|
159
|
+
return "Cannot convert to map";
|
|
160
|
+
case conv_errc::not_pair:
|
|
161
|
+
return "Cannot convert to std::pair";
|
|
162
|
+
case conv_errc::not_string:
|
|
163
|
+
return "Cannot convert to string";
|
|
164
|
+
case conv_errc::not_string_view:
|
|
165
|
+
return "Cannot convert to string_view";
|
|
166
|
+
case conv_errc::not_byte_string:
|
|
167
|
+
return "Cannot convert to byte_string";
|
|
168
|
+
case conv_errc::not_byte_string_view:
|
|
169
|
+
return "Cannot convert to byte_string_view";
|
|
170
|
+
case conv_errc::not_integer:
|
|
171
|
+
return "Cannot convert to integer";
|
|
172
|
+
case conv_errc::not_signed_integer:
|
|
173
|
+
return "Cannot convert to signed integer";
|
|
174
|
+
case conv_errc::not_unsigned_integer:
|
|
175
|
+
return "Cannot convert to unsigned integer";
|
|
176
|
+
case conv_errc::not_bigint:
|
|
177
|
+
return "Cannot convert to bigint";
|
|
178
|
+
case conv_errc::not_double:
|
|
179
|
+
return "Cannot convert to double";
|
|
180
|
+
case conv_errc::not_bool:
|
|
181
|
+
return "Cannot convert to bool";
|
|
182
|
+
case conv_errc::not_variant:
|
|
183
|
+
return "Cannot convert to std::variant";
|
|
184
|
+
case conv_errc::not_nullptr:
|
|
185
|
+
return "Cannot convert to std::nullptr_t";
|
|
186
|
+
case conv_errc::not_jsoncons_null_type:
|
|
187
|
+
return "Cannot convert to jsoncons::null_type";
|
|
188
|
+
case conv_errc::not_bitset:
|
|
189
|
+
return "Cannot convert to std::bitset";
|
|
190
|
+
case conv_errc::not_base64:
|
|
191
|
+
return "Input is not a base64 encoded string";
|
|
192
|
+
case conv_errc::not_base64url:
|
|
193
|
+
return "Input is not a base64url encoded string";
|
|
194
|
+
case conv_errc::not_base16:
|
|
195
|
+
return "Input is not a base16 encoded string";
|
|
196
|
+
default:
|
|
197
|
+
return "Unknown conversion error";
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
};
|
|
201
|
+
} // detail
|
|
202
|
+
|
|
203
|
+
extern inline
|
|
204
|
+
const std::error_category& conv_error_category()
|
|
205
|
+
{
|
|
206
|
+
static detail::conv_error_category_impl instance;
|
|
207
|
+
return instance;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
inline
|
|
211
|
+
std::error_code make_error_code(conv_errc result)
|
|
212
|
+
{
|
|
213
|
+
return std::error_code(static_cast<int>(result),conv_error_category());
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
#endif
|