From 17b1edee18c69c58132c2cf7f0416135baca9b2a Mon Sep 17 00:00:00 2001 From: BlackMATov Date: Fri, 17 Feb 2023 00:17:44 +0700 Subject: [PATCH] goodbye system_error, rename meta exception --- develop/singles/headers/meta.hpp/meta_all.hpp | 128 +++++++----------- headers/meta.hpp/meta_base.hpp | 5 +- headers/meta.hpp/meta_base/base.hpp | 20 +-- headers/meta.hpp/meta_base/exceptions.hpp | 105 +++++--------- .../meta_detail/value_utilities/uarg.hpp | 4 +- .../meta_detail/value_utilities/uinst.hpp | 2 +- headers/meta.hpp/meta_uvalue/uvalue.hpp | 8 +- 7 files changed, 102 insertions(+), 170 deletions(-) diff --git a/develop/singles/headers/meta.hpp/meta_all.hpp b/develop/singles/headers/meta.hpp/meta_all.hpp index 17044fc..adcc5c6 100644 --- a/develop/singles/headers/meta.hpp/meta_all.hpp +++ b/develop/singles/headers/meta.hpp/meta_all.hpp @@ -27,11 +27,11 @@ #include #include #include -#include #include #include #include #include +#include #if !defined(META_HPP_NO_EXCEPTIONS) && !defined(__cpp_exceptions) # define META_HPP_NO_EXCEPTIONS @@ -42,7 +42,7 @@ #endif #if !defined(META_HPP_NO_EXCEPTIONS) -# include +# include #endif #if !defined(META_HPP_NO_RTTI) @@ -311,12 +311,12 @@ namespace meta_hpp::detail #else # define META_HPP_TRY if ( true ) # define META_HPP_CATCH(...) if ( false ) -# define META_HPP_RETHROW() std::abort() +# define META_HPP_RETHROW() (void)0 #endif namespace meta_hpp::detail { - enum class generic_error { + enum class error_code { no_error, bad_uvalue_access, @@ -331,90 +331,55 @@ namespace meta_hpp::detail argument_types_mismatch, }; - class generic_error_category final : public std::error_category { - public: - ~generic_error_category() override = default; - - generic_error_category(generic_error_category&&) = delete; - generic_error_category(const generic_error_category&) = delete; - - generic_error_category& operator=(generic_error_category&&) = delete; - generic_error_category& operator=(const generic_error_category&) = delete; - - [[nodiscard]] const char* name() const noexcept override { - return "generic"; + inline const char* get_error_code_message(error_code error) noexcept { + switch ( error ) { + case error_code::no_error: + return "no error"; + case error_code::bad_uvalue_access: + return "bad uvalue access"; + case error_code::bad_uresult_access: + return "bad uresult access"; + case error_code::bad_uvalue_cast: + return "bad uvalue cast"; + case error_code::bad_argument_cast: + return "bad argument cast"; + case error_code::bad_instance_cast: + return "bad instance cast"; + case error_code::arity_mismatch: + return "arity mismatch"; + case error_code::instance_type_mismatch: + return "instance type mismatch"; + case error_code::argument_types_mismatch: + return "argument types mismatch"; } - [[nodiscard]] std::string message(int ev) const override { - switch ( static_cast(ev) ) { - case generic_error::no_error: - return "no error"; - case generic_error::bad_uvalue_access: - return "bad uvalue access"; - case generic_error::bad_uresult_access: - return "bad uresult access"; - case generic_error::bad_uvalue_cast: - return "bad uvalue cast"; - case generic_error::bad_argument_cast: - return "bad argument cast"; - case generic_error::bad_instance_cast: - return "bad instance cast"; - case generic_error::arity_mismatch: - return "arity mismatch"; - case generic_error::instance_type_mismatch: - return "instance type mismatch"; - case generic_error::argument_types_mismatch: - return "argument types mismatch"; - } - return "unexpected error code"; - } - - static const std::error_category& instance() noexcept { - static const generic_error_category instance; - return instance; - } - - private: - generic_error_category() = default; - }; -} - -namespace std -{ - template <> - struct is_error_code_enum : true_type {}; -} - -namespace meta_hpp::detail -{ - inline std::error_code make_error_code(generic_error err) noexcept { - static_assert(std::is_same_v>); - return std::error_code{static_cast(err), generic_error_category::instance()}; + META_HPP_ASSERT(false); + return "unexpected error code"; } } namespace meta_hpp::detail { - class generic_exception final : public std::logic_error { + class exception final : public std::exception { public: - explicit generic_exception(generic_error err) - : generic_exception{make_error_code(err)} {} + explicit exception(error_code error) + : error_{error} {} - explicit generic_exception(std::error_code ec) - : std::logic_error(ec.message()) - , error_code_{ec} {} + [[nodiscard]] error_code get_error() const noexcept { + return error_; + } - [[nodiscard]] const std::error_code& get_code() const noexcept { - return error_code_; + [[nodiscard]] const char* what() const noexcept override { + return get_error_code_message(error_); } private: - std::error_code error_code_{}; + error_code error_{}; }; - [[noreturn]] inline void throw_generic_exception(generic_error err) { + [[noreturn]] inline void throw_exception(error_code err) { #if !defined(META_HPP_NO_EXCEPTIONS) - throw generic_exception{err}; + throw exception{err}; #else (void)err; std::abort(); @@ -1447,8 +1412,9 @@ namespace meta_hpp::detail namespace meta_hpp { - using detail::generic_error; - using detail::generic_exception; + using detail::error_code; + using detail::exception; + using detail::get_error_code_message; using detail::hashed_string; using detail::memory_buffer; @@ -5674,7 +5640,7 @@ namespace meta_hpp::detail } } - throw_generic_exception(generic_error::bad_argument_cast); + throw_exception(error_code::bad_argument_cast); } template < typename To > @@ -5730,7 +5696,7 @@ namespace meta_hpp::detail } } - throw_generic_exception(generic_error::bad_argument_cast); + throw_exception(error_code::bad_argument_cast); } } @@ -6184,7 +6150,7 @@ namespace meta_hpp::detail } } - throw_generic_exception(generic_error::bad_instance_cast); + throw_exception(error_code::bad_instance_cast); } } @@ -8790,7 +8756,7 @@ namespace meta_hpp } } - throw_generic_exception(generic_error::bad_uvalue_cast); + throw_exception(error_code::bad_uvalue_cast); } template < typename T > @@ -8807,7 +8773,7 @@ namespace meta_hpp } } - throw_generic_exception(generic_error::bad_uvalue_cast); + throw_exception(error_code::bad_uvalue_cast); } template < typename T > @@ -8824,7 +8790,7 @@ namespace meta_hpp } } - throw_generic_exception(generic_error::bad_uvalue_cast); + throw_exception(error_code::bad_uvalue_cast); } template < typename T > @@ -8841,7 +8807,7 @@ namespace meta_hpp } } - throw_generic_exception(generic_error::bad_uvalue_cast); + throw_exception(error_code::bad_uvalue_cast); } template < typename T > diff --git a/headers/meta.hpp/meta_base.hpp b/headers/meta.hpp/meta_base.hpp index 92b3022..90e9b6c 100644 --- a/headers/meta.hpp/meta_base.hpp +++ b/headers/meta.hpp/meta_base.hpp @@ -30,8 +30,9 @@ namespace meta_hpp { - using detail::generic_error; - using detail::generic_exception; + using detail::error_code; + using detail::exception; + using detail::get_error_code_message; using detail::hashed_string; using detail::memory_buffer; diff --git a/headers/meta.hpp/meta_base/base.hpp b/headers/meta.hpp/meta_base/base.hpp index 62bd1cc..134450e 100644 --- a/headers/meta.hpp/meta_base/base.hpp +++ b/headers/meta.hpp/meta_base/base.hpp @@ -6,14 +6,6 @@ #pragma once -#if !defined(META_HPP_NO_EXCEPTIONS) && !defined(__cpp_exceptions) -# define META_HPP_NO_EXCEPTIONS -#endif - -#if !defined(META_HPP_NO_RTTI) && !defined(__cpp_rtti) -# define META_HPP_NO_RTTI -#endif - #include #include #include @@ -36,14 +28,22 @@ #include #include #include -#include #include #include #include #include +#include + +#if !defined(META_HPP_NO_EXCEPTIONS) && !defined(__cpp_exceptions) +# define META_HPP_NO_EXCEPTIONS +#endif + +#if !defined(META_HPP_NO_RTTI) && !defined(__cpp_rtti) +# define META_HPP_NO_RTTI +#endif #if !defined(META_HPP_NO_EXCEPTIONS) -# include +# include #endif #if !defined(META_HPP_NO_RTTI) diff --git a/headers/meta.hpp/meta_base/exceptions.hpp b/headers/meta.hpp/meta_base/exceptions.hpp index dbbddf8..04f9458 100644 --- a/headers/meta.hpp/meta_base/exceptions.hpp +++ b/headers/meta.hpp/meta_base/exceptions.hpp @@ -15,12 +15,12 @@ #else # define META_HPP_TRY if ( true ) # define META_HPP_CATCH(...) if ( false ) -# define META_HPP_RETHROW() std::abort() +# define META_HPP_RETHROW() (void)0 #endif namespace meta_hpp::detail { - enum class generic_error { + enum class error_code { no_error, bad_uvalue_access, @@ -35,90 +35,55 @@ namespace meta_hpp::detail argument_types_mismatch, }; - class generic_error_category final : public std::error_category { - public: - ~generic_error_category() override = default; - - generic_error_category(generic_error_category&&) = delete; - generic_error_category(const generic_error_category&) = delete; - - generic_error_category& operator=(generic_error_category&&) = delete; - generic_error_category& operator=(const generic_error_category&) = delete; - - [[nodiscard]] const char* name() const noexcept override { - return "generic"; + inline const char* get_error_code_message(error_code error) noexcept { + switch ( error ) { + case error_code::no_error: + return "no error"; + case error_code::bad_uvalue_access: + return "bad uvalue access"; + case error_code::bad_uresult_access: + return "bad uresult access"; + case error_code::bad_uvalue_cast: + return "bad uvalue cast"; + case error_code::bad_argument_cast: + return "bad argument cast"; + case error_code::bad_instance_cast: + return "bad instance cast"; + case error_code::arity_mismatch: + return "arity mismatch"; + case error_code::instance_type_mismatch: + return "instance type mismatch"; + case error_code::argument_types_mismatch: + return "argument types mismatch"; } - [[nodiscard]] std::string message(int ev) const override { - switch ( static_cast(ev) ) { - case generic_error::no_error: - return "no error"; - case generic_error::bad_uvalue_access: - return "bad uvalue access"; - case generic_error::bad_uresult_access: - return "bad uresult access"; - case generic_error::bad_uvalue_cast: - return "bad uvalue cast"; - case generic_error::bad_argument_cast: - return "bad argument cast"; - case generic_error::bad_instance_cast: - return "bad instance cast"; - case generic_error::arity_mismatch: - return "arity mismatch"; - case generic_error::instance_type_mismatch: - return "instance type mismatch"; - case generic_error::argument_types_mismatch: - return "argument types mismatch"; - } - return "unexpected error code"; - } - - static const std::error_category& instance() noexcept { - static const generic_error_category instance; - return instance; - } - - private: - generic_error_category() = default; - }; -} - -namespace std -{ - template <> - struct is_error_code_enum : true_type {}; -} - -namespace meta_hpp::detail -{ - inline std::error_code make_error_code(generic_error err) noexcept { - static_assert(std::is_same_v>); - return std::error_code{static_cast(err), generic_error_category::instance()}; + META_HPP_ASSERT(false); + return "unexpected error code"; } } namespace meta_hpp::detail { - class generic_exception final : public std::logic_error { + class exception final : public std::exception { public: - explicit generic_exception(generic_error err) - : generic_exception{make_error_code(err)} {} + explicit exception(error_code error) + : error_{error} {} - explicit generic_exception(std::error_code ec) - : std::logic_error(ec.message()) - , error_code_{ec} {} + [[nodiscard]] error_code get_error() const noexcept { + return error_; + } - [[nodiscard]] const std::error_code& get_code() const noexcept { - return error_code_; + [[nodiscard]] const char* what() const noexcept override { + return get_error_code_message(error_); } private: - std::error_code error_code_{}; + error_code error_{}; }; - [[noreturn]] inline void throw_generic_exception(generic_error err) { + [[noreturn]] inline void throw_exception(error_code err) { #if !defined(META_HPP_NO_EXCEPTIONS) - throw generic_exception{err}; + throw exception{err}; #else (void)err; std::abort(); diff --git a/headers/meta.hpp/meta_detail/value_utilities/uarg.hpp b/headers/meta.hpp/meta_detail/value_utilities/uarg.hpp index 76e7233..9f7cafd 100644 --- a/headers/meta.hpp/meta_detail/value_utilities/uarg.hpp +++ b/headers/meta.hpp/meta_detail/value_utilities/uarg.hpp @@ -313,7 +313,7 @@ namespace meta_hpp::detail } } - throw_generic_exception(generic_error::bad_argument_cast); + throw_exception(error_code::bad_argument_cast); } template < typename To > @@ -369,7 +369,7 @@ namespace meta_hpp::detail } } - throw_generic_exception(generic_error::bad_argument_cast); + throw_exception(error_code::bad_argument_cast); } } diff --git a/headers/meta.hpp/meta_detail/value_utilities/uinst.hpp b/headers/meta.hpp/meta_detail/value_utilities/uinst.hpp index 4f40b9b..4f818d2 100644 --- a/headers/meta.hpp/meta_detail/value_utilities/uinst.hpp +++ b/headers/meta.hpp/meta_detail/value_utilities/uinst.hpp @@ -231,6 +231,6 @@ namespace meta_hpp::detail } } - throw_generic_exception(generic_error::bad_instance_cast); + throw_exception(error_code::bad_instance_cast); } } diff --git a/headers/meta.hpp/meta_uvalue/uvalue.hpp b/headers/meta.hpp/meta_uvalue/uvalue.hpp index ddb2925..039a50a 100644 --- a/headers/meta.hpp/meta_uvalue/uvalue.hpp +++ b/headers/meta.hpp/meta_uvalue/uvalue.hpp @@ -452,7 +452,7 @@ namespace meta_hpp } } - throw_generic_exception(generic_error::bad_uvalue_cast); + throw_exception(error_code::bad_uvalue_cast); } template < typename T > @@ -469,7 +469,7 @@ namespace meta_hpp } } - throw_generic_exception(generic_error::bad_uvalue_cast); + throw_exception(error_code::bad_uvalue_cast); } template < typename T > @@ -486,7 +486,7 @@ namespace meta_hpp } } - throw_generic_exception(generic_error::bad_uvalue_cast); + throw_exception(error_code::bad_uvalue_cast); } template < typename T > @@ -503,7 +503,7 @@ namespace meta_hpp } } - throw_generic_exception(generic_error::bad_uvalue_cast); + throw_exception(error_code::bad_uvalue_cast); } template < typename T >