simdjson  3.1.6
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;
112 
122  simdjson_warn_unused simdjson_inline simdjson_result<bool> started_object() noexcept;
132  simdjson_warn_unused simdjson_inline simdjson_result<bool> started_root_object() noexcept;
133 
144  simdjson_warn_unused simdjson_inline simdjson_result<bool> has_next_field() noexcept;
145 
149  simdjson_warn_unused simdjson_inline simdjson_result<raw_json_string> field_key() noexcept;
150 
154  simdjson_warn_unused simdjson_inline error_code field_value() noexcept;
155 
172  simdjson_warn_unused simdjson_inline error_code find_field(const std::string_view key) noexcept;
173 
191  simdjson_warn_unused simdjson_inline simdjson_result<bool> find_field_raw(const std::string_view key) noexcept;
192 
211  simdjson_warn_unused simdjson_inline simdjson_result<bool> find_field_unordered_raw(const std::string_view key) noexcept;
212 
228  simdjson_warn_unused simdjson_inline simdjson_result<bool> start_array() noexcept;
236  simdjson_warn_unused simdjson_inline simdjson_result<bool> start_root_array() noexcept;
237 
247  simdjson_warn_unused simdjson_inline simdjson_result<bool> started_array() noexcept;
257  simdjson_warn_unused simdjson_inline simdjson_result<bool> started_root_array() noexcept;
258 
268  simdjson_warn_unused simdjson_inline simdjson_result<bool> has_next_element() noexcept;
269 
273  simdjson_warn_unused simdjson_inline value_iterator child() const noexcept;
274 
283  simdjson_warn_unused simdjson_inline simdjson_result<std::string_view> get_string(bool allow_replacement) noexcept;
284  simdjson_warn_unused simdjson_inline simdjson_result<std::string_view> get_wobbly_string() noexcept;
285  simdjson_warn_unused simdjson_inline simdjson_result<raw_json_string> get_raw_json_string() noexcept;
286  simdjson_warn_unused simdjson_inline simdjson_result<uint64_t> get_uint64() noexcept;
287  simdjson_warn_unused simdjson_inline simdjson_result<uint64_t> get_uint64_in_string() noexcept;
288  simdjson_warn_unused simdjson_inline simdjson_result<int64_t> get_int64() noexcept;
289  simdjson_warn_unused simdjson_inline simdjson_result<int64_t> get_int64_in_string() noexcept;
290  simdjson_warn_unused simdjson_inline simdjson_result<double> get_double() noexcept;
291  simdjson_warn_unused simdjson_inline simdjson_result<double> get_double_in_string() noexcept;
292  simdjson_warn_unused simdjson_inline simdjson_result<bool> get_bool() noexcept;
293  simdjson_warn_unused simdjson_inline simdjson_result<bool> is_null() noexcept;
294  simdjson_warn_unused simdjson_inline bool is_negative() noexcept;
295  simdjson_warn_unused simdjson_inline simdjson_result<bool> is_integer() noexcept;
296  simdjson_warn_unused simdjson_inline simdjson_result<number_type> get_number_type() noexcept;
297  simdjson_warn_unused simdjson_inline simdjson_result<number> get_number() noexcept;
298 
299  simdjson_warn_unused simdjson_inline simdjson_result<std::string_view> get_root_string(bool check_trailing, bool allow_replacement) noexcept;
300  simdjson_warn_unused simdjson_inline simdjson_result<std::string_view> get_root_wobbly_string(bool check_trailing) noexcept;
301  simdjson_warn_unused simdjson_inline simdjson_result<raw_json_string> get_root_raw_json_string(bool check_trailing) noexcept;
302  simdjson_warn_unused simdjson_inline simdjson_result<uint64_t> get_root_uint64(bool check_trailing) noexcept;
303  simdjson_warn_unused simdjson_inline simdjson_result<uint64_t> get_root_uint64_in_string(bool check_trailing) noexcept;
304  simdjson_warn_unused simdjson_inline simdjson_result<int64_t> get_root_int64(bool check_trailing) noexcept;
305  simdjson_warn_unused simdjson_inline simdjson_result<int64_t> get_root_int64_in_string(bool check_trailing) noexcept;
306  simdjson_warn_unused simdjson_inline simdjson_result<double> get_root_double(bool check_trailing) noexcept;
307  simdjson_warn_unused simdjson_inline simdjson_result<double> get_root_double_in_string(bool check_trailing) noexcept;
308  simdjson_warn_unused simdjson_inline simdjson_result<bool> get_root_bool(bool check_trailing) noexcept;
309  simdjson_warn_unused simdjson_inline bool is_root_negative() noexcept;
310  simdjson_warn_unused simdjson_inline simdjson_result<bool> is_root_integer(bool check_trailing) noexcept;
311  simdjson_warn_unused simdjson_inline simdjson_result<number_type> get_root_number_type(bool check_trailing) noexcept;
312  simdjson_warn_unused simdjson_inline simdjson_result<number> get_root_number(bool check_trailing) noexcept;
313  simdjson_warn_unused simdjson_inline simdjson_result<bool> is_root_null(bool check_trailing) noexcept;
314 
315  simdjson_inline error_code error() const noexcept;
316  simdjson_inline uint8_t *&string_buf_loc() noexcept;
317  simdjson_inline const json_iterator &json_iter() const noexcept;
318  simdjson_inline json_iterator &json_iter() noexcept;
319 
320  simdjson_inline void assert_is_valid() const noexcept;
321  simdjson_inline bool is_valid() const noexcept;
322 
324 protected:
329  simdjson_inline simdjson_result<bool> reset_array() noexcept;
334  simdjson_inline simdjson_result<bool> reset_object() noexcept;
342  simdjson_inline void move_at_start() noexcept;
343 
350  simdjson_inline void move_at_container_start() noexcept;
351  /* Useful for debugging and logging purposes. */
352  inline std::string to_string() const noexcept;
353  simdjson_inline value_iterator(json_iterator *json_iter, depth_t depth, token_position start_index) noexcept;
354 
355  simdjson_inline simdjson_result<bool> parse_null(const uint8_t *json) const noexcept;
356  simdjson_inline simdjson_result<bool> parse_bool(const uint8_t *json) const noexcept;
357  simdjson_inline const uint8_t *peek_start() const noexcept;
358  simdjson_inline uint32_t peek_start_length() const noexcept;
359 
389  simdjson_inline void advance_scalar(const char *type) noexcept;
390  simdjson_inline void advance_root_scalar(const char *type) noexcept;
391  simdjson_inline void advance_non_root_scalar(const char *type) noexcept;
392 
393  simdjson_inline const uint8_t *peek_scalar(const char *type) noexcept;
394  simdjson_inline const uint8_t *peek_root_scalar(const char *type) noexcept;
395  simdjson_inline const uint8_t *peek_non_root_scalar(const char *type) noexcept;
396 
397 
398  simdjson_inline error_code start_container(uint8_t start_char, const char *incorrect_type_message, const char *type) noexcept;
399  simdjson_inline error_code end_container() noexcept;
400 
407  simdjson_inline simdjson_result<const uint8_t *> advance_to_value() noexcept;
408 
409  simdjson_inline error_code incorrect_type_error(const char *message) const noexcept;
410  simdjson_inline error_code error_unless_more_tokens(uint32_t tokens=1) const noexcept;
411 
412  simdjson_inline bool is_at_start() const noexcept;
419  simdjson_inline bool is_at_iterator_start() const noexcept;
420 
428  simdjson_inline bool is_at_key() const noexcept;
429 
430  inline void assert_at_start() const noexcept;
431  inline void assert_at_container_start() const noexcept;
432  inline void assert_at_root() const noexcept;
433  inline void assert_at_child() const noexcept;
434  inline void assert_at_next() const noexcept;
435  inline void assert_at_non_root_start() const noexcept;
436 
438  simdjson_inline token_position start_position() const noexcept;
439 
441  simdjson_inline token_position position() const noexcept;
443  simdjson_inline token_position last_position() const noexcept;
445  simdjson_inline token_position end_position() const noexcept;
447  simdjson_inline error_code report_error(error_code error, const char *message) noexcept;
448 
449  friend class document;
450  friend class object;
451  friend class array;
452  friend class value;
453 }; // value_iterator
454 
455 } // namespace ondemand
456 } // namespace SIMDJSON_IMPLEMENTATION
457 } // namespace simdjson
458 
459 namespace simdjson {
460 
461 template<>
462 struct simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value_iterator> : public SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::value_iterator> {
463 public:
464  simdjson_inline simdjson_result(SIMDJSON_IMPLEMENTATION::ondemand::value_iterator &&value) noexcept;
465  simdjson_inline simdjson_result(error_code error) noexcept;
466  simdjson_inline simdjson_result() noexcept = default;
467 };
468 
469 } // 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