1namespace simdjson {
2namespace SIMDJSON_IMPLEMENTATION {
3namespace ondemand {
4
5// clang 6 doesn't think the default constructor can be noexcept, so we make it explicit
6simdjson_inline field::field() noexcept : std::pair<raw_json_string, ondemand::value>() {}
7
8simdjson_inline field::field(raw_json_string key, ondemand::value &&value) noexcept
9 : std::pair<raw_json_string, ondemand::value>(key, std::forward<ondemand::value>(t&: value))
10{
11}
12
13simdjson_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
20simdjson_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
24simdjson_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(iter&: second.iter.json_iter(), allow_replacement);
27 first.consume();
28 return answer;
29}
30
31simdjson_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
36simdjson_inline value &field::value() & noexcept {
37 return second;
38}
39
40simdjson_inline value field::value() && noexcept {
41 return std::forward<field>(t&: *this).second;
42}
43
44} // namespace ondemand
45} // namespace SIMDJSON_IMPLEMENTATION
46} // namespace simdjson
47
48namespace simdjson {
49
50simdjson_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>(t&: value)
55 )
56{
57}
58simdjson_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
65simdjson_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}
69simdjson_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}
73simdjson_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
79