16 template<
typename TEnum>
18 requires std::is_enum_v<TEnum>;
23 template<DenselyPackedOptionsEnum TEnum>
26 return static_cast<size_t>(TEnum::NUM_OPTIONS);
39 template<DenselyPackedOptionsEnum TEnum>
42 return static_cast<size_t>(std::to_underlying(
v));
47 template<DenselyPackedOptionsEnum TEnum>
61 DenselyPackedOptionsEnum
TEnum,
62 typename Proj = std::identity
69 using value_type = std::remove_cvref_t<
decltype(
Proj{}(std::declval<TEnum>()))>;
84 return std::invoke(*proj_, current_);
89 current_ =
static_cast<TEnum>(std::to_underlying(current_) + 1);
101 const Proj* proj_ =
nullptr;
112 auto front()
const {
return std::invoke(proj_,
static_cast<TEnum>(0)); }
113 auto back()
const {
return std::invoke(proj_,
static_cast<TEnum>(std::to_underlying(TEnum::NUM_OPTIONS)-1)); }
122 template<DenselyPackedOptionsEnum TEnum,
typename Proj = std::
identity>
132 template<
typename TEnum>
134 requires std::is_enum_v<TEnum>;
135 requires std::is_unsigned_v<std::underlying_type_t<TEnum>>;
140 template<FlagsEnum TEnum>
143 return static_cast<size_t>(TEnum::NUM_FLAGS);
Definition enum_helpers.h:66
Iterator operator++(int)
Definition enum_helpers.h:93
std::remove_cvref_t< decltype(Proj{}(std::declval< TEnum >()))> value_type
Definition enum_helpers.h:69
Iterator & operator++()
Definition enum_helpers.h:87
std::forward_iterator_tag iterator_category
Definition enum_helpers.h:72
void pointer
Definition enum_helpers.h:70
friend bool operator==(const Iterator &, const Iterator &)=default
value_type operator*() const
Definition enum_helpers.h:82
Iterator(const Proj &proj, TEnum current)
Definition enum_helpers.h:75
value_type reference
Definition enum_helpers.h:71
ptrdiff_t difference_type
Definition enum_helpers.h:68
Definition enum_helpers.h:64
Iterator end() const
Definition enum_helpers.h:115
Iterator begin() const
Definition enum_helpers.h:114
decltype(Proj{}(std::declval< TEnum >())) value_type
Definition enum_helpers.h:104
constexpr DenselyPackedOptionsIterable(Proj proj={})
Definition enum_helpers.h:108
auto back() const
Definition enum_helpers.h:113
auto front() const
Definition enum_helpers.h:112
Definition enum_helpers.h:17
Definition enum_helpers.h:133
Definition custom_decoration_generator.h:5
constexpr DenselyPackedOptionsIterable< TEnum, Proj > make_option_iterable(Proj &&proj={})
Definition enum_helpers.h:123
constexpr std::optional< TEnum > from_index(size_t pos)
Definition enum_helpers.h:48
constexpr U to(T &&value)
Definition conversion.h:56
constexpr size_t to_index(TEnum v)
Definition enum_helpers.h:40
constexpr size_t num_options()
Definition enum_helpers.h:24
constexpr size_t num_flags()
Definition enum_helpers.h:141
Definition enum_helpers.h:33