$treeview $search $mathjax $extrastylesheet
otsdaq
v2_03_00
$projectbrief
|
$projectbrief
|
$searchbox |
00001 #ifndef _ots_DataStructs_h 00002 #define _ots_DataStructs_h 00003 00004 #include "otsdaq-core/Macros/CoutMacros.h" 00005 00006 #include <map> 00007 #include <set> 00008 00009 namespace ots 00010 { 00011 template<typename N, typename V> 00012 class Parameter 00013 { 00014 public: 00015 Parameter(N name, V value) : name_(name), value_(value) { ; } 00016 virtual ~Parameter(void) { ; } 00017 // Getters 00018 const N& getName(void) const { return name_; } 00019 const V& getValue(void) const { return value_; } 00020 const std::pair<N, V> getParameterPair(void) 00021 { 00022 return std::pair<N, V>(name_, value_); 00023 } 00024 00025 // Setters 00026 void setName(const N name) { name_ = name; } 00027 void setValue(const V value) { value_ = value; } 00028 void set(const N name, const V& value) 00029 { 00030 name_ = name; 00031 value_ = value; 00032 } 00033 void set(std::pair<N, V> parameter) 00034 { 00035 name_ = parameter.first; 00036 value_ = parameter.second; 00037 } 00038 00039 protected: 00040 N name_; 00041 V value_; 00042 }; 00043 00044 template<typename N, typename V> 00045 class Parameters 00046 { 00047 public: 00048 typedef std::map<N, V> ParameterMap; 00049 typedef typename ParameterMap::iterator iterator; 00050 typedef typename ParameterMap::const_iterator const_iterator; 00051 00052 Parameters(void) { ; } 00053 Parameters(N name, V value) { addParameter(name, value); } 00054 Parameters(Parameter<N, V> parameter) { addParameter(parameter); } 00055 virtual ~Parameters(void) { ; } 00056 // Getters 00057 std::set<N> getNames(void) const 00058 { 00059 std::set<N> names; 00060 for(const_iterator it = theParameters_.begin(); it != theParameters_.end(); it++) 00061 names.insert(it->first); 00062 return names; 00063 } 00064 const V& getValue(const N name) const 00065 { 00066 auto it = theParameters_.find(name); 00067 if(it == theParameters_.end()) 00068 { 00069 __SS__ << "Parameter '" << name << "' not found!" << __E__; 00070 __SS_ONLY_THROW__; 00071 } 00072 return it->second; 00073 } 00074 Parameter<N, V> getParameter(const N name) 00075 { 00076 return Parameter<N, V>(name, getValue(name)); 00077 } 00078 00079 // Setters 00080 void addParameter(const N name, const V value) { theParameters_[name] = value; } 00081 void addParameter(const Parameter<N, V> parameter) 00082 { 00083 theParameters_[parameter.getName()] = parameter.getValue(); 00084 } 00085 void addParameter(const std::pair<N, V> parameterPair) 00086 { 00087 theParameters_[parameterPair.first] = parameterPair.second; 00088 } 00089 00090 // Iterators 00091 iterator begin(void) { return theParameters_.begin(); } 00092 iterator end(void) { return theParameters_.end(); } 00093 const_iterator begin(void) const { return theParameters_.begin(); } 00094 const_iterator end(void) const { return theParameters_.end(); } 00095 iterator find(N name) { return theParameters_.find(name); } 00096 const_iterator find(N name) const { return theParameters_.find(name); } 00097 00098 // Methods 00099 unsigned int size(void) const { return theParameters_.size(); } 00100 void clear(void) { theParameters_.clear(); } 00101 00102 protected: 00103 ParameterMap theParameters_; 00104 }; 00105 00106 } // namespace ots 00107 #endif