xtId.h (1089B)
1 #pragma once 2 3 #include <cstdint> 4 #include <limits> 5 6 namespace xt 7 { 8 enum class IdType 9 { 10 WaveId, 11 TableId, 12 TableIndex 13 }; 14 15 template<typename TId, IdType Type> 16 class Id 17 { 18 public: 19 using RawType = TId; 20 static constexpr IdType MyIdType = Type; 21 22 constexpr Id() : m_id(Invalid) 23 { 24 } 25 constexpr explicit Id(const TId& _id) : m_id(_id) 26 { 27 } 28 29 bool operator < (const Id& _id) const { return m_id < _id.m_id; } 30 bool operator > (const Id& _id) const { return m_id > _id.m_id; } 31 bool operator == (const Id& _id) const { return m_id == _id.m_id; } 32 bool operator != (const Id& _id) const { return m_id != _id.m_id; } 33 34 constexpr auto& rawId() const { return m_id; } 35 36 constexpr static Id invalid() { return Id(Invalid); } 37 constexpr bool isValid() const { return m_id != Invalid; } 38 void invalidate() { m_id = Invalid; } 39 40 private: 41 static constexpr TId Invalid = std::numeric_limits<TId>::max(); 42 43 TId m_id; 44 }; 45 46 using WaveId = Id<uint16_t, IdType::WaveId>; 47 using TableId = Id<uint16_t, IdType::TableId>; 48 using TableIndex = Id<uint16_t, IdType::TableIndex>; 49 }