17 #include <type_traits>
30 template <
typename Enumeration,
typename ValueType,
31 Enumeration size_element = Enumeration::Count,
32 int enum_size =
static_cast <int> (size_element)>
35 ValueType underlying [enum_size];
44 for (
int i = 0; i < enum_size; i++) {
45 underlying [i] = ValueType {};
51 for (
int i = 0; i < enum_size; i++) {
52 underlying [i] = initial;
56 inline ValueType &operator[] (
const Enumeration index) noexcept {
57 assert (
static_cast <int> (index) >= 0 &&
static_cast <int> (index) < enum_size);
58 return underlying [
static_cast <const int> (index)];
61 inline const ValueType &operator[] (
const Enumeration index)
const noexcept {
62 assert (
static_cast <int> (index) >= 0 &&
static_cast <int> (index) < enum_size);
63 return underlying [
static_cast <const int> (index)];
66 template <
class IteratedType>
70 IteratedType *
item =
nullptr;
77 inline IteratedType &operator*() const noexcept {
98 return item != compare.item;
102 return item == compare.item;
105 inline Enumeration
key() const noexcept {
106 return static_cast <Enumeration
> (
item -
start);
Definition: enumeratedarray.h:67
IteratedType * operator->() const noexcept
Definition: enumeratedarray.h:81
IteratedType * item
Definition: enumeratedarray.h:70
bool operator==(const eaiterator< IteratedType > &compare) const noexcept
Definition: enumeratedarray.h:100
bool operator!=(const eaiterator< IteratedType > &compare) const noexcept
Definition: enumeratedarray.h:96
IteratedType * start
Definition: enumeratedarray.h:69
Enumeration key() const noexcept
Return the enumeration value for the current element.
Definition: enumeratedarray.h:105
eaiterator(IteratedType *s, IteratedType *i) noexcept
Definition: enumeratedarray.h:72
eaiterator() noexcept=default
An array indexed by an enumeration rather than an integer of some sort.
Definition: enumeratedarray.h:33
const_iterator end() const noexcept
Definition: enumeratedarray.h:122
EnumeratedArray()
Initialize an enumerated array. Set values to value type's default.
Definition: enumeratedarray.h:40
eaiterator< ValueType > iterator
Definition: enumeratedarray.h:109
eaiterator< const ValueType > const_iterator
Definition: enumeratedarray.h:110
iterator begin() noexcept
Definition: enumeratedarray.h:112
std::conditional< std::is_pod< ValueType >::value, std::true_type, std::false_type > needs_initialization
Definition: enumeratedarray.h:34
iterator end() noexcept
Definition: enumeratedarray.h:115
EnumeratedArray(ValueType initial)
Initialize an enumerated array. Set values to a specific initial value.
Definition: enumeratedarray.h:50
Enumeration enumeration_type
Definition: enumeratedarray.h:38
ValueType value_type
Definition: enumeratedarray.h:37
ValueType underlying[enum_size]
Definition: enumeratedarray.h:35
const_iterator begin() const noexcept
Definition: enumeratedarray.h:119
uint32_t value
Definition: audiooutput.cpp:68
static Privilege operator++(Privilege &p, int)
Postfix increment operator to allow Privilege iteration.
Definition: user.h:43