109 lines
5.1 KiB
C++
109 lines
5.1 KiB
C++
namespace simdjson {
|
|
namespace SIMDJSON_IMPLEMENTATION {
|
|
namespace ondemand {
|
|
|
|
simdjson_really_inline simdjson_result<value> object::find_field_unordered(const std::string_view key) & noexcept {
|
|
bool has_value;
|
|
SIMDJSON_TRY( iter.find_field_unordered_raw(key).get(has_value) );
|
|
if (!has_value) { return NO_SUCH_FIELD; }
|
|
return value(iter.child());
|
|
}
|
|
simdjson_really_inline simdjson_result<value> object::find_field_unordered(const std::string_view key) && noexcept {
|
|
bool has_value;
|
|
SIMDJSON_TRY( iter.find_field_unordered_raw(key).get(has_value) );
|
|
if (!has_value) { return NO_SUCH_FIELD; }
|
|
return value(iter.child());
|
|
}
|
|
simdjson_really_inline simdjson_result<value> object::operator[](const std::string_view key) & noexcept {
|
|
return find_field_unordered(key);
|
|
}
|
|
simdjson_really_inline simdjson_result<value> object::operator[](const std::string_view key) && noexcept {
|
|
return std::forward<object>(*this).find_field_unordered(key);
|
|
}
|
|
simdjson_really_inline simdjson_result<value> object::find_field(const std::string_view key) & noexcept {
|
|
bool has_value;
|
|
SIMDJSON_TRY( iter.find_field_raw(key).get(has_value) );
|
|
if (!has_value) { return NO_SUCH_FIELD; }
|
|
return value(iter.child());
|
|
}
|
|
simdjson_really_inline simdjson_result<value> object::find_field(const std::string_view key) && noexcept {
|
|
bool has_value;
|
|
SIMDJSON_TRY( iter.find_field_raw(key).get(has_value) );
|
|
if (!has_value) { return NO_SUCH_FIELD; }
|
|
return value(iter.child());
|
|
}
|
|
|
|
simdjson_really_inline simdjson_result<object> object::start(value_iterator &iter) noexcept {
|
|
simdjson_unused bool has_value;
|
|
SIMDJSON_TRY( iter.start_object().get(has_value) );
|
|
return object(iter);
|
|
}
|
|
simdjson_really_inline object object::started(value_iterator &iter) noexcept {
|
|
simdjson_unused bool has_value = iter.started_object();
|
|
return iter;
|
|
}
|
|
simdjson_really_inline object object::resume(const value_iterator &iter) noexcept {
|
|
return iter;
|
|
}
|
|
|
|
simdjson_really_inline object::object(const value_iterator &_iter) noexcept
|
|
: iter{_iter}
|
|
{
|
|
}
|
|
|
|
simdjson_really_inline simdjson_result<object_iterator> object::begin() noexcept {
|
|
#ifndef SIMDJSON_PRODUCTION
|
|
if (!iter.is_at_container_start()) { return OUT_OF_ORDER_ITERATION; }
|
|
#endif
|
|
return object_iterator(iter);
|
|
}
|
|
simdjson_really_inline simdjson_result<object_iterator> object::end() noexcept {
|
|
return object_iterator();
|
|
}
|
|
|
|
} // namespace ondemand
|
|
} // namespace SIMDJSON_IMPLEMENTATION
|
|
} // namespace simdjson
|
|
|
|
namespace simdjson {
|
|
|
|
simdjson_really_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object>::simdjson_result(SIMDJSON_IMPLEMENTATION::ondemand::object &&value) noexcept
|
|
: implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::object>(std::forward<SIMDJSON_IMPLEMENTATION::ondemand::object>(value)) {}
|
|
simdjson_really_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object>::simdjson_result(error_code error) noexcept
|
|
: implementation_simdjson_result_base<SIMDJSON_IMPLEMENTATION::ondemand::object>(error) {}
|
|
|
|
simdjson_really_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object_iterator> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object>::begin() noexcept {
|
|
if (error()) { return error(); }
|
|
return first.begin();
|
|
}
|
|
simdjson_really_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object_iterator> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object>::end() noexcept {
|
|
if (error()) { return error(); }
|
|
return first.end();
|
|
}
|
|
simdjson_really_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object>::find_field_unordered(std::string_view key) & noexcept {
|
|
if (error()) { return error(); }
|
|
return first.find_field_unordered(key);
|
|
}
|
|
simdjson_really_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object>::find_field_unordered(std::string_view key) && noexcept {
|
|
if (error()) { return error(); }
|
|
return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::object>(first).find_field_unordered(key);
|
|
}
|
|
simdjson_really_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object>::operator[](std::string_view key) & noexcept {
|
|
if (error()) { return error(); }
|
|
return first[key];
|
|
}
|
|
simdjson_really_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object>::operator[](std::string_view key) && noexcept {
|
|
if (error()) { return error(); }
|
|
return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::object>(first)[key];
|
|
}
|
|
simdjson_really_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object>::find_field(std::string_view key) & noexcept {
|
|
if (error()) { return error(); }
|
|
return first.find_field(key);
|
|
}
|
|
simdjson_really_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::value> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::object>::find_field(std::string_view key) && noexcept {
|
|
if (error()) { return error(); }
|
|
return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::object>(first).find_field(key);
|
|
}
|
|
|
|
} // namespace simdjson
|