Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifndef TPROPERTYTYPE_H
Toshihiro Shimizu 890ddd
#define TPROPERTYTYPE_H
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include <vector></vector>
Toshihiro Shimizu 890ddd
using namespace std;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
template <typename t=""></typename>
Toshihiro Shimizu 890ddd
class TEnumerationT
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	typedef T value_type;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	TEnumerationT() {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void addItem(const string &id, T item)
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
		m_items.push_back(std::make_pair(id, item));
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	int getItemCount() const
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
		return m_items.size();
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
	void getItem(unsigned int i, string &idstring, T &value) const
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
		assert(i < m_items.size());
Toshihiro Shimizu 890ddd
		ItemData vp = m_items[i];
Toshihiro Shimizu 890ddd
		idstring = vp.first;
Toshihiro Shimizu 890ddd
		value = vp.second;
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	T getItem(unsigned int i) const
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
		assert(i < m_items.size());
Toshihiro Shimizu 890ddd
		ItemData vp = m_items[i];
Toshihiro Shimizu 890ddd
		return vp.second;
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	bool isValid(T item) const
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
		typename vector<itemdata>::const_iterator it =</itemdata>
Toshihiro Shimizu 890ddd
			find_if(m_items.begin(), m_items.end(), MatchesItem(item));
Toshihiro Shimizu 890ddd
		return it != m_items.end();
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Toshihiro Shimizu 890ddd
	typedef pair<string, t=""> ItemData;</string,>
Toshihiro Shimizu 890ddd
	vector<itemdata> m_items;</itemdata>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	class MatchesItem
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
	public:
Toshihiro Shimizu 890ddd
		MatchesItem(const T &item) : m_item(item) {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
		bool operator()(const ItemData &itemData)
Toshihiro Shimizu 890ddd
		{
Toshihiro Shimizu 890ddd
			return itemData.second == m_item;
Toshihiro Shimizu 890ddd
		}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	private:
Toshihiro Shimizu 890ddd
		T m_item;
Toshihiro Shimizu 890ddd
	};
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
typedef TEnumerationT<int> TIntEnumeration;</int>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
template <typename t=""></typename>
Toshihiro Shimizu 890ddd
class TValueRangeT
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	typedef T value_type;
Toshihiro Shimizu 890ddd
	TValueRangeT() : m_min(-1), m_max(1) {}
Toshihiro Shimizu 890ddd
	TValueRangeT(T min, T max) : m_min(min), m_max(max) {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void getRange(T &min, T &max) const;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	bool isValid(T value) const
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
		return m_min <= value && value <= m_max;
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Toshihiro Shimizu 890ddd
	T m_min, m_max;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
typedef TValueRangeT<int> IntValueRange;</int>
Toshihiro Shimizu 890ddd
typedef TValueRangeT<double> DoubleValueRange;</double>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#endif