From 4a99f08fe2b5a44fafc5b753c90094e296f8e815 Mon Sep 17 00:00:00 2001 From: Alexander Karatarakis Date: Thu, 12 Sep 2024 17:59:18 -0700 Subject: [PATCH] [SkeletalRichEnum] Implement values() so extenders don't have to --- include/fixed_containers/enum_utils.hpp | 9 ++++++--- test/enums_test_common.hpp | 27 ------------------------- 2 files changed, 6 insertions(+), 30 deletions(-) diff --git a/include/fixed_containers/enum_utils.hpp b/include/fixed_containers/enum_utils.hpp index 03e50571..03771964 100644 --- a/include/fixed_containers/enum_utils.hpp +++ b/include/fixed_containers/enum_utils.hpp @@ -474,9 +474,7 @@ class SkeletalRichEnumValues return wrap_array_impl(input, std::make_index_sequence()); } - friend RichEnumType; - - using BackingEnum = typename RichEnumType::BackingEnum; +public: static constexpr auto VALUES = wrap_array(magic_enum::enum_values()); }; @@ -594,6 +592,11 @@ class SkeletalRichEnum public: static constexpr std::size_t count() { return magic_enum::enum_count(); } + static constexpr const std::array& values() + { + return SkeletalRichEnumValues::VALUES; + } + private: static constexpr std::string_view INVALID_TO_STRING = "INVALID"; diff --git a/test/enums_test_common.hpp b/test/enums_test_common.hpp index 5fa72d3f..a9294539 100644 --- a/test/enums_test_common.hpp +++ b/test/enums_test_common.hpp @@ -30,8 +30,6 @@ class Color : public fixed_containers::rich_enums::SkeletalRichEnum& values(); - static constexpr const Color& RED() // NOLINT(readability-identifier-naming) { return ::fixed_containers::rich_enums_detail::value_of(BackingEnum::RED).value(); @@ -49,10 +47,6 @@ class Color : public fixed_containers::rich_enums::SkeletalRichEnum& Color::values() -{ - return ::fixed_containers::rich_enums::SkeletalRichEnumValues::VALUES; -} // USAGE static_assert(fixed_containers::rich_enums::is_rich_enum); // Type-trait `concept` @@ -112,8 +106,6 @@ class TestRichEnum1 : public SkeletalRichEnum& values(); - FIXED_CONTAINERS_RICH_ENUM_CONSTANT_GEN_HELPER(TestRichEnum1, C_ONE) FIXED_CONTAINERS_RICH_ENUM_CONSTANT_GEN_HELPER(TestRichEnum1, C_TWO) FIXED_CONTAINERS_RICH_ENUM_CONSTANT_GEN_HELPER(TestRichEnum1, C_THREE) @@ -131,11 +123,6 @@ class TestRichEnum1 : public SkeletalRichEnum& TestRichEnum1::values() -{ - return SkeletalRichEnumValues::VALUES; -} - // Example with infused data namespace detail { @@ -179,8 +166,6 @@ class TestRichEnum2 using NonDefaultConstructibleSkeletalRichEnum::NonDefaultConstructibleSkeletalRichEnum; public: - static constexpr const std::array& values(); - FIXED_CONTAINERS_RICH_ENUM_CONSTANT_GEN_HELPER(TestRichEnum2, C_ONE) FIXED_CONTAINERS_RICH_ENUM_CONSTANT_GEN_HELPER(TestRichEnum2, C_TWO) FIXED_CONTAINERS_RICH_ENUM_CONSTANT_GEN_HELPER(TestRichEnum2, C_THREE) @@ -190,11 +175,6 @@ class TestRichEnum2 [[nodiscard]] constexpr std::size_t value() const { return enum_data().value; } }; -constexpr const std::array& TestRichEnum2::values() -{ - return SkeletalRichEnumValues::VALUES; -} - // This class does not have ordinal() and count() // Instead it has differently named functions class NonConformingTestRichEnum1 @@ -391,15 +371,8 @@ class TestRichEnumBool using SkeletalRichEnum::SkeletalRichEnum; public: - static constexpr const std::array& values(); - FIXED_CONTAINERS_RICH_ENUM_CONSTANT_GEN_HELPER(TestRichEnumBool, FALSE_VALUE) FIXED_CONTAINERS_RICH_ENUM_CONSTANT_GEN_HELPER(TestRichEnumBool, TRUE_VALUE) }; -constexpr const std::array& TestRichEnumBool::values() -{ - return SkeletalRichEnumValues::VALUES; -} - } // namespace fixed_containers::rich_enums