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,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