From 5873f123f37088b02e56488ba84e0a6492c58bd2 Mon Sep 17 00:00:00 2001 From: neargye Date: Mon, 14 Oct 2019 13:54:17 +0500 Subject: [PATCH] clean-up --- include/magic_enum.hpp | 38 ++++++++++++++++---------------------- 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/include/magic_enum.hpp b/include/magic_enum.hpp index fc1e079..c003f8d 100644 --- a/include/magic_enum.hpp +++ b/include/magic_enum.hpp @@ -141,7 +141,7 @@ constexpr std::string_view pretty_name(std::string_view name) noexcept { return {}; // Invalid name. } -template +template constexpr bool mixed_sign_less(L lhs, R rhs) noexcept { static_assert(std::is_integral_v && std::is_integral_v, "magic_enum::detail::mixed_sign_less requires integral type."); @@ -157,14 +157,14 @@ constexpr bool mixed_sign_less(L lhs, R rhs) noexcept { } } -template +template constexpr int mixed_sign_min_as_int(L lhs, R rhs) noexcept { static_assert(std::is_integral_v && std::is_integral_v, "magic_enum::detail::mixed_sign_min_as_int requires integral type."); return mixed_sign_less(lhs, rhs) ? static_cast(lhs) : static_cast(rhs); } -template +template constexpr int mixed_sign_max_as_int(L lhs, R rhs) noexcept { static_assert(std::is_integral_v && std::is_integral_v, "magic_enum::detail::mixed_sign_max_as_int requires integral type."); @@ -246,7 +246,7 @@ constexpr auto values(std::integer_sequence) noexcept { return values; } -template +template inline constexpr auto values_v = values(std::make_integer_sequence()>{}); template @@ -269,16 +269,10 @@ constexpr std::size_t range_size() noexcept { } template -inline constexpr std::size_t size_v = range_size(); +inline constexpr std::size_t range_size_v = range_size(); template -inline constexpr auto range_v = std::make_integer_sequence>{}; - -template -inline constexpr auto sequence_v = std::make_index_sequence>{}; - -template -using index_t = std::conditional_t < (std::numeric_limits::max)(), std::uint8_t, std::uint16_t>; +using index_t = std::conditional_t < (std::numeric_limits::max)(), std::uint8_t, std::uint16_t>; template inline constexpr auto invalid_index_v = (std::numeric_limits>::max)(); @@ -288,21 +282,21 @@ constexpr auto indexes(std::integer_sequence) noexcept { static_assert(is_enum_v, "magic_enum::detail::indexes requires enum type."); index_t i = 0; - return std::array, size_v>{{((n(I + min_v)>().size() != 0) ? i++ : invalid_index_v)...}}; + return std::array, sizeof...(I)>{{((n(I + min_v)>().size() != 0) ? i++ : invalid_index_v)...}}; } template constexpr auto names(std::index_sequence) noexcept { static_assert(is_enum_v, "magic_enum::detail::names requires enum type."); - return std::array>{{name_v[I]>...}}; + return std::array{{name_v[I]>...}}; } template constexpr auto entries(std::index_sequence) noexcept { static_assert(is_enum_v, "magic_enum::detail::entries requires enum type."); - return std::array, count_v>{{{values_v[I], name_v[I]>}...}}; + return std::array, sizeof...(I)>{{{values_v[I], name_v[I]>}...}}; } template @@ -341,8 +335,8 @@ struct enum_traits>> { inline static constexpr std::size_t count = detail::count_v; inline static constexpr std::array values = detail::values_v; - inline static constexpr std::array names = detail::names(sequence_v); - inline static constexpr std::array, count> entries = detail::entries(sequence_v); + inline static constexpr std::array names = detail::names(std::make_index_sequence>{}); + inline static constexpr std::array, count> entries = detail::entries(std::make_index_sequence>{}); [[nodiscard]] static constexpr bool reflected(E value) noexcept { return static_cast(value) >= static_cast(reflected_min_v) && static_cast(value) <= static_cast(reflected_max_v); @@ -350,7 +344,7 @@ struct enum_traits>> { [[nodiscard]] static constexpr int index(E value) noexcept { if (static_cast(value) >= static_cast(min_v) && static_cast(value) <= static_cast(max_v)) { - if constexpr (size_v != count_v) { + if constexpr (range_size_v != count_v) { if (auto i = indexes[static_cast(value) - min_v]; i != invalid_index_v) { return i; } @@ -363,7 +357,7 @@ struct enum_traits>> { } [[nodiscard]] static constexpr E value(std::size_t index) noexcept { - if constexpr (size_v != count_v) { + if constexpr (range_size_v != count_v) { return assert(index < count), values[index]; } else { return assert(index < count), static_cast(static_cast(index) + min_v); @@ -385,7 +379,7 @@ struct enum_traits>> { static_assert(enum_range::max > enum_range::min, "magic_enum::enum_range requires max > min."); static_assert(count > 0, "magic_enum::enum_range requires enum implementation or valid max and min."); using U = underlying_type; - inline static constexpr auto indexes = detail::indexes(range_v); + inline static constexpr auto indexes = detail::indexes(std::make_integer_sequence>{}); }; } // namespace magic_enum::detail @@ -427,7 +421,7 @@ template [[nodiscard]] constexpr auto enum_cast(std::string_view value) noexcept -> detail::enable_if_enum_t>> { using D = std::decay_t; - if constexpr (detail::size_v > detail::count_v * 2) { + if constexpr (detail::range_size_v > detail::count_v * 2) { for (std::size_t i = 0; i < enum_traits::count; ++i) { if (value == enum_traits::names[i]) { return enum_traits::values[i]; @@ -476,7 +470,7 @@ template // Returns enum value at specified index. // No bounds checking is performed: the behavior is undefined if index >= number of enum values. -template +template [[nodiscard]] constexpr auto enum_value(std::size_t index) noexcept -> detail::enable_if_enum_t> { return enum_traits::value(index); }