2#ifndef SIMDJSON_CONVERT_INL_H
3#define SIMDJSON_CONVERT_INL_H
5#include "simdjson/convert.h"
6#if SIMDJSON_SUPPORTS_CONCEPTS
11template <
typename parser_type>
12inline auto_parser<parser_type>::auto_parser(parser_type &&parser, ondemand::document &&doc)
noexcept requires(!std::is_pointer_v<parser_type>)
13 : m_parser{std::move(parser)}, m_doc{std::move(doc)} {}
15template <
typename parser_type>
16inline auto_parser<parser_type>::auto_parser(parser_type &&parser, padded_string_view
const str)
noexcept requires(!std::is_pointer_v<parser_type>)
17 : m_parser{std::move(parser)}, m_doc{}, m_error{
SUCCESS} {
18 m_error = m_parser.iterate(str).get(m_doc);
21template <
typename parser_type>
22inline auto_parser<parser_type>::auto_parser(std::remove_pointer_t<parser_type> &parser, ondemand::document &&doc)
noexcept requires(std::is_pointer_v<parser_type>)
23 : m_parser{&parser}, m_doc{std::move(doc)} {}
25template <
typename parser_type>
26inline auto_parser<parser_type>::auto_parser(std::remove_pointer_t<parser_type> &parser, padded_string_view
const str)
noexcept requires(std::is_pointer_v<parser_type>)
27 : m_parser{&parser}, m_doc{}, m_error{
SUCCESS} {
28 m_error = m_parser->iterate(str).get(m_doc);
31template <
typename parser_type>
32inline auto_parser<parser_type>::auto_parser(padded_string_view
const str)
noexcept requires(std::is_pointer_v<parser_type>)
33 : auto_parser{ondemand::parser::get_parser(), str} {}
35template <
typename parser_type>
36inline auto_parser<parser_type>::auto_parser(parser_type parser, ondemand::document &&doc)
noexcept requires(std::is_pointer_v<parser_type>)
37 : auto_parser{*parser, std::move(doc)} {}
43template <
typename parser_type>
44inline std::remove_pointer_t<parser_type> &auto_parser<parser_type>::parser() noexcept {
45 if constexpr (std::is_pointer_v<parser_type>) {
52template <
typename parser_type>
54inline simdjson_result<T> auto_parser<parser_type>::result() noexcept(is_nothrow_gettable<T>) {
55 if (m_error != SUCCESS) {
58 return m_doc.get<T>();
61template <
typename parser_type>
63simdjson_warn_unused simdjson_inline
error_code auto_parser<parser_type>::get(T &value) &&
noexcept(is_nothrow_gettable<T>) {
64 return result<T>().get(value);
67template <
typename parser_type>
68inline simdjson_result<ondemand::array> auto_parser<parser_type>::array() noexcept {
69 return result<ondemand::array>();
72template <
typename parser_type>
73inline simdjson_result<ondemand::object> auto_parser<parser_type>::object() noexcept {
74 return result<ondemand::object>();
77template <
typename parser_type>
78inline simdjson_result<ondemand::number> auto_parser<parser_type>::number() noexcept {
79 return result<ondemand::number>();
82#if SIMDJSON_EXCEPTIONS
83template <
typename parser_type>
85inline auto_parser<parser_type>::operator T() noexcept(false) {
86 if (m_error != SUCCESS) {
87 throw simdjson_error(m_error);
89 return m_doc.get<T>();
93template <
typename parser_type>
95inline std::optional<T> auto_parser<parser_type>::optional() noexcept(is_nothrow_gettable<T>) {
96 if (m_error != SUCCESS) {
100 if (m_doc.get<T>().get(value)) [[unlikely]] {
103 return {std::move(value)};
108inline T to_adaptor<T>::operator()(simdjson_result<ondemand::value> &val)
const noexcept {
113inline auto to_adaptor<T>::operator()(padded_string_view
const str)
const noexcept {
114 return auto_parser<ondemand::parser *>{str};
118inline auto to_adaptor<T>::operator()(ondemand::parser &parser, padded_string_view
const str)
const noexcept {
119 return auto_parser<ondemand::parser *>{parser, str};
123inline auto to_adaptor<T>::operator()(std::string str)
const noexcept {
128inline auto to_adaptor<T>::operator()(ondemand::parser &parser, std::string str)
const noexcept {
The top level simdjson namespace, containing everything the library provides.
padded_string_view pad_with_reserve(std::string &s) noexcept
Create a padded_string_view from a string.
error_code
All possible errors returned by simdjson.