Make Property use boost::variant
This commit is contained in:
@@ -22,6 +22,7 @@
|
|||||||
#define NCMPCPP_STRBUFFER_H
|
#define NCMPCPP_STRBUFFER_H
|
||||||
|
|
||||||
#include <boost/lexical_cast.hpp>
|
#include <boost/lexical_cast.hpp>
|
||||||
|
#include <boost/variant.hpp>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include "window.h"
|
#include "window.h"
|
||||||
|
|
||||||
@@ -33,34 +34,21 @@ template <typename CharT> class BasicBuffer
|
|||||||
{
|
{
|
||||||
struct Property
|
struct Property
|
||||||
{
|
{
|
||||||
enum class Type { Color, Format };
|
template <typename ArgT>
|
||||||
|
Property(ArgT &&arg, size_t id_)
|
||||||
Property(NC::Color color_, size_t id_)
|
: m_impl(std::forward<ArgT>(arg)), m_id(id_) { }
|
||||||
: m_type(Type::Color), m_color(std::move(color_)), m_id(id_) { }
|
|
||||||
Property(NC::Format format_, size_t id_)
|
|
||||||
: m_type(Type::Format), m_format(format_), m_id(id_) { }
|
|
||||||
|
|
||||||
size_t id() const { return m_id; }
|
size_t id() const { return m_id; }
|
||||||
|
|
||||||
template <typename OutputStreamT>
|
template <typename OutputStreamT>
|
||||||
friend OutputStreamT &operator<<(OutputStreamT &os, const Property &p)
|
friend OutputStreamT &operator<<(OutputStreamT &os, const Property &p)
|
||||||
{
|
{
|
||||||
switch (p.m_type)
|
boost::apply_visitor([&os](const auto &v) { os << v; }, p.m_impl);
|
||||||
{
|
|
||||||
case Type::Color:
|
|
||||||
os << p.m_color;
|
|
||||||
break;
|
|
||||||
case Type::Format:
|
|
||||||
os << p.m_format;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return os;
|
return os;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Type m_type;
|
boost::variant<Color, Format> m_impl;
|
||||||
Color m_color;
|
|
||||||
Format m_format;
|
|
||||||
size_t m_id;
|
size_t m_id;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user