simdjson  3.1.8
Ridiculously Fast JSON
value_iterator.h
1 namespace simdjson {
2 namespace SIMDJSON_IMPLEMENTATION {
3 namespace ondemand {
4 
5 class document;
6 class object;
7 class array;
8 class value;
9 class raw_json_string;
10 class parser;
11 
20 class value_iterator {
21 protected:
23  json_iterator *_json_iter{};
25  depth_t _depth{};
29  token_position _start_position{};
30 
31 public:
32  simdjson_inline value_iterator() noexcept = default;
33 
37  simdjson_inline void start_document() noexcept;
38 
44  simdjson_warn_unused simdjson_inline error_code skip_child() noexcept;
45 
49  simdjson_inline bool at_end() const noexcept;
50 
54  simdjson_inline bool at_start() const noexcept;
55 
59  simdjson_inline bool is_open() const noexcept;
60 
64  simdjson_inline bool at_first_field() const noexcept;
65 
69  simdjson_inline void abandon() noexcept;
70 
74  simdjson_inline value_iterator child_value() const noexcept;
75 
79  simdjson_inline int32_t depth() const noexcept;
80 
86  simdjson_inline simdjson_result<json_type> type() const noexcept;
87 
103  simdjson_warn_unused simdjson_inline simdjson_result<bool> start_object() noexcept;
111  simdjson_warn_unused simdjson_inline simdjson_result<bool> start_root_object() noexcept;
119  simdjson_warn_unused simdjson_inline error_code check_root_object() noexcept;
129  simdjson_warn_unused simdjson_inline simdjson_result<bool> started_object() noexcept;
139  simdjson_warn_unused simdjson_inline simdjson_result<bool> started_root_object() noexcept;
140 
151  simdjson_warn_unused simdjson_inline simdjson_result<bool> has_next_field() noexcept;
152 
156  simdjson_warn_unused simdjson_inline simdjson_result<raw_json_string> field_key() noexcept;
157 
161  simdjson_warn_unused simdjson_inline error_code field_value() noexcept;
162 
179  simdjson_warn_unused simdjson_inline error_code find_field(const std::string_view key) noexcept;
180 
198  simdjson_warn_unused simdjson_inline simdjson_result<bool> find_field_raw(const std::string_view key) noexcept;
199 
218  simdjson_warn_unused simdjson_inline simdjson_result<bool> find_field_unordered_raw(const std::string_view key) noexcept;
219 
235  simdjson_warn_unused simdjson_inline simdjson_result<bool> start_array() noexcept;
243  simdjson_warn_unused simdjson_inline simdjson_result<bool> start_root_array() noexcept;
251  simdjson_warn_unused simdjson_inline error_code check_root_array() noexcept;
261  simdjson_warn_unused simdjson_inline simdjson_result<bool> started_array() noexcept;
271  simdjson_warn_unused simdjson_inline simdjson_result<bool> started_root_array() noexcept;
272 
282  simdjson_warn_unused simdjson_inline simdjson_result<bool> has_next_element() noexcept;
283 
287  simdjson_warn_unused simdjson_inline value_iterator child() const noexcept;
288 
297  simdjson_warn_unused simdjson_inline simdjson_result<std::string_view> get_string(bool allow_replacement) noexcept;
298  simdjson_warn_unused simdjson_inline simdjson_result<std::string_view> get_wobbly_string() noexcept;
299  simdjson_warn_unused simdjson_inline simdjson_result<raw_json_string> get_raw_json_string() noexcept;
300  simdjson_warn_unused simdjson_inline simdjson_result<uint64_t> get_uint64() noexcept;
301  simdjson_warn_unused simdjson_inline simdjson_result<uint64_t> get_uint64_in_string() noexcept;
302  simdjson_warn_unused simdjson_inline simdjson_result<int64_t> get_int64() noexcept;
303  simdjson_warn_unused simdjson_inline simdjson_result<int64_t> get_int64_in_string() noexcept;
304  simdjson_warn_unused simdjson_inline simdjson_result<double> get_double() noexcept;
305  simdjson_warn_unused simdjson_inline simdjson_result<double> get_double_in_string() noexcept;
306  simdjson_warn_unused simdjson_inline simdjson_result<bool> get_bool() noexcept;
307  simdjson_warn_unused simdjson_inline simdjson_result<bool> is_null() noexcept;
308  simdjson_warn_unused simdjson_inline bool is_negative() noexcept;
309  simdjson_warn_unused simdjson_inline simdjson_result<bool> is_integer() noexcept;
310  simdjson_warn_unused simdjson_inline simdjson_result<number_type> get_number_type() noexcept;
311  simdjson_warn_unused simdjson_inline simdjson_result<number> get_number() noexcept;
312 
313  simdjson_warn_unused simdjson_inline simdjson_result<std::string_view> get_root_string(bool check_trailing, bool allow_replacement) noexcept;
314  simdjson_warn_unused simdjson_inline simdjson_result<std::string_view> get_root_wobbly_string(bool check_trailing) noexcept;
315  simdjson_warn_unused simdjson_inline simdjson_result<raw_json_string> get_root_raw_json_string(bool check_trailing) noexcept;
316  simdjson_warn_unused simdjson_inline simdjson_result<uint64_t> get_root_uint64(bool check_trailing) noexcept;
317  simdjson_warn_unused simdjson_inline simdjson_result<uint64_t> get_root_uint64_in_string(bool check_trailing) noexcept;
318  simdjson_warn_unused simdjson_inline simdjson_result<int64_t> get_root_int64(bool check_trailing) noexcept;
319  simdjson_warn_unused simdjson_inline simdjson_result<int64_t> get_root_int64_in_string(bool check_trailing) noexcept;
320  simdjson_warn_unused simdjson_inline simdjson_result<double> get_root_double(bool check_trailing) noexcept;
321  simdjson_warn_unused simdjson_inline simdjson_result<double> get_root_double_in_string(bool check_trailing) noexcept;
322  simdjson_warn_unused simdjson_inline simdjson_result<bool> get_root_bool(bool check_trailing) noexcept;
323  simdjson_warn_unused simdjson_inline bool is_root_negative() noexcept;
324  simdjson_warn_unused simdjson_inline simdjson_result<bool> is_root_integer(bool check_trailing) noexcept;
325  simdjson_warn_unused simdjson_inline simdjson_result<number_type> get_root_number_type(bool check_trailing) noexcept;
326  simdjson_warn_unused simdjson_inline simdjson_result<number> get_root_number(bool check_trailing) noexcept;
327  simdjson_warn_unused simdjson_inline simdjson_result<bool> is_root_null(bool check_trailing) noexcept;
328 
329  simdjson_inline error_code error() const noexcept;
330  simdjson_inline uint8_t *&string_buf_loc() noexcept;
331  simdjson_inline const json_iterator &json_iter() const noexcept;
332  simdjson_inline json_iterator &json_iter() noexcept;
333 
334  simdjson_inline void assert_is_valid() const noexcept;
335  simdjson_inline bool is_valid() const noexcept;
336 
338 protected:
343  simdjson_inline simdjson_result<bool> reset_array() noexcept;
348  simdjson_inline simdjson_result<bool> reset_object() noexcept;
356  simdjson_inline void move_at_start() noexcept;
357 
364  simdjson_inline void move_at_container_start() noexcept;
365  /* Useful for debugging and logging purposes. */
366  inline std::string to_string() const noexcept;
367  simdjson_inline value_iterator(json_iterator *json_iter, depth_t depth, token_position start_index) noexcept;
368 
369  simdjson_inline simdjson_result<bool> parse_null(const uint8_t *json) const noexcept;
370  simdjson_inline simdjson_result<bool> parse_bool(const uint8_t *json) const noexcept;
371  simdjson_inline const uint8_t *peek_start() const noexcept;
372  simdjson_inline uint32_t peek_start_length() const noexcept;
373 
403  simdjson_inline void advance_scalar(const char *type) noexcept;
404  simdjson_inline void advance_root_scalar(const char *type) noexcept;
405  simdjson_inline void advance_non_root_scalar(const char *type) noexcept;
406 
407  simdjson_inline const uint8_t *peek_scalar(const char *type) noexcept;
408  simdjson_inline const uint8_t *peek_root_scalar(const char *type) noexcept;
409  simdjson_inline const uint8_t *peek_non_root_scalar(const char *type) noexcept;
410 
411 
412  simdjson_inline error_code start_container(uint8_t start_char, const char *incorrect_type_message, const char *type) noexcept;
413  simdjson_inline error_code end_container() noexcept;
414 
421  simdjson_inline simdjson_result<const uint8_t *> advance_to_value() noexcept;
422 
423  simdjson_inline error_code incorrect_type_error(const char *message) const noexcept;
424  simdjson_inline error_code error_unless_more_tokens(uint32_t tokens=1) const noexcept;
425 
426  simdjson_inline bool is_at_start() const noexcept;
433  simdjson_inline bool is_at_iterator_start() const noexcept;
434 
442  simdjson_inline bool is_at_key() const noexcept;
443 
444  inline void assert_at_start() const noexcept;
445  inline void assert_at_container_start() const noexcept;
446  inline void assert_at_root() const noexcept;
447  inline void assert_at_child() const noexcept;
448  inline void assert_at_next() const noexcept;
449  inline void assert_at_non_root_start() const noexcept;
450 
452  simdjson_inline token_position start_position() const noexcept;
453 
455  simdjson_inline token_position position() const noexcept;
457  simdjson_inline token_position last_position() const noexcept;
459  simdjson_inline token_position end_position() const noexcept;
461  simdjson_inline error_code report_error(error_code error, const char *message) noexcept;
462 
463  friend class document;
464  friend class object;
465  friend class array;
466  friend class value;
467 }; // value_iterator
468 
469 } // namespace ondemand
470 } // namespace SIMDJSON_IMPLEMENTATION
471 } // namespace simdjson
472 
473 namespace simdjson {
474 
475 template<>
476 struct simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value_iterator> : public SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::value_iterator> {
477 public:
478  simdjson_inline simdjson_result(SIMDJSON_IMPLEMENTATION::ondemand::value_iterator &&value) noexcept;
479  simdjson_inline simdjson_result(error_code error) noexcept;
480  simdjson_inline simdjson_result() noexcept = default;
481 };
482 
483 } // namespace simdjson
A string escaped per JSON rules, terminated with quote (").
An ephemeral JSON value returned during iteration.
Definition: value.h:17
json_type
The type of a JSON value.
Definition: json_type.h:7
@ object
A JSON object ( { "a": 1, "b" 2, ... } )
int32_t depth_t
Represents the depth of a JSON value (number of nested arrays/objects).
Definition: ondemand.h:11
We want to support argument-dependent lookup (ADL).
error_code
All possible errors returned by simdjson.
Definition: error.h:17
std::string to_string(T x)
Converts JSON to a string.
A type representing a JSON number.
Definition: json_type.h:24
The result of a simdjson operation that could fail.
Definition: error.h:205