OGLplus  (0.59.0) a C++ wrapper for rendering APIs

enum_span.hpp
Go to the documentation of this file.
1 
9 #ifndef EAGINE_ENUM_SPAN_HPP
10 #define EAGINE_ENUM_SPAN_HPP
11 
12 #include "enum_class.hpp"
13 #include "span.hpp"
14 #include "types.hpp"
15 #include <algorithm>
16 #include <vector>
17 
18 namespace eagine {
19 
20 template <typename EnumClass>
21 class enum_list {
22 private:
23  using value_type = typename EnumClass::value_type;
24  std::vector<value_type> _values;
25 
26 public:
27  enum_list() = default;
28 
29  template <typename... EnumValues>
30  constexpr enum_list(EnumValues... evs) noexcept
31  : _values{{value_type(evs)...}} {}
32 
33  auto values() const noexcept {
34  return view(_values);
35  }
36 };
37 
38 template <typename EnumClass>
39 struct enum_span : span<const typename EnumClass::value_type> {
40 
41  enum_span() = default;
42 
43  enum_span(const enum_list<EnumClass>& enums) noexcept
44  : span<const typename EnumClass::value_type>(enums.values()) {}
45 };
46 
47 } // namespace eagine
48 
49 #endif // EAGINE_ENUM_SPAN_HPP
value_type
Value tree value element data type enumeration.
Definition: interface.hpp:27
Common code is placed in this namespace.
Definition: eagine.hpp:21
static constexpr auto view(T *addr, S size) noexcept -> const_span< T >
Creates a view starting at the specified pointer and specified length.
Definition: span.hpp:458
basic_span< T, T *, S > span
Default alias for basic memory spans with native pointer type.
Definition: span.hpp:415

Copyright © 2015-2021 Matúš Chochlík.
<chochlik -at -gmail.com>
Documentation generated on Tue Apr 13 2021 by Doxygen (version 1.8.17).