From fb262944fc0b2be821de6436952fcc93e6d3d35c Mon Sep 17 00:00:00 2001 From: neargye Date: Thu, 11 Apr 2019 15:37:57 +0500 Subject: [PATCH] add enum_pairs --- include/magic_enum.hpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/include/magic_enum.hpp b/include/magic_enum.hpp index a03699b..c368d49 100644 --- a/include/magic_enum.hpp +++ b/include/magic_enum.hpp @@ -169,6 +169,15 @@ template return names; } +template +[[nodiscard]] constexpr decltype(auto) pairs_impl(std::integer_sequence) noexcept { + static_assert(std::is_enum_v, "magic_enum::detail::pairs_impl requires enum type."); + constexpr auto values = values_impl(range_impl()); + constexpr std::array, sizeof...(I)> pairs{{{values[I], name_impl()}...}}; + + return pairs; +} + template using enable_if_enum_t = typename std::enable_if>::type; @@ -307,6 +316,16 @@ template > return names; } + +template > +[[nodiscard]] constexpr decltype(auto) enum_pairs() noexcept { + static_assert(std::is_enum_v, "magic_enum::enum_pairs requires enum type."); + constexpr auto count = detail::values_impl(detail::range_impl()).size(); + constexpr auto pairs = detail::pairs_impl(std::make_index_sequence{}); + + return pairs; +} + namespace ops { template , typename = detail::enable_if_enum_t>