simdjson  3.1.8
Ridiculously Fast JSON
field-inl.h
1 namespace simdjson {
2 namespace SIMDJSON_IMPLEMENTATION {
3 namespace ondemand {
4 
5 // clang 6 doesn't think the default constructor can be noexcept, so we make it explicit
6 simdjson_inline field::field() noexcept : std::pair<raw_json_string, ondemand::value>() {}
7 
8 simdjson_inline field::field(raw_json_string key, ondemand::value &&value) noexcept
9  : std::pair<raw_json_string, ondemand::value>(key, std::forward<ondemand::value>(value))
10 {
11 }
12 
13 simdjson_inline simdjson_result<field> field::start(value_iterator &parent_iter) noexcept {
14  raw_json_string key;
15  SIMDJSON_TRY( parent_iter.field_key().get(key) );
16  SIMDJSON_TRY( parent_iter.field_value() );
17  return field::start(parent_iter, key);
18 }
19 
20 simdjson_inline simdjson_result<field> field::start(const value_iterator &parent_iter, raw_json_string key) noexcept {
21  return field(key, parent_iter.child());
22 }
23 
24 simdjson_inline simdjson_warn_unused simdjson_result<std::string_view> field::unescaped_key(bool allow_replacement) noexcept {
25  SIMDJSON_ASSUME(first.buf != nullptr); // We would like to call .alive() but Visual Studio won't let us.
26  simdjson_result<std::string_view> answer = first.unescape(second.iter.json_iter(), allow_replacement);
27  first.consume();
28  return answer;
29 }
30 
31 simdjson_inline raw_json_string field::key() const noexcept {
32  SIMDJSON_ASSUME(first.buf != nullptr); // We would like to call .alive() by Visual Studio won't let us.
33  return first;
34 }
35 
36 simdjson_inline value &field::value() & noexcept {
37  return second;
38 }
39 
40 simdjson_inline value field::value() && noexcept {
41  return std::forward<field>(*this).second;
42 }
43 
44 } // namespace ondemand
45 } // namespace SIMDJSON_IMPLEMENTATION
46 } // namespace simdjson
47 
48 namespace simdjson {
49 
50 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::field>::simdjson_result(
51  SIMDJSON_IMPLEMENTATION::ondemand::field &&value
52 ) noexcept :
53  implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::field>(
54  std::forward<SIMDJSON_IMPLEMENTATION::ondemand::field>(value)
55  )
56 {
57 }
58 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::field>::simdjson_result(
59  error_code error
60 ) noexcept :
61  implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::field>(error)
62 {
63 }
64 
65 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::field>::key() noexcept {
66  if (error()) { return error(); }
67  return first.key();
68 }
69 simdjson_inline simdjson_result<std::string_view> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::field>::unescaped_key(bool allow_replacement) noexcept {
70  if (error()) { return error(); }
71  return first.unescaped_key(allow_replacement);
72 }
73 simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::field>::value() noexcept {
74  if (error()) { return error(); }
75  return std::move(first.value());
76 }
77 
78 } // namespace simdjson
simdjson_inline raw_json_string key() const noexcept
Get the key as a raw_json_string.
Definition: field-inl.h:31
simdjson_inline simdjson_warn_unused simdjson_result< std::string_view > unescaped_key(bool allow_replacement) noexcept
Get the key as a string_view (for higher speed, consider raw_key).
Definition: field-inl.h:24
simdjson_inline field() noexcept
Create a new invalid field.
Definition: field-inl.h:6
simdjson_inline ondemand::value & value() &noexcept
Get the field value.
Definition: field-inl.h:36
A string escaped per JSON rules, terminated with quote (").
An ephemeral JSON value returned during iteration.
Definition: value.h:17
We want to support argument-dependent lookup (ADL).
error_code
All possible errors returned by simdjson.
Definition: error.h:17
The result of a simdjson operation that could fail.
Definition: error.h:205
simdjson_inline error_code error() const noexcept
The error.
Definition: error-inl.h:132
simdjson_inline T & value() &noexcept(false)
Get the result value.