Signed-off-by: Slendi <slendi@socopon.com>
This commit is contained in:
2025-10-10 12:45:35 +03:00
parent 465de1d0ea
commit aeeae20aff
9 changed files with 240 additions and 195 deletions

View File

@@ -11,22 +11,22 @@ template<class E>
concept EnumLike = std::is_enum_v<E>;
template<EnumLike E>
constexpr std::size_t enum_count_v
= static_cast<std::size_t>(enum_traits<E>::last)
- static_cast<std::size_t>(enum_traits<E>::first) + 1;
constexpr usize enum_count_v
= static_cast<usize>(enum_traits<E>::last)
- static_cast<usize>(enum_traits<E>::first) + 1;
template<EnumLike E, class T> struct enum_array {
using value_type = T;
using enum_type = E;
using underlying_index_type = std::size_t;
using underlying_index_type = usize;
static constexpr E first = enum_traits<E>::first;
static constexpr E last = enum_traits<E>::last;
static constexpr std::size_t size_value = enum_count_v<E>;
static constexpr usize size_value = enum_count_v<E>;
std::array<T, size_value> _data {};
static constexpr std::size_t size() noexcept { return size_value; }
static constexpr usize size() noexcept { return size_value; }
constexpr T *data() noexcept { return _data.data(); }
constexpr T const *data() const noexcept { return _data.data(); }
constexpr T *begin() noexcept { return _data.begin().operator->(); }
@@ -61,9 +61,9 @@ template<EnumLike E, class T> struct enum_array {
constexpr void fill(T const &v) { _data.fill(v); }
private:
static constexpr std::size_t to_index(E e) noexcept
static constexpr usize to_index(E e) noexcept
{
return static_cast<std::size_t>(e) - static_cast<std::size_t>(first);
return static_cast<usize>(e) - static_cast<usize>(first);
}
};