00001 #ifndef _ots_DataStructs_h
00002 #define _ots_DataStructs_h
00003
00004 #include <set>
00005 #include <map>
00006
00007 namespace ots
00008 {
00009
00010 template<typename N, typename V>
00011 class Parameter
00012 {
00013 public:
00014 Parameter(N name, V value) : name_(name), value_(value){;}
00015 virtual ~Parameter(void){;}
00016
00017 const N& getName (void) const {return name_;}
00018 const V& getValue(void) const {return value_;}
00019 const std::pair<N, V> getParameterPair(void){return std::pair<N,V>(name_,value_);}
00020
00021
00022 void setName (const N name ) {name_ = name;}
00023 void setValue(const V value) {value_ = value;}
00024 void set(const N name, const V& value) {name_ = name; value_ = value;}
00025 void set(std::pair<N, V> parameter) {name_ = parameter.first; value_ = parameter.second;}
00026 protected:
00027 N name_;
00028 V value_;
00029 };
00030
00031 template<typename N, typename V>
00032 class Parameters
00033 {
00034 public:
00035 typedef std::map<N,V> ParameterMap;
00036 typedef typename ParameterMap::iterator iterator;
00037 typedef typename ParameterMap::const_iterator const_iterator;
00038
00039 Parameters(void){;}
00040 Parameters(N name, V value){addParameter(name, value);}
00041 Parameters(Parameter<N,V> parameter){addParameter(parameter);}
00042 virtual ~Parameters(void){;}
00043
00044 std::set<N> getNames (void) const
00045 {
00046 std::set<N> names;
00047 for(const_iterator it=theParameters_.begin(); it!=theParameters_.end(); it++)
00048 names.insert(it->first);
00049 return names;
00050 }
00051 const V& getValue (const N name) const {return theParameters_.find(name)->second;}
00052 Parameter<N,V> getParameter (const N name){return Parameter<N,V>(name,getValue(name));}
00053
00054
00055 void addParameter(const N name, const V value) {theParameters_[name] = value;}
00056 void addParameter(const Parameter<N,V> parameter) {theParameters_[parameter.getName()] = parameter.getValue();}
00057 void addParameter(const std::pair<N,V> parameterPair){theParameters_[parameterPair.first] = parameterPair.second;}
00058
00059
00060 iterator begin(void) {return theParameters_.begin();}
00061 iterator end (void) {return theParameters_.end();}
00062 const_iterator begin(void) const {return theParameters_.begin();}
00063 const_iterator end (void) const {return theParameters_.end();}
00064 iterator find (N name) {return theParameters_.find(name);}
00065 const_iterator find (N name) const {return theParameters_.find(name);}
00066
00067
00068 unsigned int size (void) const {return theParameters_.size();}
00069 void clear(void) {theParameters_.clear();}
00070
00071 protected:
00072 ParameterMap theParameters_;
00073 };
00074
00075 }
00076 #endif