@@ -30,8 +30,9 @@ simdjson_really_inline value value::start(json_iterator_ref &&iter) noexcept {
30
30
return { std::forward<json_iterator_ref>(iter), iter->advance () };
31
31
}
32
32
33
- simdjson_really_inline void value::consume () noexcept {
33
+ simdjson_really_inline const uint8_t * value::consume () noexcept {
34
34
iter.release ();
35
+ return json;
35
36
}
36
37
template <typename T>
37
38
simdjson_really_inline simdjson_result<T> value::consume_if_success (simdjson_result<T> &&result) noexcept {
@@ -51,25 +52,48 @@ simdjson_really_inline simdjson_result<object> value::get_object() noexcept {
51
52
if (!has_value) { iter.release (); }
52
53
return object (std::move (iter));
53
54
}
54
- simdjson_really_inline simdjson_result<raw_json_string> value::get_raw_json_string () noexcept {
55
+ simdjson_really_inline simdjson_result<raw_json_string> value::get_raw_json_string () && noexcept {
56
+ return iter->consume_raw_json_string ();
57
+ }
58
+ simdjson_really_inline simdjson_result<raw_json_string> value::get_raw_json_string () & noexcept {
55
59
return consume_if_success ( iter->parse_raw_json_string (json) );
56
60
}
57
- simdjson_really_inline simdjson_result<std::string_view> value::get_string () noexcept {
61
+ simdjson_really_inline simdjson_result<std::string_view> value::get_string () && noexcept {
62
+ auto result = iter->parse_string (json);
63
+ consume ();
64
+ return result;
65
+ }
66
+ simdjson_really_inline simdjson_result<std::string_view> value::get_string () & noexcept {
58
67
return consume_if_success ( iter->parse_string (json) );
59
68
}
60
- simdjson_really_inline simdjson_result<double > value::get_double () noexcept {
69
+ simdjson_really_inline simdjson_result<double > value::get_double () && noexcept {
70
+ return iter->parse_double (consume ());
71
+ }
72
+ simdjson_really_inline simdjson_result<double > value::get_double () & noexcept {
61
73
return consume_if_success ( iter->parse_double (json) );
62
74
}
63
- simdjson_really_inline simdjson_result<uint64_t > value::get_uint64 () noexcept {
75
+ simdjson_really_inline simdjson_result<uint64_t > value::get_uint64 () && noexcept {
76
+ return iter->parse_uint64 (consume ());
77
+ }
78
+ simdjson_really_inline simdjson_result<uint64_t > value::get_uint64 () & noexcept {
64
79
return consume_if_success ( iter->parse_uint64 (json) );
65
80
}
66
- simdjson_really_inline simdjson_result<int64_t > value::get_int64 () noexcept {
81
+ simdjson_really_inline simdjson_result<int64_t > value::get_int64 () && noexcept {
82
+ return iter->parse_int64 (consume ());
83
+ }
84
+ simdjson_really_inline simdjson_result<int64_t > value::get_int64 () & noexcept {
67
85
return consume_if_success ( iter->parse_int64 (json) );
68
86
}
69
- simdjson_really_inline simdjson_result<bool > value::get_bool () noexcept {
87
+ simdjson_really_inline simdjson_result<bool > value::get_bool () && noexcept {
88
+ return iter->parse_bool (consume ());
89
+ }
90
+ simdjson_really_inline simdjson_result<bool > value::get_bool () & noexcept {
70
91
return consume_if_success ( iter->parse_bool (json) );
71
92
}
72
- simdjson_really_inline bool value::is_null () noexcept {
93
+ simdjson_really_inline bool value::is_null () && noexcept {
94
+ return iter->is_null (consume ());
95
+ }
96
+ simdjson_really_inline bool value::is_null () & noexcept {
73
97
if (!iter->is_null (json)) { return false ; }
74
98
consume ();
75
99
return true ;
@@ -82,22 +106,40 @@ simdjson_really_inline value::operator array() noexcept(false) {
82
106
simdjson_really_inline value::operator object () noexcept (false ) {
83
107
return std::forward<value>(*this ).get_object ();
84
108
}
85
- simdjson_really_inline value::operator uint64_t () noexcept (false ) {
109
+ simdjson_really_inline value::operator uint64_t () && noexcept (false ) {
86
110
return std::forward<value>(*this ).get_uint64 ();
87
111
}
88
- simdjson_really_inline value::operator int64_t () noexcept (false ) {
112
+ simdjson_really_inline value::operator uint64_t () & noexcept (false ) {
113
+ return std::forward<value>(*this ).get_uint64 ();
114
+ }
115
+ simdjson_really_inline value::operator int64_t () && noexcept (false ) {
116
+ return std::forward<value>(*this ).get_int64 ();
117
+ }
118
+ simdjson_really_inline value::operator int64_t () & noexcept (false ) {
89
119
return std::forward<value>(*this ).get_int64 ();
90
120
}
91
- simdjson_really_inline value::operator double () noexcept (false ) {
121
+ simdjson_really_inline value::operator double () && noexcept (false ) {
92
122
return std::forward<value>(*this ).get_double ();
93
123
}
94
- simdjson_really_inline value::operator std::string_view () noexcept (false ) {
124
+ simdjson_really_inline value::operator double () & noexcept (false ) {
125
+ return std::forward<value>(*this ).get_double ();
126
+ }
127
+ simdjson_really_inline value::operator std::string_view () && noexcept (false ) {
95
128
return std::forward<value>(*this ).get_string ();
96
129
}
97
- simdjson_really_inline value::operator raw_json_string () noexcept (false ) {
130
+ simdjson_really_inline value::operator std::string_view () & noexcept (false ) {
131
+ return std::forward<value>(*this ).get_string ();
132
+ }
133
+ simdjson_really_inline value::operator raw_json_string () && noexcept (false ) {
134
+ return std::forward<value>(*this ).get_raw_json_string ();
135
+ }
136
+ simdjson_really_inline value::operator raw_json_string () & noexcept (false ) {
98
137
return std::forward<value>(*this ).get_raw_json_string ();
99
138
}
100
- simdjson_really_inline value::operator bool () noexcept (false ) {
139
+ simdjson_really_inline value::operator bool () && noexcept (false ) {
140
+ return std::forward<value>(*this ).get_bool ();
141
+ }
142
+ simdjson_really_inline value::operator bool () & noexcept (false ) {
101
143
return std::forward<value>(*this ).get_bool ();
102
144
}
103
145
#endif
@@ -191,33 +233,61 @@ simdjson_really_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object
191
233
if (error ()) { return error (); }
192
234
return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::value>(first).get_object ();
193
235
}
194
- simdjson_really_inline simdjson_result<uint64_t > simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::get_uint64() noexcept {
236
+ simdjson_really_inline simdjson_result<uint64_t > simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::get_uint64() && noexcept {
237
+ if (error ()) { return error (); }
238
+ return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::value>(first).get_uint64 ();
239
+ }
240
+ simdjson_really_inline simdjson_result<uint64_t > simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::get_uint64() & noexcept {
195
241
if (error ()) { return error (); }
196
242
return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::value>(first).get_uint64 ();
197
243
}
198
- simdjson_really_inline simdjson_result<int64_t > simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::get_int64() noexcept {
244
+ simdjson_really_inline simdjson_result<int64_t > simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::get_int64() && noexcept {
245
+ if (error ()) { return error (); }
246
+ return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::value>(first).get_int64 ();
247
+ }
248
+ simdjson_really_inline simdjson_result<int64_t > simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::get_int64() & noexcept {
199
249
if (error ()) { return error (); }
200
250
return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::value>(first).get_int64 ();
201
251
}
202
- simdjson_really_inline simdjson_result<double > simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::get_double() noexcept {
252
+ simdjson_really_inline simdjson_result<double > simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::get_double() && noexcept {
253
+ if (error ()) { return error (); }
254
+ return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::value>(first).get_double ();
255
+ }
256
+ simdjson_really_inline simdjson_result<double > simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::get_double() & noexcept {
203
257
if (error ()) { return error (); }
204
258
return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::value>(first).get_double ();
205
259
}
206
- simdjson_really_inline simdjson_result<std::string_view> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::get_string() noexcept {
260
+ simdjson_really_inline simdjson_result<std::string_view> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::get_string() && noexcept {
207
261
if (error ()) { return error (); }
208
262
return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::value>(first).get_string ();
209
263
}
210
- simdjson_really_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::get_raw_json_string() noexcept {
264
+ simdjson_really_inline simdjson_result<std::string_view> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::get_string() & noexcept {
265
+ if (error ()) { return error (); }
266
+ return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::value>(first).get_string ();
267
+ }
268
+ simdjson_really_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::get_raw_json_string() && noexcept {
269
+ if (error ()) { return error (); }
270
+ return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::value>(first).get_raw_json_string ();
271
+ }
272
+ simdjson_really_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::get_raw_json_string() & noexcept {
211
273
if (error ()) { return error (); }
212
274
return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::value>(first).get_raw_json_string ();
213
275
}
214
- simdjson_really_inline simdjson_result<bool > simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::get_bool() noexcept {
276
+ simdjson_really_inline simdjson_result<bool > simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::get_bool() && noexcept {
215
277
if (error ()) { return error (); }
216
278
return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::value>(first).get_bool ();
217
279
}
218
- simdjson_really_inline bool simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::is_null() noexcept {
280
+ simdjson_really_inline simdjson_result<bool > simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::get_bool() & noexcept {
281
+ if (error ()) { return error (); }
282
+ return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::value>(first).get_bool ();
283
+ }
284
+ simdjson_really_inline bool simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::is_null() && noexcept {
285
+ if (error ()) { return false ; }
286
+ return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::value>(first).is_null ();
287
+ }
288
+ simdjson_really_inline bool simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::is_null() & noexcept {
219
289
if (error ()) { return false ; }
220
- return first.is_null ();
290
+ return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::value>( first) .is_null ();
221
291
}
222
292
223
293
#if SIMDJSON_EXCEPTIONS
@@ -229,27 +299,51 @@ simdjson_really_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>
229
299
if (error ()) { throw simdjson_error (error ()); }
230
300
return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::value>(first);
231
301
}
232
- simdjson_really_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::operator uint64_t () noexcept (false ) {
302
+ simdjson_really_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::operator uint64_t () && noexcept (false ) {
303
+ if (error ()) { throw simdjson_error (error ()); }
304
+ return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::value>(first);
305
+ }
306
+ simdjson_really_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::operator uint64_t () & noexcept (false ) {
307
+ if (error ()) { throw simdjson_error (error ()); }
308
+ return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::value>(first);
309
+ }
310
+ simdjson_really_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::operator int64_t () && noexcept (false ) {
311
+ if (error ()) { throw simdjson_error (error ()); }
312
+ return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::value>(first);
313
+ }
314
+ simdjson_really_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::operator int64_t () & noexcept (false ) {
315
+ if (error ()) { throw simdjson_error (error ()); }
316
+ return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::value>(first);
317
+ }
318
+ simdjson_really_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::operator double () && noexcept (false ) {
319
+ if (error ()) { throw simdjson_error (error ()); }
320
+ return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::value>(first);
321
+ }
322
+ simdjson_really_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::operator double () & noexcept (false ) {
323
+ if (error ()) { throw simdjson_error (error ()); }
324
+ return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::value>(first);
325
+ }
326
+ simdjson_really_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::operator std::string_view () && noexcept (false ) {
233
327
if (error ()) { throw simdjson_error (error ()); }
234
328
return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::value>(first);
235
329
}
236
- simdjson_really_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::operator int64_t () noexcept (false ) {
330
+ simdjson_really_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::operator std::string_view () & noexcept (false ) {
237
331
if (error ()) { throw simdjson_error (error ()); }
238
332
return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::value>(first);
239
333
}
240
- simdjson_really_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::operator double () noexcept (false ) {
334
+ simdjson_really_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::operator SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string () && noexcept (false ) {
241
335
if (error ()) { throw simdjson_error (error ()); }
242
336
return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::value>(first);
243
337
}
244
- simdjson_really_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::operator std::string_view () noexcept (false ) {
338
+ simdjson_really_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::operator SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string () & noexcept (false ) {
245
339
if (error ()) { throw simdjson_error (error ()); }
246
340
return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::value>(first);
247
341
}
248
- simdjson_really_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::operator SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string () noexcept (false ) {
342
+ simdjson_really_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::operator bool () && noexcept (false ) {
249
343
if (error ()) { throw simdjson_error (error ()); }
250
344
return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::value>(first);
251
345
}
252
- simdjson_really_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::operator bool () noexcept (false ) {
346
+ simdjson_really_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value>::operator bool () & noexcept (false ) {
253
347
if (error ()) { throw simdjson_error (error ()); }
254
348
return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::value>(first);
255
349
}
0 commit comments