#pragma once #include "data/IDMapper.h" namespace Feather { template class Palette { protected: const IDMapper& m_registry; public: Palette(const IDMapper& registry) : m_registry(registry) {} virtual int GetID(const T& value) const = 0; virtual const T& ByID(int id) const = 0; }; template class GlobalPalette : public Palette { const T* m_defaultValue; public: GlobalPalette(const IDMapper& registry, const T* defaultValue) : Palette(registry), m_defaultValue(defaultValue) {} inline const T& GetDefault() const { return *m_defaultValue; } inline int GetDefaultID() const { return GetID(GetDefault()); } inline virtual int GetID(const T& value) const final { return m_registry.GetID(value); } inline virtual const T& ByID(int id) const final { return m_registry.ByID(id); } }; }