Shinya Kitaoka 810553
#pragma once
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>
Shinya Kitaoka 120a6e
class TEnumerationT {
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  typedef T value_type;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  TEnumerationT() {}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void addItem(const string &id, T item) {
Shinya Kitaoka 120a6e
    m_items.push_back(std::make_pair(id, item));
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  int getItemCount() const { return m_items.size(); }
Shinya Kitaoka 120a6e
  void getItem(unsigned int i, string &idstring, T &value) const {
Shinya Kitaoka 120a6e
    assert(i < m_items.size());
Shinya Kitaoka 120a6e
    ItemData vp = m_items[i];
Shinya Kitaoka 120a6e
    idstring    = vp.first;
Shinya Kitaoka 120a6e
    value       = vp.second;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  T getItem(unsigned int i) const {
Shinya Kitaoka 120a6e
    assert(i < m_items.size());
Shinya Kitaoka 120a6e
    ItemData vp = m_items[i];
Shinya Kitaoka 120a6e
    return vp.second;
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  bool isValid(T item) const {
Shinya Kitaoka 120a6e
    typename vector<itemdata>::const_iterator it =</itemdata>
Shinya Kitaoka 120a6e
        find_if(m_items.begin(), m_items.end(), MatchesItem(item));
Shinya Kitaoka 120a6e
    return it != m_items.end();
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Shinya Kitaoka 120a6e
  typedef pair<string, t=""> ItemData;</string,>
Shinya Kitaoka 120a6e
  vector<itemdata> m_items;</itemdata>
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  class MatchesItem {
Shinya Kitaoka 120a6e
  public:
Shinya Kitaoka 120a6e
    MatchesItem(const T &item) : m_item(item) {}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
    bool operator()(const ItemData &itemData) {
Shinya Kitaoka 120a6e
      return itemData.second == m_item;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  private:
Shinya Kitaoka 120a6e
    T m_item;
Shinya Kitaoka 120a6e
  };
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
typedef TEnumerationT<int> TIntEnumeration;</int>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
template <typename t=""></typename>
Shinya Kitaoka 120a6e
class TValueRangeT {
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  typedef T value_type;
Shinya Kitaoka 120a6e
  TValueRangeT() : m_min(-1), m_max(1) {}
Shinya Kitaoka 120a6e
  TValueRangeT(T min, T max) : m_min(min), m_max(max) {}
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void getRange(T &min, T &max) const;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  bool isValid(T value) const { return m_min <= value && value <= m_max; }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Shinya Kitaoka 120a6e
  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