Go to the documentation of this file.
9 #ifndef EAGINE_ENUM_RANGE_HPP
10 #define EAGINE_ENUM_RANGE_HPP
21 template <
typename EnumClass>
22 class enumerated_value_range;
24 template <
typename EnumClass,
typename T,
identifier_t LibId,
identifier_t EnumId>
25 class enumerated_value_range<enum_class<EnumClass, T, LibId, EnumId>> {
30 using _ec_t = enum_class<EnumClass, T, LibId, EnumId>;
32 static _ec_t _wrap_enum(T e) noexcept {
40 explicit enumerated_value_range(memory::span<const T> v) noexcept
42 , _end(v.data() + v.size()) {
43 EAGINE_ASSERT(_begin <= _end);
46 explicit enumerated_value_range(std::pair<const void*, size_type> p) noexcept
47 : enumerated_value_range(
48 memory::span<const T>{
static_cast<const T*
>(p.first), p.second}) {}
51 transforming_iterator<
const T*, _ec_t, _ec_t, _ec_t (*)(T) noexcept>;
53 size_type size() const noexcept {
54 return size_type(_end - _begin);
57 iterator begin() const noexcept {
58 return iterator(_begin, &_wrap_enum);
61 iterator end() const noexcept {
62 return iterator(_end, &_wrap_enum);
68 #endif // EAGINE_ENUM_RANGE_HPP
value_type
Value tree value element data type enumeration.
Definition: interface.hpp:27
std::ptrdiff_t span_size_t
Signed span size type used by eagine.
Definition: types.hpp:36
Common code is placed in this namespace.
Definition: eagine.hpp:21