1#ifndef SIMDJSON_GENERIC_ONDEMAND_DOCUMENT_INL_H
3#ifndef SIMDJSON_CONDITIONAL_INCLUDE
4#define SIMDJSON_GENERIC_ONDEMAND_DOCUMENT_INL_H
5#include "simdjson/generic/ondemand/base.h"
6#include "simdjson/generic/ondemand/array_iterator.h"
7#include "simdjson/generic/ondemand/document.h"
8#include "simdjson/generic/ondemand/json_type.h"
9#include "simdjson/generic/ondemand/raw_json_string.h"
10#include "simdjson/generic/ondemand/value.h"
11#include "simdjson/generic/ondemand/value-inl.h"
12#include "simdjson/generic/ondemand/array-inl.h"
13#include "simdjson/generic/ondemand/json_iterator-inl.h"
14#include "simdjson/generic/ondemand/object-inl.h"
15#include "simdjson/generic/ondemand/value_iterator-inl.h"
16#include "simdjson/generic/ondemand/deserialize.h"
20namespace SIMDJSON_IMPLEMENTATION {
24 : iter{std::forward<json_iterator>(_iter)}
26 logger::log_start_value(iter,
"document");
29simdjson_inline document document::start(json_iterator &&iter)
noexcept {
30 return document(std::forward<json_iterator>(iter));
38 return iter.to_string();
42 return iter.current_location();
55 return iter.is_alive();
57simdjson_inline value_iterator document::resume_value_iterator()
noexcept {
58 return value_iterator(&
iter, 1,
iter.root_position());
60simdjson_inline value_iterator document::get_root_value_iterator() noexcept {
61 return resume_value_iterator();
67 return object::resume(resume_value_iterator());
76#if SIMDJSON_DEVELOPMENT_CHECKS
83 iter.assert_at_root();
84 switch (*
iter.peek()) {
87 auto value_iterator = get_root_value_iterator();
88 auto error = value_iterator.check_root_array();
89 if(error) {
return error; }
90 return value(get_root_value_iterator());
94 auto value_iterator = get_root_value_iterator();
95 auto error = value_iterator.check_root_object();
96 if(error) {
return error; }
97 return value(get_root_value_iterator());
106 auto value = get_root_value_iterator();
110 auto value = get_root_value_iterator();
111 return object::start_root(
value);
123 return get_root_value_iterator().get_root_uint64(
true);
126 return get_root_value_iterator().get_root_uint64_in_string(
true);
129 return get_root_value_iterator().get_root_int64(
true);
132 return get_root_value_iterator().get_root_int64_in_string(
true);
135 return get_root_value_iterator().get_root_double(
true);
138 return get_root_value_iterator().get_root_double_in_string(
true);
143template <
typename string_type>
148 return get_root_value_iterator().get_root_wobbly_string(
true);
151 return get_root_value_iterator().get_root_raw_json_string(
true);
154 return get_root_value_iterator().get_root_bool(
true);
157 return get_root_value_iterator().is_root_null(
true);
163template<> simdjson_inline simdjson_result<std::string_view>
document::get() &
noexcept {
return get_string(
false); }
164template<> simdjson_inline simdjson_result<double>
document::get() &
noexcept {
return get_double(); }
165template<> simdjson_inline simdjson_result<uint64_t>
document::get() &
noexcept {
return get_uint64(); }
166template<> simdjson_inline simdjson_result<int64_t>
document::get() &
noexcept {
return get_int64(); }
167template<> simdjson_inline simdjson_result<bool>
document::get() &
noexcept {
return get_bool(); }
168template<> simdjson_inline simdjson_result<value>
document::get() &
noexcept {
return get_value(); }
170template<> simdjson_warn_unused simdjson_inline
error_code document::get(array& out) &
noexcept {
return get_array().get(out); }
171template<> simdjson_warn_unused simdjson_inline
error_code document::get(
object& out) &
noexcept {
return get_object().get(out); }
172template<> simdjson_warn_unused simdjson_inline
error_code document::get(raw_json_string& out) &
noexcept {
return get_raw_json_string().get(out); }
173template<> simdjson_warn_unused simdjson_inline
error_code document::get(std::string_view& out) &
noexcept {
return get_string(
false).get(out); }
174template<> simdjson_warn_unused simdjson_inline
error_code document::get(
double& out) &
noexcept {
return get_double().get(out); }
175template<> simdjson_warn_unused simdjson_inline
error_code document::get(uint64_t& out) &
noexcept {
return get_uint64().get(out); }
176template<> simdjson_warn_unused simdjson_inline
error_code document::get(int64_t& out) &
noexcept {
return get_int64().get(out); }
177template<> simdjson_warn_unused simdjson_inline
error_code document::get(
bool& out) &
noexcept {
return get_bool().get(out); }
178template<> simdjson_warn_unused simdjson_inline
error_code document::get(value& out) &
noexcept {
return get_value().get(out); }
180template<> simdjson_deprecated simdjson_inline simdjson_result<raw_json_string>
document::get() &&
noexcept {
return get_raw_json_string(); }
181template<> simdjson_deprecated simdjson_inline simdjson_result<std::string_view>
document::get() &&
noexcept {
return get_string(
false); }
182template<> simdjson_deprecated simdjson_inline simdjson_result<double>
document::get() &&
noexcept {
return std::forward<document>(*this).get_double(); }
183template<> simdjson_deprecated simdjson_inline simdjson_result<uint64_t>
document::get() &&
noexcept {
return std::forward<document>(*this).get_uint64(); }
184template<> simdjson_deprecated simdjson_inline simdjson_result<int64_t>
document::get() &&
noexcept {
return std::forward<document>(*this).get_int64(); }
185template<> simdjson_deprecated simdjson_inline simdjson_result<bool>
document::get() &&
noexcept {
return std::forward<document>(*this).get_bool(); }
186template<> simdjson_deprecated simdjson_inline simdjson_result<value>
document::get() &&
noexcept {
return get_value(); }
188#if SIMDJSON_EXCEPTIONS
190simdjson_deprecated simdjson_inline document::operator T() &&
noexcept(
false) {
return get<T>(); }
192simdjson_inline document::operator
T() &
noexcept(
false) {
return get<T>(); }
193simdjson_inline document::operator
array() &
noexcept(
false) {
return get_array(); }
194simdjson_inline document::operator
object() &
noexcept(
false) {
return get_object(); }
198simdjson_inline document::operator std::string_view()
noexcept(
false) simdjson_lifetime_bound {
return get_string(
false); }
205 auto a = get_array();
212 auto a = get_object();
219 auto a = get_array();
223 return get_array().
begin();
230 return start_or_resume_object().find_field(key);
233 return start_or_resume_object().find_field(key);
236 return start_or_resume_object().find_field_unordered(key);
239 return start_or_resume_object().find_field_unordered(key);
242 return start_or_resume_object()[key];
245 return start_or_resume_object()[key];
251 if(error) {
return error; }
253 iter.return_current_and_advance();
256 error =
iter.skip_child(0);
257 if(error) {
iter.abandon(); }
262 auto _iter = get_root_value_iterator();
265 if(error) {
return error; }
274 return get_root_value_iterator().type();
282 if(error) {
return error; }
289 if(error) {
return error; }
294 return get_root_value_iterator().is_root_negative();
298 return get_root_value_iterator().is_root_integer(
true);
302 return get_root_value_iterator().get_root_number_type(
true);
306 return get_root_value_iterator().get_root_number(
true);
311 auto _iter = get_root_value_iterator();
312 return std::string_view(
reinterpret_cast<const char*
>(
_iter.peek_start()),
_iter.peek_root_length());
318 return this->get_value();
321 SIMDJSON_TRY(type().get(
t));
336 return this->get_value();
339 SIMDJSON_TRY(type().get(
t));
342 return (*this).get_array().at_path(
json_path);
344 return (*this).get_object().at_path(
json_path);
352#if SIMDJSON_SUPPORTS_CONCEPTS && SIMDJSON_STATIC_REFLECTION
354template<constevalutil::fixed_string...
FieldNames,
typename T>
355 requires(std::is_class_v<T> && (
sizeof...(FieldNames) > 0))
356simdjson_warn_unused simdjson_inline
error_code document::extract_into(
T&
out) &
noexcept {
363 template for (
constexpr auto mem : std::define_static_array(
364 std::meta::nonstatic_data_members_of(^^T, std::meta::access_context::unchecked()))) {
366 if constexpr (!std::meta::is_const(mem) && std::meta::is_public(mem)) {
367 constexpr std::string_view key = std::define_static_string(std::meta::identifier_of(mem));
370 if constexpr (should_extract(key)) {
372 if constexpr (concepts::optional_type<
decltype(out.[:mem:])>) {
374 auto field_result = find_field_unordered(key);
375 if (!field_result.error()) {
376 auto error = field_result.get(out.[:mem:]);
381 return field_result.error();
387 SIMDJSON_TRY((*
this)[key].get(out.[:mem:]));
404simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::simdjson_result(
405 SIMDJSON_IMPLEMENTATION::ondemand::document &&value
407 implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::document>(
408 std::forward<SIMDJSON_IMPLEMENTATION::ondemand::document>(value)
412simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::simdjson_result(
415 implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::document>(
420simdjson_inline simdjson_result<size_t> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::count_elements() &
noexcept {
421 if (error()) {
return error(); }
422 return first.count_elements();
424simdjson_inline simdjson_result<size_t> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::count_fields() &
noexcept {
425 if (error()) {
return error(); }
426 return first.count_fields();
428simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::at(
size_t index) &
noexcept {
429 if (error()) {
return error(); }
430 return first.at(index);
432simdjson_inline
error_code simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::rewind() noexcept {
433 if (error()) {
return error(); }
437simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array_iterator> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::begin() &
noexcept {
438 if (error()) {
return error(); }
439 return first.begin();
441simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array_iterator> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::end() &
noexcept {
444simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::find_field_unordered(std::string_view key) &
noexcept {
445 if (error()) {
return error(); }
446 return first.find_field_unordered(key);
448simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::find_field_unordered(
const char *key) &
noexcept {
449 if (error()) {
return error(); }
450 return first.find_field_unordered(key);
452simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::operator[](std::string_view key) &
noexcept {
453 if (error()) {
return error(); }
456simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::operator[](
const char *key) &
noexcept {
457 if (error()) {
return error(); }
460simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::find_field(std::string_view key) &
noexcept {
461 if (error()) {
return error(); }
462 return first.find_field(key);
464simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::find_field(
const char *key) &
noexcept {
465 if (error()) {
return error(); }
466 return first.find_field(key);
468simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get_array() &
noexcept {
469 if (error()) {
return error(); }
470 return first.get_array();
472simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get_object() &
noexcept {
473 if (error()) {
return error(); }
474 return first.get_object();
476simdjson_inline simdjson_result<uint64_t> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get_uint64() noexcept {
477 if (error()) {
return error(); }
478 return first.get_uint64();
480simdjson_inline simdjson_result<uint64_t> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get_uint64_in_string() noexcept {
481 if (error()) {
return error(); }
482 return first.get_uint64_in_string();
484simdjson_inline simdjson_result<int64_t> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get_int64() noexcept {
485 if (error()) {
return error(); }
486 return first.get_int64();
488simdjson_inline simdjson_result<int64_t> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get_int64_in_string() noexcept {
489 if (error()) {
return error(); }
490 return first.get_int64_in_string();
492simdjson_inline simdjson_result<double> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get_double() noexcept {
493 if (error()) {
return error(); }
494 return first.get_double();
496simdjson_inline simdjson_result<double> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get_double_in_string() noexcept {
497 if (error()) {
return error(); }
498 return first.get_double_in_string();
500simdjson_inline simdjson_result<std::string_view> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get_string(
bool allow_replacement)
noexcept {
501 if (error()) {
return error(); }
502 return first.get_string(allow_replacement);
504template <
typename string_type>
505simdjson_warn_unused simdjson_inline
error_code simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get_string(string_type& receiver,
bool allow_replacement)
noexcept {
506 if (error()) {
return error(); }
507 return first.get_string(receiver, allow_replacement);
509simdjson_inline simdjson_result<std::string_view> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get_wobbly_string() noexcept {
510 if (error()) {
return error(); }
511 return first.get_wobbly_string();
513simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get_raw_json_string() noexcept {
514 if (error()) {
return error(); }
515 return first.get_raw_json_string();
517simdjson_inline simdjson_result<bool> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get_bool() noexcept {
518 if (error()) {
return error(); }
519 return first.get_bool();
521simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get_value() noexcept {
522 if (error()) {
return error(); }
523 return first.get_value();
525simdjson_inline simdjson_result<bool> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::is_null() noexcept {
526 if (error()) {
return error(); }
527 return first.is_null();
531simdjson_inline simdjson_result<T> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get() &
noexcept {
532 if (error()) {
return error(); }
533 return first.get<T>();
536simdjson_deprecated simdjson_inline simdjson_result<T> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get() &&
noexcept {
537 if (error()) {
return error(); }
538 return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::document>(first).get<T>();
541simdjson_warn_unused simdjson_inline
error_code simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get(T &out) &
noexcept {
542 if (error()) {
return error(); }
543 return first.get<T>(out);
546simdjson_warn_unused simdjson_inline
error_code simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get(T &out) &&
noexcept {
547 if (error()) {
return error(); }
548 return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::document>(first).get<T>(out);
551template<> simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get<SIMDJSON_IMPLEMENTATION::ondemand::document>() &
noexcept =
delete;
552template<> simdjson_deprecated simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get<SIMDJSON_IMPLEMENTATION::ondemand::document>() &&
noexcept {
553 if (error()) {
return error(); }
554 return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::document>(first);
556template<> simdjson_warn_unused simdjson_inline
error_code simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get<SIMDJSON_IMPLEMENTATION::ondemand::document>(SIMDJSON_IMPLEMENTATION::ondemand::document &out) &
noexcept =
delete;
557template<> simdjson_warn_unused simdjson_inline
error_code simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get<SIMDJSON_IMPLEMENTATION::ondemand::document>(SIMDJSON_IMPLEMENTATION::ondemand::document &out) &&
noexcept {
558 if (error()) {
return error(); }
559 out = std::forward<SIMDJSON_IMPLEMENTATION::ondemand::document>(first);
563simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::json_type> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::type() noexcept {
564 if (error()) {
return error(); }
568simdjson_inline simdjson_result<bool> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::is_scalar() noexcept {
569 if (error()) {
return error(); }
570 return first.is_scalar();
573simdjson_inline simdjson_result<bool> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::is_string() noexcept {
574 if (error()) {
return error(); }
575 return first.is_string();
578simdjson_inline
bool simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::is_negative() noexcept {
579 if (error()) {
return error(); }
580 return first.is_negative();
583simdjson_inline simdjson_result<bool> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::is_integer() noexcept {
584 if (error()) {
return error(); }
585 return first.is_integer();
588simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::number_type> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get_number_type() noexcept {
589 if (error()) {
return error(); }
590 return first.get_number_type();
593simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::number> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get_number() noexcept {
594 if (error()) {
return error(); }
595 return first.get_number();
599#if SIMDJSON_EXCEPTIONS
600template <class T, typename std::enable_if<std::is_same<T, SIMDJSON_IMPLEMENTATION::ondemand::document>::value ==
false>::type>
601simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::operator T() noexcept(false) {
602 if (error()) {
throw simdjson_error(error()); }
605simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::operator SIMDJSON_IMPLEMENTATION::ondemand::array() &
noexcept(
false) {
606 if (error()) {
throw simdjson_error(error()); }
609simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::operator SIMDJSON_IMPLEMENTATION::ondemand::object() &
noexcept(
false) {
610 if (error()) {
throw simdjson_error(error()); }
613simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::operator uint64_t() noexcept(false) {
614 if (error()) {
throw simdjson_error(error()); }
617simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::operator int64_t() noexcept(false) {
618 if (error()) {
throw simdjson_error(error()); }
621simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::operator double() noexcept(false) {
622 if (error()) {
throw simdjson_error(error()); }
625simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::operator std::string_view() noexcept(false) {
626 if (error()) {
throw simdjson_error(error()); }
629simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::operator SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string() noexcept(false) {
630 if (error()) {
throw simdjson_error(error()); }
633simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::operator bool() noexcept(false) {
634 if (error()) {
throw simdjson_error(error()); }
637simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::operator SIMDJSON_IMPLEMENTATION::ondemand::value() noexcept(false) {
638 if (error()) {
throw simdjson_error(error()); }
644simdjson_inline simdjson_result<const char *> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::current_location() noexcept {
645 if (error()) {
return error(); }
646 return first.current_location();
649simdjson_inline
bool simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::at_end() const noexcept {
650 if (error()) {
return error(); }
651 return first.at_end();
655simdjson_inline int32_t simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::current_depth() const noexcept {
656 if (error()) {
return error(); }
657 return first.current_depth();
660simdjson_inline simdjson_result<std::string_view> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::raw_json_token() noexcept {
661 if (error()) {
return error(); }
662 return first.raw_json_token();
665simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::at_pointer(std::string_view json_pointer)
noexcept {
666 if (error()) {
return error(); }
667 return first.at_pointer(json_pointer);
670simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::at_path(std::string_view json_path)
noexcept {
671 if (error()) {
return error(); }
672 return first.at_path(json_path);
675#if SIMDJSON_STATIC_REFLECTION
676template<constevalutil::fixed_string... FieldNames,
typename T>
677 requires(std::is_class_v<T> && (
sizeof...(FieldNames) > 0))
678simdjson_warn_unused simdjson_inline error_code simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::extract_into(T& out) &
noexcept {
679 if (error()) {
return error(); }
680 return first.extract_into<FieldNames...>(out);
688namespace SIMDJSON_IMPLEMENTATION {
691simdjson_inline document_reference::document_reference() noexcept : doc{
nullptr} {}
692simdjson_inline document_reference::document_reference(document &d) noexcept : doc(&d) {}
693simdjson_inline
void document_reference::rewind() noexcept { doc->
rewind(); }
694simdjson_inline simdjson_result<array> document_reference::get_array() &
noexcept {
return doc->get_array(); }
695simdjson_inline simdjson_result<object> document_reference::get_object() &
noexcept {
return doc->get_object(); }
711simdjson_inline
simdjson_result<uint64_t> document_reference::get_uint64_in_string()
noexcept {
return doc->get_root_value_iterator().get_root_uint64_in_string(
false); }
712simdjson_inline
simdjson_result<int64_t> document_reference::get_int64() noexcept {
return doc->get_root_value_iterator().get_root_int64(
false); }
713simdjson_inline
simdjson_result<int64_t> document_reference::get_int64_in_string() noexcept {
return doc->get_root_value_iterator().get_root_int64_in_string(
false); }
714simdjson_inline simdjson_result<double> document_reference::get_double() noexcept {
return doc->get_root_value_iterator().get_root_double(
false); }
715simdjson_inline simdjson_result<double> document_reference::get_double_in_string() noexcept {
return doc->get_root_value_iterator().get_root_double(
false); }
716simdjson_inline simdjson_result<std::string_view> document_reference::get_string(
bool allow_replacement)
noexcept {
return doc->get_root_value_iterator().get_root_string(
false, allow_replacement); }
717template <
typename string_type>
718simdjson_warn_unused simdjson_inline
error_code document_reference::get_string(string_type& receiver,
bool allow_replacement)
noexcept {
return doc->get_root_value_iterator().get_root_string(receiver,
false, allow_replacement); }
719simdjson_inline simdjson_result<std::string_view> document_reference::get_wobbly_string() noexcept {
return doc->get_root_value_iterator().get_root_wobbly_string(
false); }
720simdjson_inline simdjson_result<raw_json_string> document_reference::get_raw_json_string() noexcept {
return doc->get_root_value_iterator().get_root_raw_json_string(
false); }
721simdjson_inline simdjson_result<bool> document_reference::get_bool() noexcept {
return doc->get_root_value_iterator().get_root_bool(
false); }
722simdjson_inline simdjson_result<value> document_reference::get_value() noexcept {
return doc->
get_value(); }
723simdjson_inline simdjson_result<bool> document_reference::is_null() noexcept {
return doc->get_root_value_iterator().is_root_null(
false); }
724template<> simdjson_inline simdjson_result<array> document_reference::get() &
noexcept {
return get_array(); }
725template<> simdjson_inline simdjson_result<object> document_reference::get() &
noexcept {
return get_object(); }
726template<> simdjson_inline simdjson_result<raw_json_string> document_reference::get() &
noexcept {
return get_raw_json_string(); }
727template<> simdjson_inline simdjson_result<std::string_view> document_reference::get() &
noexcept {
return get_string(
false); }
728template<> simdjson_inline simdjson_result<double> document_reference::get() &
noexcept {
return get_double(); }
729template<> simdjson_inline simdjson_result<uint64_t> document_reference::get() &
noexcept {
return get_uint64(); }
730template<> simdjson_inline simdjson_result<int64_t> document_reference::get() &
noexcept {
return get_int64(); }
731template<> simdjson_inline simdjson_result<bool> document_reference::get() &
noexcept {
return get_bool(); }
732template<> simdjson_inline simdjson_result<value> document_reference::get() &
noexcept {
return get_value(); }
733#if SIMDJSON_EXCEPTIONS
735simdjson_inline document_reference::operator T() noexcept(false) {
return get<T>(); }
736simdjson_inline document_reference::operator
array() &
noexcept(
false) {
return array(*doc); }
737simdjson_inline document_reference::operator
object() &
noexcept(
false) {
return object(*doc); }
738simdjson_inline document_reference::operator uint64_t() noexcept(false) {
return get_uint64(); }
739simdjson_inline document_reference::operator int64_t() noexcept(false) {
return get_int64(); }
740simdjson_inline document_reference::operator double() noexcept(false) {
return get_double(); }
741simdjson_inline document_reference::operator std::string_view() noexcept(false) {
return std::string_view(*doc); }
742simdjson_inline document_reference::operator raw_json_string() noexcept(false) {
return get_raw_json_string(); }
743simdjson_inline document_reference::operator bool() noexcept(false) {
return get_bool(); }
744simdjson_inline document_reference::operator value() noexcept(false) {
return value(*doc); }
746simdjson_inline simdjson_result<size_t> document_reference::count_elements() &
noexcept {
return doc->
count_elements(); }
747simdjson_inline simdjson_result<size_t> document_reference::count_fields() &
noexcept {
return doc->count_fields(); }
748simdjson_inline simdjson_result<value> document_reference::at(
size_t index) &
noexcept {
return doc->
at(index); }
749simdjson_inline simdjson_result<array_iterator> document_reference::begin() &
noexcept {
return doc->
begin(); }
750simdjson_inline simdjson_result<array_iterator> document_reference::end() &
noexcept {
return doc->
end(); }
751simdjson_inline simdjson_result<value> document_reference::find_field(std::string_view key) &
noexcept {
return doc->find_field(key); }
752simdjson_inline simdjson_result<value> document_reference::find_field(
const char *key) &
noexcept {
return doc->find_field(key); }
753simdjson_inline simdjson_result<value> document_reference::operator[](std::string_view key) &
noexcept {
return (*doc)[key]; }
754simdjson_inline simdjson_result<value> document_reference::operator[](
const char *key) &
noexcept {
return (*doc)[key]; }
755simdjson_inline simdjson_result<value> document_reference::find_field_unordered(std::string_view key) &
noexcept {
return doc->find_field_unordered(key); }
756simdjson_inline simdjson_result<value> document_reference::find_field_unordered(
const char *key) &
noexcept {
return doc->find_field_unordered(key); }
757simdjson_inline simdjson_result<json_type> document_reference::type() noexcept {
return doc->
type(); }
758simdjson_inline simdjson_result<bool> document_reference::is_scalar() noexcept {
return doc->
is_scalar(); }
759simdjson_inline simdjson_result<bool> document_reference::is_string() noexcept {
return doc->
is_string(); }
760simdjson_inline simdjson_result<const char *> document_reference::current_location() noexcept {
return doc->
current_location(); }
761simdjson_inline int32_t document_reference::current_depth() const noexcept {
return doc->
current_depth(); }
762simdjson_inline
bool document_reference::is_negative() noexcept {
return doc->
is_negative(); }
763simdjson_inline simdjson_result<bool> document_reference::is_integer() noexcept {
return doc->get_root_value_iterator().is_root_integer(
false); }
764simdjson_inline simdjson_result<number_type> document_reference::get_number_type() noexcept {
return doc->get_root_value_iterator().get_root_number_type(
false); }
765simdjson_inline simdjson_result<number> document_reference::get_number() noexcept {
return doc->get_root_value_iterator().get_root_number(
false); }
766simdjson_inline simdjson_result<std::string_view> document_reference::raw_json_token() noexcept {
return doc->
raw_json_token(); }
767simdjson_inline simdjson_result<value> document_reference::at_pointer(std::string_view json_pointer)
noexcept {
return doc->
at_pointer(json_pointer); }
768simdjson_inline simdjson_result<value> document_reference::at_path(std::string_view json_path)
noexcept {
return doc->
at_path(json_path); }
769simdjson_inline simdjson_result<std::string_view> document_reference::raw_json() noexcept {
return doc->
raw_json();}
770simdjson_inline document_reference::operator document&()
const noexcept {
return *doc; }
771#if SIMDJSON_SUPPORTS_CONCEPTS && SIMDJSON_STATIC_REFLECTION
772template<constevalutil::fixed_string... FieldNames,
typename T>
773 requires(std::is_class_v<T> && (
sizeof...(FieldNames) > 0))
774simdjson_warn_unused simdjson_inline
error_code document_reference::extract_into(T& out) &
noexcept {
775 return doc->extract_into<FieldNames...>(out);
785simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::simdjson_result(SIMDJSON_IMPLEMENTATION::ondemand::document_reference value,
error_code error)
786 noexcept : implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>(std::forward<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>(value), error) {}
789simdjson_inline simdjson_result<size_t> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::count_elements() &
noexcept {
790 if (error()) {
return error(); }
791 return first.count_elements();
793simdjson_inline simdjson_result<size_t> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::count_fields() &
noexcept {
794 if (error()) {
return error(); }
795 return first.count_fields();
797simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::at(
size_t index) &
noexcept {
798 if (error()) {
return error(); }
799 return first.at(index);
801simdjson_inline
error_code simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::rewind() noexcept {
802 if (error()) {
return error(); }
806simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array_iterator> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::begin() &
noexcept {
807 if (error()) {
return error(); }
808 return first.begin();
810simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array_iterator> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::end() &
noexcept {
813simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::find_field_unordered(std::string_view key) &
noexcept {
814 if (error()) {
return error(); }
815 return first.find_field_unordered(key);
817simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::find_field_unordered(
const char *key) &
noexcept {
818 if (error()) {
return error(); }
819 return first.find_field_unordered(key);
821simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::operator[](std::string_view key) &
noexcept {
822 if (error()) {
return error(); }
825simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::operator[](
const char *key) &
noexcept {
826 if (error()) {
return error(); }
829simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::find_field(std::string_view key) &
noexcept {
830 if (error()) {
return error(); }
831 return first.find_field(key);
833simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::find_field(
const char *key) &
noexcept {
834 if (error()) {
return error(); }
835 return first.find_field(key);
837simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::array> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::get_array() &
noexcept {
838 if (error()) {
return error(); }
839 return first.get_array();
841simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::get_object() &
noexcept {
842 if (error()) {
return error(); }
843 return first.get_object();
845simdjson_inline simdjson_result<uint64_t> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::get_uint64() noexcept {
846 if (error()) {
return error(); }
847 return first.get_uint64();
849simdjson_inline simdjson_result<uint64_t> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::get_uint64_in_string() noexcept {
850 if (error()) {
return error(); }
851 return first.get_uint64_in_string();
853simdjson_inline simdjson_result<int64_t> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::get_int64() noexcept {
854 if (error()) {
return error(); }
855 return first.get_int64();
857simdjson_inline simdjson_result<int64_t> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::get_int64_in_string() noexcept {
858 if (error()) {
return error(); }
859 return first.get_int64_in_string();
861simdjson_inline simdjson_result<double> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::get_double() noexcept {
862 if (error()) {
return error(); }
863 return first.get_double();
865simdjson_inline simdjson_result<double> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::get_double_in_string() noexcept {
866 if (error()) {
return error(); }
867 return first.get_double_in_string();
869simdjson_inline simdjson_result<std::string_view> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::get_string(
bool allow_replacement)
noexcept {
870 if (error()) {
return error(); }
871 return first.get_string(allow_replacement);
873template <
typename string_type>
874simdjson_warn_unused simdjson_inline
error_code simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::get_string(string_type& receiver,
bool allow_replacement)
noexcept {
875 if (error()) {
return error(); }
876 return first.get_string(receiver, allow_replacement);
878simdjson_inline simdjson_result<std::string_view> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::get_wobbly_string() noexcept {
879 if (error()) {
return error(); }
880 return first.get_wobbly_string();
882simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::get_raw_json_string() noexcept {
883 if (error()) {
return error(); }
884 return first.get_raw_json_string();
886simdjson_inline simdjson_result<bool> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::get_bool() noexcept {
887 if (error()) {
return error(); }
888 return first.get_bool();
890simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::get_value() noexcept {
891 if (error()) {
return error(); }
892 return first.get_value();
894simdjson_inline simdjson_result<bool> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::is_null() noexcept {
895 if (error()) {
return error(); }
896 return first.is_null();
900 if (error()) {
return error(); }
901 return first.get<T>();
905 if (error()) {
return error(); }
906 return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>(first).get<T>();
910 if (error()) {
return error(); }
911 return first.get<T>(out);
915 if (error()) {
return error(); }
916 return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>(first).get<T>(out);
918simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::json_type> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::type() noexcept {
919 if (error()) {
return error(); }
922simdjson_inline simdjson_result<bool> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::is_scalar() noexcept {
923 if (error()) {
return error(); }
924 return first.is_scalar();
926simdjson_inline simdjson_result<bool> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::is_string() noexcept {
927 if (error()) {
return error(); }
928 return first.is_string();
932 if (error()) {
return error(); }
938 if (error()) {
return error(); }
942simdjson_inline simdjson_result<bool> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::is_negative() noexcept {
943 if (error()) {
return error(); }
944 return first.is_negative();
946simdjson_inline simdjson_result<bool> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::is_integer() noexcept {
947 if (error()) {
return error(); }
948 return first.is_integer();
950simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::number_type> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::get_number_type() noexcept {
951 if (error()) {
return error(); }
952 return first.get_number_type();
954simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::number> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::get_number() noexcept {
955 if (error()) {
return error(); }
956 return first.get_number();
958#if SIMDJSON_EXCEPTIONS
960simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::operator T() noexcept(false) {
961 static_assert(std::is_same<T, SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::value ==
false,
"You should not call get<T> when T is a document");
962 static_assert(std::is_same<T, SIMDJSON_IMPLEMENTATION::ondemand::document>::value ==
false,
"You should not call get<T> when T is a document");
963 if (error()) {
throw simdjson_error(error()); }
964 return first.get<T>();
966simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::operator SIMDJSON_IMPLEMENTATION::ondemand::array() &
noexcept(
false) {
967 if (error()) {
throw simdjson_error(error()); }
970simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::operator SIMDJSON_IMPLEMENTATION::ondemand::object() &
noexcept(
false) {
971 if (error()) {
throw simdjson_error(error()); }
974simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::operator uint64_t() noexcept(false) {
975 if (error()) {
throw simdjson_error(error()); }
978simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::operator int64_t() noexcept(false) {
979 if (error()) {
throw simdjson_error(error()); }
982simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::operator double() noexcept(false) {
983 if (error()) {
throw simdjson_error(error()); }
986simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::operator std::string_view() noexcept(false) {
987 if (error()) {
throw simdjson_error(error()); }
990simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::operator SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string() noexcept(false) {
991 if (error()) {
throw simdjson_error(error()); }
994simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::operator bool() noexcept(false) {
995 if (error()) {
throw simdjson_error(error()); }
998simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::operator SIMDJSON_IMPLEMENTATION::ondemand::value() noexcept(false) {
999 if (error()) {
throw simdjson_error(error()); }
1004simdjson_inline simdjson_result<const char *> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::current_location() noexcept {
1005 if (error()) {
return error(); }
1006 return first.current_location();
1010 if (error()) {
return error(); }
1011 return first.raw_json_token();
1015 if (error()) {
return error(); }
1016 return first.at_pointer(json_pointer);
1019simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::at_path(std::string_view json_path)
noexcept {
1023 return first.at_path(json_path);
1025#if SIMDJSON_STATIC_REFLECTION
1026template<constevalutil::fixed_string... FieldNames,
typename T>
1027 requires(std::is_class_v<T> && (
sizeof...(FieldNames) > 0))
1028simdjson_warn_unused simdjson_inline
error_code simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document_reference>::extract_into(T& out) &
noexcept {
1029 if (error()) {
return error(); }
1030 return first.extract_into<FieldNames...>(out);
A forward-only JSON array.
simdjson_inline simdjson_result< value > at(size_t index) noexcept
Get the value at the given index.
simdjson_result< value > at_pointer(std::string_view json_pointer) noexcept
Get the value associated with the given JSON pointer.
simdjson_inline simdjson_result< array_iterator > begin() noexcept
Begin array iteration.
simdjson_inline simdjson_result< size_t > count_elements() &noexcept
This method scans the array and counts the number of elements.
simdjson_result< value > at_path(std::string_view json_path) noexcept
Get the value associated with the given JSONPath expression.
static simdjson_inline simdjson_result< array > start_root(value_iterator &iter) noexcept
Begin array iteration from the root.
simdjson_inline simdjson_result< array_iterator > end() noexcept
Sentinel representing the end of the array.
simdjson_inline simdjson_result< uint64_t > get_uint64() noexcept
The document_reference instances are used primarily/solely for streams of JSON documents.
simdjson_inline simdjson_result< value > at(size_t index) &noexcept
Get the value at the given index in the array.
simdjson_warn_unused simdjson_inline error_code consume() noexcept
Consumes the document.
simdjson_inline int32_t current_depth() const noexcept
Returns the current depth in the document if in bounds.
simdjson_inline simdjson_result< array_iterator > begin() &noexcept
Begin array iteration.
simdjson_inline simdjson_result< size_t > count_fields() &noexcept
This method scans the object and counts the number of key-value pairs.
simdjson_inline simdjson_result< std::string_view > get_string(bool allow_replacement=false) noexcept
Cast this JSON value to a string.
simdjson_warn_unused simdjson_inline simdjson_result< number > get_number() noexcept
Attempt to parse an ondemand::number.
bool is_alive() noexcept
Some unrecoverable error conditions may render the document instance unusable.
simdjson_inline simdjson_result< bool > get_bool() noexcept
Cast this JSON value to a bool.
simdjson_inline simdjson_result< object > get_object() &noexcept
Cast this JSON value to an object.
simdjson_inline simdjson_result< bool > is_string() noexcept
Checks whether the document is a string.
simdjson_inline simdjson_result< uint64_t > get_uint64() noexcept
Cast this JSON value to an unsigned integer.
simdjson_inline bool is_negative() noexcept
Checks whether the document is a negative number.
simdjson_inline document() noexcept=default
Create a new invalid document.
simdjson_inline simdjson_result< std::string_view > raw_json_token() noexcept
Get the raw JSON for this token.
simdjson_inline simdjson_result< uint64_t > get_uint64_in_string() noexcept
Cast this JSON value (inside string) to an unsigned integer.
simdjson_inline simdjson_result< bool > is_null() noexcept
Checks if this JSON value is null.
simdjson_inline simdjson_result< int64_t > get_int64() noexcept
Cast this JSON value to a signed integer.
simdjson_inline simdjson_result< value > at_pointer(std::string_view json_pointer) noexcept
Get the value associated with the given JSON pointer.
simdjson_inline simdjson_result< json_type > type() noexcept
Get the type of this JSON value.
simdjson_inline simdjson_result< array_iterator > end() &noexcept
Sentinel representing the end of the array.
simdjson_inline simdjson_result< double > get_double_in_string() noexcept
Cast this JSON value (inside string) to a double.
simdjson_inline simdjson_result< value > at_path(std::string_view json_path) noexcept
Get the value associated with the given JSONPath expression.
json_iterator iter
Current position in the document.
simdjson_inline simdjson_result< double > get_double() noexcept
Cast this JSON value to a double.
std::string to_debug_string() noexcept
Returns debugging information.
void rewind() noexcept
Reset the iterator inside the document instance so we are pointing back at the beginning of the docum...
simdjson_inline simdjson_result< std::string_view > raw_json() noexcept
Consumes the document and returns a string_view instance corresponding to the document as represented...
simdjson_inline simdjson_result< value > find_field_unordered(std::string_view key) &noexcept
Look up a field by name on an object, without regard to key order.
simdjson_inline simdjson_result< int64_t > get_int64_in_string() noexcept
Cast this JSON value (inside string) to a signed integer.
simdjson_inline simdjson_result< size_t > count_elements() &noexcept
This method scans the array and counts the number of elements.
simdjson_inline simdjson_result< value > get_value() noexcept
Cast this JSON value to a value when the document is an object or an array.
simdjson_inline simdjson_result< value > find_field(std::string_view key) &noexcept
Look up a field by name on an object (order-sensitive).
simdjson_inline simdjson_result< number_type > get_number_type() noexcept
Determine the number type (integer or floating-point number) as quickly as possible.
simdjson_inline simdjson_result< bool > is_scalar() noexcept
Checks whether the document is a scalar (string, number, null, Boolean).
simdjson_inline simdjson_result< std::string_view > get_wobbly_string() noexcept
Cast this JSON value to a string.
bool at_end() const noexcept
Returns true if this document has been fully parsed.
simdjson_inline simdjson_result< array > get_array() &noexcept
Cast this JSON value to an array.
simdjson_inline simdjson_result< bool > is_integer() noexcept
Checks whether the document is an integer number.
simdjson_result< const char * > current_location() const noexcept
Returns the current location in the document if in bounds.
simdjson_inline simdjson_result< T > get() &noexcept
Get this value as the given type.
simdjson_inline simdjson_result< raw_json_string > get_raw_json_string() noexcept
Cast this JSON value to a raw_json_string.
A forward-only JSON object field iterator.
A string escaped per JSON rules, terminated with quote (").
An ephemeral JSON value returned during iteration.
json_type
The type of a JSON value.
@ object
A JSON object ( { "a": 1, "b" 2, ... } )
@ string
A JSON string ( "a" or "hello world\n" ...)
@ array
A JSON array ( [ 1, 2, 3 ... ] )
The top level simdjson namespace, containing everything the library provides.
error_code
All possible errors returned by simdjson.
@ SCALAR_DOCUMENT_AS_VALUE
A scalar document is treated as a value.
@ OUT_OF_ORDER_ITERATION
tried to iterate an array or object out of order (checked when SIMDJSON_DEVELOPMENT_CHECKS=1)
@ NO_SUCH_FIELD
JSON field not found in object.
@ INVALID_JSON_POINTER
Invalid JSON pointer syntax.
The result of a simdjson operation that could fail.
simdjson_warn_unused simdjson_inline error_code get(T &value) &&noexcept
Move the value to the provided variable.