1
0
Fork 0
mirror of https://github.com/Neargye/magic_enum.git synced 2026-01-09 23:34:23 +00:00

add enum_pairs

This commit is contained in:
neargye 2019-04-11 15:37:57 +05:00
parent 54fbc2de95
commit fb262944fc

View file

@ -169,6 +169,15 @@ template <typename E, std::size_t... I>
return names;
}
template <typename E, std::size_t... I>
[[nodiscard]] constexpr decltype(auto) pairs_impl(std::integer_sequence<std::size_t, I...>) noexcept {
static_assert(std::is_enum_v<E>, "magic_enum::detail::pairs_impl requires enum type.");
constexpr auto values = values_impl<E>(range_impl<E>());
constexpr std::array<std::pair<E, std::string_view>, sizeof...(I)> pairs{{{values[I], name_impl<E, values[I]>()}...}};
return pairs;
}
template<typename T>
using enable_if_enum_t = typename std::enable_if<std::is_enum_v<T>>::type;
@ -307,6 +316,16 @@ template <typename E, typename = detail::enable_if_enum_t<E>>
return names;
}
template <typename E, typename = detail::enable_if_enum_t<E>>
[[nodiscard]] constexpr decltype(auto) enum_pairs() noexcept {
static_assert(std::is_enum_v<E>, "magic_enum::enum_pairs requires enum type.");
constexpr auto count = detail::values_impl<E>(detail::range_impl<E>()).size();
constexpr auto pairs = detail::pairs_impl<E>(std::make_index_sequence<count>{});
return pairs;
}
namespace ops {
template <typename E, typename D = std::decay_t<E>, typename = detail::enable_if_enum_t<E>>