gearmulator

Emulation of classic VA synths of the late 90s/2000s that are based on Motorola 56300 family DSPs
Log | Files | Refs | Submodules | README | LICENSE

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 }