1 #pragma once 2 3 #ifndef TPROPERTYTYPE_H 4 #define TPROPERTYTYPE_H 5 6 #include <vector> 7 using namespace std; 8 9 template <typename T> 10 class TEnumerationT { 11 public: 12 typedef T value_type; 13 TEnumerationT()14 TEnumerationT() {} 15 addItem(const string & id,T item)16 void addItem(const string &id, T item) { 17 m_items.push_back(std::make_pair(id, item)); 18 } 19 getItemCount()20 int getItemCount() const { return m_items.size(); } getItem(unsigned int i,string & idstring,T & value)21 void getItem(unsigned int i, string &idstring, T &value) const { 22 assert(i < m_items.size()); 23 ItemData vp = m_items[i]; 24 idstring = vp.first; 25 value = vp.second; 26 } 27 getItem(unsigned int i)28 T getItem(unsigned int i) const { 29 assert(i < m_items.size()); 30 ItemData vp = m_items[i]; 31 return vp.second; 32 } 33 isValid(T item)34 bool isValid(T item) const { 35 typename vector<ItemData>::const_iterator it = 36 find_if(m_items.begin(), m_items.end(), MatchesItem(item)); 37 return it != m_items.end(); 38 } 39 40 private: 41 typedef pair<string, T> ItemData; 42 vector<ItemData> m_items; 43 44 class MatchesItem { 45 public: MatchesItem(const T & item)46 MatchesItem(const T &item) : m_item(item) {} 47 operator()48 bool operator()(const ItemData &itemData) { 49 return itemData.second == m_item; 50 } 51 52 private: 53 T m_item; 54 }; 55 }; 56 57 typedef TEnumerationT<int> TIntEnumeration; 58 59 template <typename T> 60 class TValueRangeT { 61 public: 62 typedef T value_type; TValueRangeT()63 TValueRangeT() : m_min(-1), m_max(1) {} TValueRangeT(T min,T max)64 TValueRangeT(T min, T max) : m_min(min), m_max(max) {} 65 66 void getRange(T &min, T &max) const; 67 isValid(T value)68 bool isValid(T value) const { return m_min <= value && value <= m_max; } 69 70 private: 71 T m_min, m_max; 72 }; 73 74 typedef TValueRangeT<int> IntValueRange; 75 typedef TValueRangeT<double> DoubleValueRange; 76 77 #endif 78