simdjson 4.1.0
Ridiculously Fast JSON
Loading...
Searching...
No Matches
json_type.h
1#ifndef SIMDJSON_GENERIC_ONDEMAND_JSON_TYPE_H
2
3#ifndef SIMDJSON_CONDITIONAL_INCLUDE
4#define SIMDJSON_GENERIC_ONDEMAND_JSON_TYPE_H
5#include "simdjson/generic/ondemand/base.h"
6#include "simdjson/generic/implementation_simdjson_result_base.h"
7#include "simdjson/generic/numberparsing.h"
8#endif // SIMDJSON_CONDITIONAL_INCLUDE
9
10namespace simdjson {
11namespace SIMDJSON_IMPLEMENTATION {
12namespace ondemand {
13
17enum class json_type {
18 unknown=0,
19 // Start at 1 to catch uninitialized / default values more easily
20 array=1,
21 object,
22 number,
23 string,
24 boolean,
25 null
26};
27
33struct number {
34
46 simdjson_inline ondemand::number_type get_number_type() const noexcept;
51 simdjson_inline bool is_uint64() const noexcept;
55 simdjson_inline uint64_t get_uint64() const noexcept;
56 simdjson_inline operator uint64_t() const noexcept;
57
62 simdjson_inline bool is_int64() const noexcept;
66 simdjson_inline int64_t get_int64() const noexcept;
67 simdjson_inline operator int64_t() const noexcept;
68
69
74 simdjson_inline bool is_double() const noexcept;
78 simdjson_inline double get_double() const noexcept;
79 simdjson_inline operator double() const noexcept;
80
85 simdjson_inline double as_double() const noexcept;
86
87
88protected:
94 friend class value_iterator;
95 template<typename W>
96 friend error_code numberparsing::write_float(const uint8_t *const src, bool negative, uint64_t i, const uint8_t * start_digits, size_t digit_count, int64_t exponent, W &writer);
97 template<typename W>
98 friend error_code numberparsing::parse_number(const uint8_t *const src, W &writer);
100 simdjson_inline void append_s64(int64_t value) noexcept;
102 simdjson_inline void append_u64(uint64_t value) noexcept;
104 simdjson_inline void append_double(double value) noexcept;
106 simdjson_inline void skip_double() noexcept;
115 union {
116 double floating_point_number;
117 int64_t signed_integer;
118 uint64_t unsigned_integer;
120 number_type type{number_type::signed_integer};
121};
122
129inline std::ostream& operator<<(std::ostream& out, json_type type) noexcept;
130
131#if SIMDJSON_EXCEPTIONS
141inline std::ostream& operator<<(std::ostream& out, simdjson_result<json_type> &type) noexcept(false);
142#endif
143
144} // namespace ondemand
145} // namespace SIMDJSON_IMPLEMENTATION
146} // namespace simdjson
147
148namespace simdjson {
149
150template<>
151struct simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::json_type> : public SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::json_type> {
152public:
153 simdjson_inline simdjson_result(SIMDJSON_IMPLEMENTATION::ondemand::json_type &&value) noexcept;
154 simdjson_inline simdjson_result(error_code error) noexcept;
155 simdjson_inline simdjson_result() noexcept = default;
156 simdjson_inline ~simdjson_result() noexcept = default;
157};
158
159} // namespace simdjson
160
161#endif // SIMDJSON_GENERIC_ONDEMAND_JSON_TYPE_H
A forward-only JSON object field iterator.
Definition object.h:20
An ephemeral JSON value returned during iteration.
Definition value.h:21
@ string
A JSON string ( "a" or "hello world\n" ...)
The top level simdjson namespace, containing everything the library provides.
Definition base.h:8
error_code
All possible errors returned by simdjson.
Definition error.h:19
A type representing a JSON number.
Definition json_type.h:33
friend class value_iterator
The next block of declaration is designed so that we can call the number parsing functions on a numbe...
Definition json_type.h:94
simdjson_inline bool is_int64() const noexcept
return true if the automatically determined type of the number is number_type::signed_integer.
simdjson_inline double as_double() const noexcept
Convert the number to a double.
simdjson_inline bool is_double() const noexcept
return true if the automatically determined type of the number is number_type::floating_point_number.
simdjson_inline ondemand::number_type get_number_type() const noexcept
return the automatically determined type of the number: number_type::floating_point_number,...
simdjson_inline int64_t get_int64() const noexcept
return the value as a int64_t, only valid if is_int64() is true.
union simdjson::SIMDJSON_IMPLEMENTATION::ondemand::number::@0 payload
End of friend declarations.
simdjson_inline void append_u64(uint64_t value) noexcept
Store an unsigned 64-bit value to the number.
simdjson_inline double get_double() const noexcept
return the value as a double, only valid if is_double() is true.
simdjson_inline void skip_double() noexcept
Specifies that the value is a double, but leave it undefined.
simdjson_inline void append_s64(int64_t value) noexcept
Store a signed 64-bit value to the number.
simdjson_inline void append_double(double value) noexcept
Store a double value to the number.
simdjson_inline bool is_uint64() const noexcept
return true if the automatically determined type of the number is number_type::unsigned_integer.
simdjson_inline uint64_t get_uint64() const noexcept
return the value as a uint64_t, only valid if is_uint64() is true.
The result of a simdjson operation that could fail.
Definition error.h:278
simdjson_inline error_code error() const noexcept
The error.
Definition error-inl.h:168