1 #ifndef SIMDJSON_GENERIC_ONDEMAND_JSON_ITERATOR_H
3 #ifndef SIMDJSON_CONDITIONAL_INCLUDE
4 #define SIMDJSON_GENERIC_ONDEMAND_JSON_ITERATOR_H
5 #include "simdjson/generic/ondemand/base.h"
6 #include "simdjson/generic/implementation_simdjson_result_base.h"
7 #include "simdjson/generic/ondemand/token_iterator.h"
11 namespace SIMDJSON_IMPLEMENTATION {
21 token_iterator token{};
22 ondemand::parser *parser{};
28 uint8_t *_string_buf_loc{};
55 token_position _root{};
62 bool _streaming{
false};
65 simdjson_inline json_iterator() noexcept = default;
66 simdjson_inline json_iterator(json_iterator &&other) noexcept;
67 simdjson_inline json_iterator &operator=(json_iterator &&other) noexcept;
68 simdjson_inline explicit json_iterator(const json_iterator &other) noexcept = default;
69 simdjson_inline json_iterator &operator=(const json_iterator &other) noexcept = default;
73 simdjson_warn_unused simdjson_inline
error_code skip_child(
depth_t parent_depth) noexcept;
78 simdjson_inline
bool at_root() const noexcept;
86 simdjson_inline
bool streaming() const noexcept;
91 simdjson_inline token_position root_position() const noexcept;
95 simdjson_inline
void assert_at_document_depth() const noexcept;
99 simdjson_inline
void assert_at_root() const noexcept;
104 simdjson_inline
bool at_end() const noexcept;
109 simdjson_inline
bool is_alive() const noexcept;
114 simdjson_inline
void abandon() noexcept;
119 simdjson_inline const uint8_t *return_current_and_advance() noexcept;
127 simdjson_inline
bool is_single_token() const noexcept;
134 simdjson_inline
void assert_more_tokens(uint32_t required_tokens=1) const noexcept;
140 simdjson_inline
void assert_valid_position(token_position position) const noexcept;
151 simdjson_inline const uint8_t *peek(int32_t delta=0) const noexcept;
159 simdjson_inline uint32_t peek_length(int32_t delta=0) const noexcept;
168 simdjson_inline const uint8_t *unsafe_pointer() const noexcept;
179 simdjson_inline const uint8_t *peek(token_position position) const noexcept;
187 simdjson_inline uint32_t peek_length(token_position position) const noexcept;
195 simdjson_inline uint32_t peek_root_length(token_position position) const noexcept;
204 simdjson_inline const uint8_t *peek_last() const noexcept;
213 simdjson_inline
void ascend_to(
depth_t parent_depth) noexcept;
222 simdjson_inline
void descend_to(
depth_t child_depth) noexcept;
223 simdjson_inline
void descend_to(
depth_t child_depth, int32_t delta) noexcept;
228 simdjson_inline
depth_t depth() const noexcept;
233 simdjson_inline uint8_t *&string_buf_loc() noexcept;
255 simdjson_warn_unused simdjson_inline
bool copy_to_buffer(const uint8_t *json, uint32_t max_len, uint8_t *tmpbuf,
size_t N) noexcept;
257 simdjson_inline token_position position() const noexcept;
263 simdjson_inline simdjson_result<std::string_view> unescape(raw_json_string in,
bool allow_replacement) noexcept;
264 simdjson_inline simdjson_result<std::string_view> unescape_wobbly(raw_json_string in) noexcept;
266 simdjson_inline
void reenter_child(token_position position,
depth_t child_depth) noexcept;
268 simdjson_inline
error_code consume_character(
char c) noexcept;
269 #if SIMDJSON_DEVELOPMENT_CHECKS
270 simdjson_inline token_position start_position(
depth_t depth)
const noexcept;
271 simdjson_inline
void set_start_position(
depth_t depth, token_position position) noexcept;
275 inline std::string
to_string() const noexcept;
280 inline simdjson_result<const
char *> current_location() const noexcept;
286 inline
void rewind() noexcept;
293 inline
bool balanced() const noexcept;
295 simdjson_inline json_iterator(const uint8_t *buf, ondemand::parser *parser) noexcept;
296 #ifdef SIMDJSON_EXPERIMENTAL_ALLOW_INCOMPLETE_JSON
297 simdjson_inline json_iterator(
const uint8_t *buf, ondemand::parser *parser,
bool streaming) noexcept;
300 simdjson_inline token_position last_position() const noexcept;
302 simdjson_inline token_position end_position() const noexcept;
304 simdjson_inline token_position end() const noexcept;
306 friend class document;
307 friend class document_stream;
311 friend class raw_json_string;
313 friend class value_iterator;
315 template <typename... Args>
316 friend simdjson_inline
void logger::log_line(const json_iterator &iter, const
char *title_prefix, const
char *title, std::string_view detail,
int delta,
int depth_delta, logger::log_level level, Args&&... args) noexcept;
317 template <typename... Args>
318 friend simdjson_inline
void logger::log_line(const json_iterator &iter, token_position index,
depth_t depth, const
char *title_prefix, const
char *title, std::string_view detail, logger::log_level level, Args&&... args) noexcept;
330 simdjson_inline
simdjson_result(SIMDJSON_IMPLEMENTATION::ondemand::json_iterator &&value) noexcept;
int32_t depth_t
Represents the depth of a JSON value (number of nested arrays/objects).
The top level simdjson namespace, containing everything the library provides.
error_code
All possible errors returned by simdjson.
std::string to_string(T x)
Converts JSON to a string.
The result of a simdjson operation that could fail.
The result of a simdjson operation that could fail.