SlHelpers
Loading...
Searching...
No Matches
Enum.h
1// SPDX-License-Identifier: GPL-2.0-only
2
3#pragma once
4
5#include <type_traits>
6
7namespace SlHelpers {
8
10template <typename Enum>
11class EnumRange {
12public:
14 using Underlying = std::underlying_type_t<Enum>;
15
17 struct iterator {
20
22 Enum operator*() const { return static_cast<Enum>(v); }
23
26 ++v;
27 return *this;
28 }
29
31 bool operator==(const iterator &other) const { return v == other.v; }
33 bool operator!=(const iterator &other) const { return v != other.v; }
34 };
35
37 iterator begin() const { return { static_cast<Underlying>(Enum::First) }; }
39 iterator end() const { return { static_cast<Underlying>(Enum::Last) + 1 }; }
40};
41
42}
Helper class to iterate over enum values from Enum::First to Enum::Last.
Definition Enum.h:11
iterator end() const
Returns an iterator to the end of the enum range.
Definition Enum.h:39
iterator begin() const
Returns an iterator to the beginning of the enum range.
Definition Enum.h:37
std::underlying_type_t< Enum > Underlying
Type of the underlying enum values.
Definition Enum.h:14
Iterator class to iterate over enum values.
Definition Enum.h:17
Enum operator*() const
Dereference operator to get the current enum value.
Definition Enum.h:22
bool operator!=(const iterator &other) const
Inequality operator to compare two iterators.
Definition Enum.h:33
Underlying v
Current value of the iterator.
Definition Enum.h:19
iterator & operator++()
Pre-increment operator to move to the next enum value.
Definition Enum.h:25
bool operator==(const iterator &other) const
Equality operator to compare two iterators.
Definition Enum.h:31