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)} {}
40template <
typename parser_type>
41inline std::remove_pointer_t<parser_type> &auto_parser<parser_type>::parser() noexcept {
42 if constexpr (std::is_pointer_v<parser_type>) {
49template <
typename parser_type>
51inline simdjson_result<T> auto_parser<parser_type>::result() noexcept(is_nothrow_gettable<T>) {
52 if (m_error != SUCCESS) {
55 return m_doc.get<T>();
58template <
typename parser_type>
60simdjson_warn_unused simdjson_inline
error_code auto_parser<parser_type>::get(T &value) &&
noexcept(is_nothrow_gettable<T>) {
61 return result<T>().get(value);
64template <
typename parser_type>
65inline simdjson_result<ondemand::array> auto_parser<parser_type>::array() noexcept {
66 return result<ondemand::array>();
69template <
typename parser_type>
70inline simdjson_result<ondemand::object> auto_parser<parser_type>::object() noexcept {
71 return result<ondemand::object>();
74template <
typename parser_type>
75inline simdjson_result<ondemand::number> auto_parser<parser_type>::number() noexcept {
76 return result<ondemand::number>();
79#if SIMDJSON_EXCEPTIONS
80template <
typename parser_type>
82inline auto_parser<parser_type>::operator T() noexcept(false) {
83 if (m_error != SUCCESS) {
84 throw simdjson_error(m_error);
86 return m_doc.get<T>();
90template <
typename parser_type>
92inline std::optional<T> auto_parser<parser_type>::optional() noexcept(is_nothrow_gettable<T>) {
93 if (m_error != SUCCESS) {
97 if (m_doc.get<T>().get(value)) [[unlikely]] {
100 return {std::move(value)};
105inline T to_adaptor<T>::operator()(simdjson_result<ondemand::value> &val)
const noexcept {
110inline auto to_adaptor<T>::operator()(padded_string_view
const str)
const noexcept {
111 return auto_parser<ondemand::parser *>{str};
115inline auto to_adaptor<T>::operator()(ondemand::parser &parser, padded_string_view
const str)
const noexcept {
116 return auto_parser<ondemand::parser *>{parser, str};
The top level simdjson namespace, containing everything the library provides.
error_code
All possible errors returned by simdjson.