otsdaq  v2_05_02_indev
DataStructs.h
1 #ifndef _ots_DataStructs_h
2 #define _ots_DataStructs_h
3 
4 #include "otsdaq/Macros/CoutMacros.h"
5 
6 #include <map>
7 #include <set>
8 
9 namespace ots
10 {
11 template<typename N, typename V>
12 class Parameter
13 {
14  public:
15  Parameter(N name, V value) : name_(name), value_(value) { ; }
16  virtual ~Parameter(void) { ; }
17  // Getters
18  const N& getName(void) const { return name_; }
19  const V& getValue(void) const { return value_; }
20  const std::pair<N, V> getParameterPair(void) { return std::pair<N, V>(name_, value_); }
21 
22  // Setters
23  void setName(const N name) { name_ = name; }
24  void setValue(const V value) { value_ = value; }
25  void set(const N name, const V& value)
26  {
27  name_ = name;
28  value_ = value;
29  }
30  void set(std::pair<N, V> parameter)
31  {
32  name_ = parameter.first;
33  value_ = parameter.second;
34  }
35 
36  protected:
37  N name_;
38  V value_;
39 };
40 
41 template<typename N, typename V>
43 {
44  public:
45  typedef std::map<N, V> ParameterMap;
46  typedef typename ParameterMap::iterator iterator;
47  typedef typename ParameterMap::const_iterator const_iterator;
48 
49  Parameters(void) { ; }
50  Parameters(N name, V value) { addParameter(name, value); }
51  Parameters(Parameter<N, V> parameter) { addParameter(parameter); }
52  virtual ~Parameters(void) { ; }
53  // Getters
54  std::set<N> getNames(void) const
55  {
56  std::set<N> names;
57  for(const_iterator it = theParameters_.begin(); it != theParameters_.end(); it++)
58  names.insert(it->first);
59  return names;
60  }
61  const V& getValue(const N name) const
62  {
63  auto it = theParameters_.find(name);
64  if(it == theParameters_.end())
65  {
66  __SS__ << "Parameter '" << name << "' not found!" << __E__;
67  __SS_ONLY_THROW__;
68  }
69  return it->second;
70  }
71  Parameter<N, V> getParameter(const N name) { return Parameter<N, V>(name, getValue(name)); }
72 
73  // Setters
74  void addParameter(const N name, const V value) { theParameters_[name] = value; }
75  void addParameter(const Parameter<N, V> parameter) { theParameters_[parameter.getName()] = parameter.getValue(); }
76  void addParameter(const std::pair<N, V> parameterPair) { theParameters_[parameterPair.first] = parameterPair.second; }
77 
78  // Iterators
79  iterator begin(void) { return theParameters_.begin(); }
80  iterator end(void) { return theParameters_.end(); }
81  const_iterator begin(void) const { return theParameters_.begin(); }
82  const_iterator end(void) const { return theParameters_.end(); }
83  iterator find(N name) { return theParameters_.find(name); }
84  const_iterator find(N name) const { return theParameters_.find(name); }
85 
86  // Methods
87  unsigned int size(void) const { return theParameters_.size(); }
88  void clear(void) { theParameters_.clear(); }
89 
90  protected:
91  ParameterMap theParameters_;
92 };
93 
94 } // namespace ots
95 #endif