diff --git a/src/generic/implementation_simdjson_result_base.h b/src/generic/implementation_simdjson_result_base.h index 7c2cf4a25..9365b02ac 100644 --- a/src/generic/implementation_simdjson_result_base.h +++ b/src/generic/implementation_simdjson_result_base.h @@ -47,6 +47,16 @@ struct implementation_simdjson_result_base { */ simdjson_really_inline implementation_simdjson_result_base(T &&value, error_code error) noexcept; + /** + * Move a result. + */ + simdjson_really_inline implementation_simdjson_result_base(implementation_simdjson_result_base &&value) noexcept = default; + + /** + * Copy a result. + */ + simdjson_really_inline implementation_simdjson_result_base(const implementation_simdjson_result_base &value) = default; + /** * Create a new empty result with error = UNINITIALIZED. */ diff --git a/src/generic/ondemand/array.h b/src/generic/ondemand/array.h index 22f0c37dd..59bb3090c 100644 --- a/src/generic/ondemand/array.h +++ b/src/generic/ondemand/array.h @@ -70,6 +70,9 @@ struct simdjson_result : public SIMDJS public: simdjson_really_inline simdjson_result(SIMDJSON_IMPLEMENTATION::ondemand::array &&value) noexcept; ///< @private simdjson_really_inline simdjson_result(error_code error) noexcept; ///< @private + + simdjson_really_inline simdjson_result() noexcept = default; + simdjson_really_inline simdjson_result(simdjson_result &&a) noexcept = default; simdjson_really_inline ~simdjson_result() noexcept = default; ///< @private simdjson_really_inline simdjson_result begin() & noexcept; diff --git a/src/generic/ondemand/array_iterator-inl.h b/src/generic/ondemand/array_iterator-inl.h index 579b9ccaf..1bdf2a691 100644 --- a/src/generic/ondemand/array_iterator-inl.h +++ b/src/generic/ondemand/array_iterator-inl.h @@ -27,11 +27,6 @@ simdjson_really_inline array_iterator &array_iterator::operator++() noexcept { namespace simdjson { -simdjson_really_inline simdjson_result::simdjson_result() noexcept - : implementation_simdjson_result_base({}, SUCCESS) -{ -} - simdjson_really_inline simdjson_result::simdjson_result( SIMDJSON_IMPLEMENTATION::ondemand::array_iterator &&value ) noexcept @@ -43,21 +38,6 @@ simdjson_really_inline simdjson_result::simdjson_result( - const simdjson_result &a -) noexcept - : implementation_simdjson_result_base(a) -{ -} - -simdjson_really_inline simdjson_result &simdjson_result::operator=( - const simdjson_result &a -) noexcept { - first = a.first; - second = a.second; - return *this; -} - simdjson_really_inline simdjson_result simdjson_result::operator*() noexcept { if (error()) { second = SUCCESS; return error(); } return *first; diff --git a/src/generic/ondemand/array_iterator.h b/src/generic/ondemand/array_iterator.h index 3153883b2..973679a48 100644 --- a/src/generic/ondemand/array_iterator.h +++ b/src/generic/ondemand/array_iterator.h @@ -56,11 +56,11 @@ namespace simdjson { template<> struct simdjson_result : public SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base { public: - simdjson_really_inline simdjson_result() noexcept; simdjson_really_inline simdjson_result(SIMDJSON_IMPLEMENTATION::ondemand::array_iterator &&value) noexcept; ///< @private simdjson_really_inline simdjson_result(error_code error) noexcept; ///< @private - simdjson_really_inline simdjson_result(const simdjson_result &a) noexcept; - simdjson_really_inline simdjson_result &operator=(const simdjson_result &a) noexcept; + + simdjson_really_inline simdjson_result() noexcept = default; + simdjson_really_inline simdjson_result(simdjson_result &&a) noexcept = default; simdjson_really_inline ~simdjson_result() noexcept = default; ///< @private // diff --git a/src/generic/ondemand/document.h b/src/generic/ondemand/document.h index 5faba4e7f..52043f81e 100644 --- a/src/generic/ondemand/document.h +++ b/src/generic/ondemand/document.h @@ -92,6 +92,9 @@ struct simdjson_result : public SIM public: simdjson_really_inline simdjson_result(SIMDJSON_IMPLEMENTATION::ondemand::document &&value) noexcept; ///< @private simdjson_really_inline simdjson_result(error_code error) noexcept; ///< @private + + simdjson_really_inline simdjson_result() noexcept = default; + simdjson_really_inline simdjson_result(simdjson_result &&a) noexcept = default; simdjson_really_inline ~simdjson_result() noexcept = default; ///< @private simdjson_really_inline simdjson_result get_array() & noexcept; diff --git a/src/generic/ondemand/field-inl.h b/src/generic/ondemand/field-inl.h index f5453f8c8..edf9e95b8 100644 --- a/src/generic/ondemand/field-inl.h +++ b/src/generic/ondemand/field-inl.h @@ -55,7 +55,8 @@ simdjson_really_inline simdjson_result simdjson_result::value() noexcept { - return { std::move(first.value()), error() }; + if (error()) { return error(); } + return std::move(first.value()); } } // namespace simdjson diff --git a/src/generic/ondemand/field.h b/src/generic/ondemand/field.h index 7c11687b0..cdf7da286 100644 --- a/src/generic/ondemand/field.h +++ b/src/generic/ondemand/field.h @@ -36,6 +36,9 @@ struct simdjson_result : public SIMDJS public: simdjson_really_inline simdjson_result(SIMDJSON_IMPLEMENTATION::ondemand::field &&value) noexcept; ///< @private simdjson_really_inline simdjson_result(error_code error) noexcept; ///< @private + + simdjson_really_inline simdjson_result() noexcept = default; + simdjson_really_inline simdjson_result(simdjson_result &&a) noexcept = default; simdjson_really_inline ~simdjson_result() noexcept = default; ///< @private simdjson_really_inline simdjson_result key() noexcept; diff --git a/src/generic/ondemand/json_iterator.h b/src/generic/ondemand/json_iterator.h index 165f9ce45..1c7088fb1 100644 --- a/src/generic/ondemand/json_iterator.h +++ b/src/generic/ondemand/json_iterator.h @@ -193,6 +193,9 @@ struct simdjson_result : publi public: simdjson_really_inline simdjson_result(SIMDJSON_IMPLEMENTATION::ondemand::json_iterator &&value) noexcept; ///< @private simdjson_really_inline simdjson_result(error_code error) noexcept; ///< @private + + simdjson_really_inline simdjson_result() noexcept = default; + simdjson_really_inline simdjson_result(simdjson_result &&a) noexcept = default; simdjson_really_inline ~simdjson_result() noexcept = default; ///< @private }; @@ -201,6 +204,9 @@ struct simdjson_result : p public: simdjson_really_inline simdjson_result(SIMDJSON_IMPLEMENTATION::ondemand::json_iterator_ref &&value) noexcept; ///< @private simdjson_really_inline simdjson_result(error_code error) noexcept; ///< @private + + simdjson_really_inline simdjson_result() noexcept = default; + simdjson_really_inline simdjson_result(simdjson_result &&a) noexcept = default; simdjson_really_inline ~simdjson_result() noexcept = default; ///< @private }; diff --git a/src/generic/ondemand/object.h b/src/generic/ondemand/object.h index 593154dcb..da5eae520 100644 --- a/src/generic/ondemand/object.h +++ b/src/generic/ondemand/object.h @@ -73,6 +73,9 @@ struct simdjson_result : public SIMDJ public: simdjson_really_inline simdjson_result(SIMDJSON_IMPLEMENTATION::ondemand::object &&value) noexcept; ///< @private simdjson_really_inline simdjson_result(error_code error) noexcept; ///< @private + + simdjson_really_inline simdjson_result() noexcept = default; + simdjson_really_inline simdjson_result(simdjson_result &&a) noexcept = default; simdjson_really_inline ~simdjson_result() noexcept = default; ///< @private simdjson_really_inline simdjson_result begin() noexcept; diff --git a/src/generic/ondemand/object_iterator-inl.h b/src/generic/ondemand/object_iterator-inl.h index 4f2d67c54..e6fb76a96 100644 --- a/src/generic/ondemand/object_iterator-inl.h +++ b/src/generic/ondemand/object_iterator-inl.h @@ -32,11 +32,6 @@ simdjson_really_inline object_iterator &object_iterator::operator++() noexcept { namespace simdjson { -simdjson_really_inline simdjson_result::simdjson_result() noexcept - : implementation_simdjson_result_base({}, SUCCESS) -{ -} - simdjson_really_inline simdjson_result::simdjson_result( SIMDJSON_IMPLEMENTATION::ondemand::object_iterator &&value ) noexcept @@ -48,21 +43,6 @@ simdjson_really_inline simdjson_result::simdjson_result( - const simdjson_result &o -) noexcept - : implementation_simdjson_result_base(o) -{ -} - -simdjson_really_inline simdjson_result &simdjson_result::operator=( - const simdjson_result &o -) noexcept { - first = o.first; - second = o.second; - return *this; -} - simdjson_really_inline simdjson_result simdjson_result::operator*() noexcept { if (error()) { second = SUCCESS; return error(); } return *first; diff --git a/src/generic/ondemand/object_iterator.h b/src/generic/ondemand/object_iterator.h index 07c4577ea..1c7c81971 100644 --- a/src/generic/ondemand/object_iterator.h +++ b/src/generic/ondemand/object_iterator.h @@ -50,11 +50,11 @@ namespace simdjson { template<> struct simdjson_result : public SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base { public: - simdjson_really_inline simdjson_result() noexcept; simdjson_really_inline simdjson_result(SIMDJSON_IMPLEMENTATION::ondemand::object_iterator &&value) noexcept; ///< @private simdjson_really_inline simdjson_result(error_code error) noexcept; ///< @private - simdjson_really_inline simdjson_result(const simdjson_result &a) noexcept; - simdjson_really_inline simdjson_result &operator=(const simdjson_result &a) noexcept; + + simdjson_really_inline simdjson_result() noexcept = default; + simdjson_really_inline simdjson_result(simdjson_result &&a) noexcept = default; simdjson_really_inline ~simdjson_result() noexcept = default; ///< @private // diff --git a/src/generic/ondemand/parser.h b/src/generic/ondemand/parser.h index 4bc548cb3..39f6f2e60 100644 --- a/src/generic/ondemand/parser.h +++ b/src/generic/ondemand/parser.h @@ -45,6 +45,9 @@ struct simdjson_result : public SIMDJ public: simdjson_really_inline simdjson_result(SIMDJSON_IMPLEMENTATION::ondemand::parser &&value) noexcept; ///< @private simdjson_really_inline simdjson_result(error_code error) noexcept; ///< @private + + simdjson_really_inline simdjson_result() noexcept = default; + simdjson_really_inline simdjson_result(simdjson_result &&a) noexcept = default; simdjson_really_inline ~simdjson_result() noexcept = default; ///< @private }; diff --git a/src/generic/ondemand/raw_json_string.h b/src/generic/ondemand/raw_json_string.h index eece50304..c628eca7d 100644 --- a/src/generic/ondemand/raw_json_string.h +++ b/src/generic/ondemand/raw_json_string.h @@ -42,6 +42,9 @@ struct simdjson_result : pub public: simdjson_really_inline simdjson_result(SIMDJSON_IMPLEMENTATION::ondemand::raw_json_string &&value) noexcept; ///< @private simdjson_really_inline simdjson_result(error_code error) noexcept; ///< @private + + simdjson_really_inline simdjson_result() noexcept = default; + simdjson_really_inline simdjson_result(const simdjson_result &a) noexcept = default; simdjson_really_inline ~simdjson_result() noexcept = default; ///< @private }; diff --git a/src/generic/ondemand/token_iterator.h b/src/generic/ondemand/token_iterator.h index 7c8c9099b..82c25fa8f 100644 --- a/src/generic/ondemand/token_iterator.h +++ b/src/generic/ondemand/token_iterator.h @@ -83,6 +83,9 @@ struct simdjson_result : publ public: simdjson_really_inline simdjson_result(SIMDJSON_IMPLEMENTATION::ondemand::token_iterator &&value) noexcept; ///< @private simdjson_really_inline simdjson_result(error_code error) noexcept; ///< @private + + simdjson_really_inline simdjson_result() noexcept = default; + simdjson_really_inline simdjson_result(simdjson_result &&a) noexcept = default; simdjson_really_inline ~simdjson_result() noexcept = default; ///< @private }; diff --git a/src/generic/ondemand/value-inl.h b/src/generic/ondemand/value-inl.h index e9ed1506e..ca0e5154d 100644 --- a/src/generic/ondemand/value-inl.h +++ b/src/generic/ondemand/value-inl.h @@ -179,16 +179,6 @@ simdjson_really_inline simdjson_result ) { } -simdjson_really_inline simdjson_result::simdjson_result( - SIMDJSON_IMPLEMENTATION::ondemand::value &&value, - error_code error -) noexcept : - implementation_simdjson_result_base( - std::forward(value), - error - ) -{ -} simdjson_really_inline simdjson_result::simdjson_result( error_code error ) noexcept : diff --git a/src/generic/ondemand/value.h b/src/generic/ondemand/value.h index 3b7e56804..409f13f5c 100644 --- a/src/generic/ondemand/value.h +++ b/src/generic/ondemand/value.h @@ -97,8 +97,10 @@ template<> struct simdjson_result : public SIMDJSON_IMPLEMENTATION::implementation_simdjson_result_base { public: simdjson_really_inline simdjson_result(SIMDJSON_IMPLEMENTATION::ondemand::value &&value) noexcept; ///< @private - simdjson_really_inline simdjson_result(SIMDJSON_IMPLEMENTATION::ondemand::value &&value, error_code error) noexcept; ///< @private simdjson_really_inline simdjson_result(error_code error) noexcept; ///< @private + + simdjson_really_inline simdjson_result() noexcept = default; + simdjson_really_inline simdjson_result(simdjson_result &&a) noexcept = default; simdjson_really_inline ~simdjson_result() noexcept = default; ///< @private simdjson_really_inline simdjson_result get_array() && noexcept;