1#ifndef SIMDJSON_GENERIC_ONDEMAND_RANGES_INL_H
3#ifndef SIMDJSON_CONDITIONAL_INCLUDE
4#define SIMDJSON_GENERIC_ONDEMAND_RANGES_INL_H
5#include "simdjson/generic/ondemand/base.h"
6#include "simdjson/generic/ondemand/ranges.h"
7#include "simdjson/generic/ondemand/array-inl.h"
8#include "simdjson/generic/ondemand/array_iterator-inl.h"
9#include "simdjson/generic/ondemand/object-inl.h"
10#include "simdjson/generic/ondemand/object_iterator-inl.h"
13#if SIMDJSON_SUPPORTS_RANGES
16namespace SIMDJSON_IMPLEMENTATION {
23simdjson_inline array_range_iterator::array_range_iterator(array_iterator iter) noexcept
26simdjson_inline simdjson_result<value> array_range_iterator::operator*() const noexcept {
30simdjson_inline array_range_iterator& array_range_iterator::operator++() noexcept {
35SIMDJSON_PUSH_DISABLE_ALL_WARNINGS
36simdjson_inline
void array_range_iterator::operator++(
int)
noexcept {
39SIMDJSON_POP_DISABLE_WARNINGS
45simdjson_inline array_range::array_range(array& arr)
noexcept {
47 if (b.error()) { error_ = b.error();
return; }
48 begin_ = b.value_unsafe();
49 end_ = arr.end().value_unsafe();
52simdjson_inline array_range_iterator array_range::begin() noexcept {
53 return array_range_iterator(begin_);
56simdjson_inline array_range_iterator array_range::end() noexcept {
57 return array_range_iterator(end_);
64simdjson_inline object_range_iterator::object_range_iterator(object_iterator iter) noexcept
67simdjson_inline simdjson_result<field> object_range_iterator::operator*() const noexcept {
71simdjson_inline object_range_iterator& object_range_iterator::operator++() noexcept {
76SIMDJSON_PUSH_DISABLE_ALL_WARNINGS
77simdjson_inline
void object_range_iterator::operator++(
int)
noexcept {
80SIMDJSON_POP_DISABLE_WARNINGS
87simdjson_inline object_range::object_range(
object& obj)
noexcept {
89 if (b.error()) { error_ = b.error();
return; }
90 begin_ = b.value_unsafe();
91 end_ = obj.end().value_unsafe();
94simdjson_inline object_range_iterator object_range::begin() noexcept {
95 return object_range_iterator(begin_);
98simdjson_inline object_range_iterator object_range::end() noexcept {
99 return object_range_iterator(end_);
106simdjson_inline array_range get_range(array& arr)
noexcept {
107 return array_range(arr);
110simdjson_inline object_range get_key_value_range(
object& obj)
noexcept {
111 return object_range(obj);
114#if SIMDJSON_EXCEPTIONS
115simdjson_inline array_range get_range(simdjson_result<array> result) {
116 return array_range(result.value());
119simdjson_inline object_range get_key_value_range(simdjson_result<object> result) {
120 return object_range(result.value());
129static_assert(std::input_iterator<simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array_range_iterator>);
130static_assert(std::input_iterator<simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object_range_iterator>);
131static_assert(std::ranges::input_range<simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array_range>);
132static_assert(std::ranges::input_range<simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object_range>);
133static_assert(std::ranges::view<simdjson::SIMDJSON_IMPLEMENTATION::ondemand::array_range>);
134static_assert(std::ranges::view<simdjson::SIMDJSON_IMPLEMENTATION::ondemand::object_range>);
The top level simdjson namespace, containing everything the library provides.