12 using mapped_type = Value;
13 using value_type = Value;
14 using size_type = std::size_t;
15 using reference = Value&;
16 using const_reference = Value
const&;
17 using pointer = Value*;
18 using const_pointer = Value
const*;
19 using iterator =
typename std::array<Value, Size>::iterator;
20 using const_iterator =
typename std::array<Value, Size>::const_iterator;
21 using reverse_iterator =
typename std::array<Value, Size>::reverse_iterator;
22 using const_reverse_iterator =
typename std::array<Value, Size>::const_reverse_iterator;
25 std::array<Value, Size> mContainer{};
28 constexpr DenseEnumMap() =
default;
30 constexpr DenseEnumMap(std::initializer_list<Value> init) : mContainer{} {
31 std::copy_n(init.begin(), std::min(init.size(), Size), mContainer.begin());
34 constexpr reference operator[](Key key)
noexcept {
return mContainer[
static_cast<size_type
>(key)]; }
36 constexpr const_reference operator[](Key key)
const noexcept {
return mContainer[
static_cast<size_type
>(key)]; }
38 constexpr reference at(Key key) {
return mContainer.at(
static_cast<size_type
>(key)); }
40 constexpr const_reference at(Key key)
const {
return mContainer.at(
static_cast<size_type
>(key)); }
42 constexpr pointer data()
noexcept {
return mContainer.data(); }
43 constexpr const_pointer data()
const noexcept {
return mContainer.data(); }
45 constexpr iterator begin()
noexcept {
return mContainer.begin(); }
46 constexpr iterator end()
noexcept {
return mContainer.end(); }
48 constexpr const_iterator begin()
const noexcept {
return mContainer.begin(); }
49 constexpr const_iterator end()
const noexcept {
return mContainer.end(); }
51 constexpr const_iterator cbegin()
const noexcept {
return mContainer.cbegin(); }
52 constexpr const_iterator cend()
const noexcept {
return mContainer.cend(); }
54 constexpr reverse_iterator rbegin()
noexcept {
return mContainer.rbegin(); }
55 constexpr reverse_iterator rend()
noexcept {
return mContainer.rend(); }
56 constexpr const_reverse_iterator crbegin()
const noexcept {
return mContainer.crbegin(); }
57 constexpr const_reverse_iterator crend()
const noexcept {
return mContainer.crend(); }
59 [[nodiscard]]
constexpr std::size_t size()
const noexcept {
return Size; }
60 [[nodiscard]]
constexpr bool empty()
const noexcept {
return Size == 0; }
62 constexpr void fill(Value
const& value) { mContainer.fill(value); }