38 lines
869 B
C++
38 lines
869 B
C++
#pragma once
|
|
|
|
#include "data/IDMapper.h"
|
|
|
|
namespace Feather
|
|
{
|
|
template <typename T>
|
|
class Palette
|
|
{
|
|
protected:
|
|
const IDMapper<T>& m_registry;
|
|
public:
|
|
Palette(const IDMapper<T>& registry) :
|
|
m_registry(registry)
|
|
{}
|
|
|
|
virtual int GetID(const T& value) const = 0;
|
|
|
|
virtual const T& ByID(int id) const = 0;
|
|
};
|
|
|
|
template <typename T>
|
|
class GlobalPalette : public Palette<T>
|
|
{
|
|
const T* m_defaultValue;
|
|
public:
|
|
GlobalPalette(const IDMapper<T>& 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); }
|
|
};
|
|
} |