#ifndef SIMDJSON_GENERIC_IMPLEMENTATION_SIMDJSON_RESULT_BASE_INL_H #ifndef SIMDJSON_CONDITIONAL_INCLUDE #define SIMDJSON_GENERIC_IMPLEMENTATION_SIMDJSON_RESULT_BASE_INL_H #include "simdjson/generic/base.h" #include "simdjson/generic/implementation_simdjson_result_base.h" #endif // SIMDJSON_CONDITIONAL_INCLUDE namespace simdjson { namespace SIMDJSON_IMPLEMENTATION { // // internal::implementation_simdjson_result_base inline implementation // template simdjson_inline void implementation_simdjson_result_base::tie(T &value, error_code &error) && noexcept { error = this->second; if (!error) { value = std::forward>(*this).first; } } template simdjson_warn_unused simdjson_inline error_code implementation_simdjson_result_base::get(T &value) && noexcept { error_code error; std::forward>(*this).tie(value, error); return error; } template simdjson_warn_unused simdjson_inline error_code implementation_simdjson_result_base::error() const noexcept { return this->second; } template simdjson_warn_unused simdjson_inline bool implementation_simdjson_result_base::has_value() const noexcept { return this->error() == SUCCESS; } #if SIMDJSON_EXCEPTIONS template simdjson_inline T& implementation_simdjson_result_base::operator*() & noexcept(false) { return this->value(); } template simdjson_inline T&& implementation_simdjson_result_base::operator*() && noexcept(false) { return std::forward>(*this).value(); } template simdjson_inline T* implementation_simdjson_result_base::operator->() noexcept(false) { if (this->error()) { throw simdjson_error(this->error()); } return &this->first; } template simdjson_inline const T* implementation_simdjson_result_base::operator->() const noexcept(false) { if (this->error()) { throw simdjson_error(this->error()); } return &this->first; } template simdjson_inline T& implementation_simdjson_result_base::value() & noexcept(false) { if (error()) { throw simdjson_error(error()); } return this->first; } template simdjson_inline T&& implementation_simdjson_result_base::value() && noexcept(false) { return std::forward>(*this).take_value(); } template simdjson_inline T&& implementation_simdjson_result_base::take_value() && noexcept(false) { if (error()) { throw simdjson_error(error()); } return std::forward(this->first); } template simdjson_inline implementation_simdjson_result_base::operator T&&() && noexcept(false) { return std::forward>(*this).take_value(); } #endif // SIMDJSON_EXCEPTIONS template simdjson_inline const T& implementation_simdjson_result_base::value_unsafe() const& noexcept { return this->first; } template simdjson_inline T& implementation_simdjson_result_base::value_unsafe() & noexcept { return this->first; } template simdjson_inline T&& implementation_simdjson_result_base::value_unsafe() && noexcept { return std::forward(this->first); } template simdjson_inline implementation_simdjson_result_base::implementation_simdjson_result_base(T &&value, error_code error) noexcept : first{std::forward(value)}, second{error} {} template simdjson_inline implementation_simdjson_result_base::implementation_simdjson_result_base(error_code error) noexcept : implementation_simdjson_result_base(T{}, error) {} template simdjson_inline implementation_simdjson_result_base::implementation_simdjson_result_base(T &&value) noexcept : implementation_simdjson_result_base(std::forward(value), SUCCESS) {} } // namespace SIMDJSON_IMPLEMENTATION } // namespace simdjson #endif // SIMDJSON_GENERIC_IMPLEMENTATION_SIMDJSON_RESULT_BASE_INL_H