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,307 @@
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_UBJSON_UBJSON_CURSOR_HPP
8
+ #define JSONCONS_UBJSON_UBJSON_CURSOR_HPP
9
+
10
+ #include <memory> // std::allocator
11
+ #include <string>
12
+ #include <vector>
13
+ #include <stdexcept>
14
+ #include <system_error>
15
+ #include <ios>
16
+ #include <istream> // std::basic_istream
17
+ #include <jsoncons/byte_string.hpp>
18
+ #include <jsoncons/config/jsoncons_config.hpp>
19
+ #include <jsoncons/json_visitor.hpp>
20
+ #include <jsoncons/json_exception.hpp>
21
+ #include <jsoncons/staj_cursor.hpp>
22
+ #include <jsoncons/source.hpp>
23
+ #include <jsoncons_ext/ubjson/ubjson_parser.hpp>
24
+
25
+ namespace jsoncons {
26
+ namespace ubjson {
27
+
28
+ template<class Source=jsoncons::binary_stream_source,class Allocator=std::allocator<char>>
29
+ class basic_ubjson_cursor : public basic_staj_cursor<char>, private virtual ser_context
30
+ {
31
+ public:
32
+ using source_type = Source;
33
+ using char_type = char;
34
+ using allocator_type = Allocator;
35
+ private:
36
+ basic_ubjson_parser<Source,Allocator> parser_;
37
+ basic_staj_visitor<char_type> cursor_visitor_;
38
+ bool eof_;
39
+
40
+ // Noncopyable and nonmoveable
41
+ basic_ubjson_cursor(const basic_ubjson_cursor&) = delete;
42
+ basic_ubjson_cursor& operator=(const basic_ubjson_cursor&) = delete;
43
+
44
+ public:
45
+ using string_view_type = string_view;
46
+
47
+ template <class Sourceable>
48
+ basic_ubjson_cursor(Sourceable&& source,
49
+ const ubjson_decode_options& options = ubjson_decode_options(),
50
+ const Allocator& alloc = Allocator())
51
+ : parser_(std::forward<Sourceable>(source), options, alloc),
52
+ cursor_visitor_(accept_all),
53
+ eof_(false)
54
+ {
55
+ if (!done())
56
+ {
57
+ next();
58
+ }
59
+ }
60
+
61
+ // Constructors that set parse error codes
62
+
63
+ template <class Sourceable>
64
+ basic_ubjson_cursor(Sourceable&& source,
65
+ std::error_code& ec)
66
+ : basic_ubjson_cursor(std::allocator_arg, Allocator(),
67
+ std::forward<Sourceable>(source),
68
+ ubjson_decode_options(),
69
+ ec)
70
+ {
71
+ }
72
+
73
+ template <class Sourceable>
74
+ basic_ubjson_cursor(Sourceable&& source,
75
+ const ubjson_decode_options& options,
76
+ std::error_code& ec)
77
+ : basic_ubjson_cursor(std::allocator_arg, Allocator(),
78
+ std::forward<Sourceable>(source),
79
+ options,
80
+ ec)
81
+ {
82
+ }
83
+
84
+ template <class Sourceable>
85
+ basic_ubjson_cursor(std::allocator_arg_t, const Allocator& alloc,
86
+ Sourceable&& source,
87
+ const ubjson_decode_options& options,
88
+ std::error_code& ec)
89
+ : parser_(std::forward<Sourceable>(source), options, alloc),
90
+ cursor_visitor_(accept_all),
91
+ eof_(false)
92
+ {
93
+ if (!done())
94
+ {
95
+ next(ec);
96
+ }
97
+ }
98
+
99
+ void reset()
100
+ {
101
+ parser_.reset();
102
+ cursor_visitor_.reset();
103
+ eof_ = false;
104
+ if (!done())
105
+ {
106
+ next();
107
+ }
108
+ }
109
+
110
+ template <class Sourceable>
111
+ void reset(Sourceable&& source)
112
+ {
113
+ parser_.reset(std::forward<Sourceable>(source));
114
+ cursor_visitor_.reset();
115
+ eof_ = false;
116
+ if (!done())
117
+ {
118
+ next();
119
+ }
120
+ }
121
+
122
+ void reset(std::error_code& ec)
123
+ {
124
+ parser_.reset();
125
+ cursor_visitor_.reset();
126
+ eof_ = false;
127
+ if (!done())
128
+ {
129
+ next(ec);
130
+ }
131
+ }
132
+
133
+ template <class Sourceable>
134
+ void reset(Sourceable&& source, std::error_code& ec)
135
+ {
136
+ parser_.reset(std::forward<Sourceable>(source));
137
+ cursor_visitor_.reset();
138
+ eof_ = false;
139
+ if (!done())
140
+ {
141
+ next(ec);
142
+ }
143
+ }
144
+
145
+ bool done() const override
146
+ {
147
+ return parser_.done();
148
+ }
149
+
150
+ const staj_event& current() const override
151
+ {
152
+ return cursor_visitor_.event();
153
+ }
154
+
155
+ void read_to(basic_json_visitor<char_type>& visitor) override
156
+ {
157
+ std::error_code ec;
158
+ read_to(visitor, ec);
159
+ if (ec)
160
+ {
161
+ JSONCONS_THROW(ser_error(ec,parser_.line(),parser_.column()));
162
+ }
163
+ }
164
+
165
+ void read_to(basic_json_visitor<char_type>& visitor,
166
+ std::error_code& ec) override
167
+ {
168
+ if (send_json_event(cursor_visitor_.event(), visitor, *this, ec))
169
+ {
170
+ read_next(visitor, ec);
171
+ }
172
+ }
173
+
174
+ void next() override
175
+ {
176
+ std::error_code ec;
177
+ next(ec);
178
+ if (ec)
179
+ {
180
+ JSONCONS_THROW(ser_error(ec,parser_.line(),parser_.column()));
181
+ }
182
+ }
183
+
184
+ void next(std::error_code& ec) override
185
+ {
186
+ read_next(ec);
187
+ }
188
+
189
+ const ser_context& context() const override
190
+ {
191
+ return *this;
192
+ }
193
+
194
+ bool eof() const
195
+ {
196
+ return eof_;
197
+ }
198
+
199
+ std::size_t line() const override
200
+ {
201
+ return parser_.line();
202
+ }
203
+
204
+ std::size_t column() const override
205
+ {
206
+ return parser_.column();
207
+ }
208
+
209
+ friend
210
+ staj_filter_view operator|(basic_ubjson_cursor& cursor,
211
+ std::function<bool(const staj_event&, const ser_context&)> pred)
212
+ {
213
+ return staj_filter_view(cursor, pred);
214
+ }
215
+
216
+ #if !defined(JSONCONS_NO_DEPRECATED)
217
+
218
+ template <class Sourceable>
219
+ JSONCONS_DEPRECATED_MSG("Instead, use pipe syntax for filter")
220
+ basic_ubjson_cursor(Sourceable&& source,
221
+ std::function<bool(const staj_event&, const ser_context&)> filter,
222
+ const ubjson_decode_options& options = ubjson_decode_options(),
223
+ const Allocator& alloc = Allocator())
224
+ : parser_(std::forward<Sourceable>(source), options, alloc),
225
+ cursor_visitor_(filter),
226
+ eof_(false)
227
+ {
228
+ if (!done())
229
+ {
230
+ next();
231
+ }
232
+ }
233
+
234
+ template <class Sourceable>
235
+ JSONCONS_DEPRECATED_MSG("Instead, use pipe syntax for filter")
236
+ basic_ubjson_cursor(Sourceable&& source,
237
+ std::function<bool(const staj_event&, const ser_context&)> filter,
238
+ std::error_code& ec)
239
+ : basic_ubjson_cursor(std::allocator_arg, Allocator(),
240
+ std::forward<Sourceable>(source), filter, ec)
241
+ {
242
+ }
243
+
244
+ template <class Sourceable>
245
+ JSONCONS_DEPRECATED_MSG("Instead, use pipe syntax for filter")
246
+ basic_ubjson_cursor(std::allocator_arg_t, const Allocator& alloc,
247
+ Sourceable&& source,
248
+ std::function<bool(const staj_event&, const ser_context&)> filter,
249
+ std::error_code& ec)
250
+ : parser_(std::forward<Sourceable>(source), alloc),
251
+ cursor_visitor_(filter),
252
+ eof_(false)
253
+ {
254
+ if (!done())
255
+ {
256
+ next(ec);
257
+ }
258
+ }
259
+
260
+ JSONCONS_DEPRECATED_MSG("Instead, use read_to(basic_json_visitor<char_type>&)")
261
+ void read(basic_json_visitor<char_type>& visitor)
262
+ {
263
+ read_to(visitor);
264
+ }
265
+
266
+ JSONCONS_DEPRECATED_MSG("Instead, use read_to(basic_json_visitor<char_type>&, std::error_code&)")
267
+ void read(basic_json_visitor<char_type>& visitor,
268
+ std::error_code& ec)
269
+ {
270
+ read_to(visitor, ec);
271
+ }
272
+ #endif
273
+ private:
274
+ static bool accept_all(const staj_event&, const ser_context&)
275
+ {
276
+ return true;
277
+ }
278
+
279
+ void read_next(std::error_code& ec)
280
+ {
281
+ parser_.restart();
282
+ while (!parser_.stopped())
283
+ {
284
+ parser_.parse(cursor_visitor_, ec);
285
+ if (ec) return;
286
+ }
287
+ }
288
+
289
+ void read_next(basic_json_visitor<char_type>& visitor, std::error_code& ec)
290
+ {
291
+ parser_.restart();
292
+ while (!parser_.stopped())
293
+ {
294
+ parser_.parse(visitor, ec);
295
+ if (ec) return;
296
+ }
297
+ }
298
+ };
299
+
300
+ using ubjson_stream_cursor = basic_ubjson_cursor<jsoncons::binary_stream_source>;
301
+ using ubjson_bytes_cursor = basic_ubjson_cursor<jsoncons::bytes_source>;
302
+
303
+ } // namespace ubjson
304
+ } // namespace jsoncons
305
+
306
+ #endif
307
+