GGS(GenericGEANT4Simulation)Software  2.7.0
 All Data Structures Namespaces Files Functions Variables Typedefs Macros
GGSParameters.cpp
1 /*
2  * GGSParameters.cpp
3  *
4  * Created on: 3 May 2020
5  * Author: Nicola Mori
6  */
7 
8 #include "utils/GGSParameters.h"
9 
10 #include <stdexcept>
11 
13 
15  : _intParams{std::move(params._intParams)}, _doubleParams{std::move(params._doubleParams)},
16  _stringParams{std::move(params._stringParams)}, _boolParams{std::move(params._boolParams)},
17  _vectIntParams{std::move(params._vectIntParams)}, _vectDoubleParams{std::move(params._vectDoubleParams)},
18  _vectStringParams{std::move(params._vectStringParams)}, _vectBoolParams{std::move(params._vectBoolParams)} {}
19 
20 template <> void GGSParameters::SetParam<int>(const std::string &name, int value) {
21  if (!(_intParams.insert(std::make_pair(name, value)).second)) {
22  throw std::runtime_error(std::string("Can't set integer parameter \"") + name + ("\""));
23  }
24 }
25 
26 template <> void GGSParameters::SetParam<double>(const std::string &name, double value) {
27  if (!(_doubleParams.insert(std::make_pair(name, value)).second)) {
28  throw std::runtime_error(std::string("Can't set double parameter \"") + name + ("\""));
29  }
30 }
31 
32 template <> void GGSParameters::SetParam<bool>(const std::string &name, bool value) {
33  if (!(_boolParams.insert(std::make_pair(name, value)).second)) {
34  throw std::runtime_error(std::string("Can't set boolean parameter \"") + name + ("\""));
35  }
36 }
37 
38 template <> void GGSParameters::SetParam<std::string>(const std::string &name, std::string value) {
39  if (!(_stringParams.insert(std::make_pair(name, std::move(value))).second)) {
40  throw std::runtime_error(std::string("Can't set string parameter \"") + name + ("\""));
41  }
42 }
43 
44 template <> void GGSParameters::SetParam<std::vector<int>>(const std::string &name, std::vector<int> value) {
45  if (!(_vectIntParams.insert(std::make_pair(name, std::move(value))).second)) {
46  throw std::runtime_error(std::string("Can't set vector-of-integers parameter \"") + name + ("\""));
47  }
48 }
49 
50 template <> void GGSParameters::SetParam<std::vector<double>>(const std::string &name, std::vector<double> value) {
51  if (!(_vectDoubleParams.insert(std::make_pair(name, std::move(value))).second)) {
52  throw std::runtime_error(std::string("Can't set vector-of-doubles parameter \"") + name + ("\""));
53  }
54 }
55 
56 template <> void GGSParameters::SetParam<std::vector<bool>>(const std::string &name, std::vector<bool> value) {
57  if (!(_vectBoolParams.insert(std::make_pair(name, std::move(value))).second)) {
58  throw std::runtime_error(std::string("Can't set vector-of-booleans parameter \"") + name + ("\""));
59  }
60 }
61 
62 template <>
63 void GGSParameters::SetParam<std::vector<std::string>>(const std::string &name, std::vector<std::string> value) {
64  if (!(_vectStringParams.insert(std::make_pair(name, std::move(value))).second)) {
65  throw std::runtime_error(std::string("Can't set vector-of-strings parameter \"") + name + ("\""));
66  }
67 }
68 
69 template <> int GGSParameters::GetParam<int>(const std::string &name) const {
70  auto valueIter = _intParams.find(name);
71  if (valueIter == _intParams.end()) {
72  throw(std::runtime_error(std::string("Can't find integer parameter \"").append(name).append("\"")));
73  }
74  return valueIter->second;
75 }
76 
77 template <> double GGSParameters::GetParam<double>(const std::string &name) const {
78  auto valueIter = _doubleParams.find(name);
79  if (valueIter == _doubleParams.end()) {
80  throw(std::runtime_error(std::string("Can't find real parameter \"").append(name).append("\"")));
81  }
82  return valueIter->second;
83 }
84 
85 template <> bool GGSParameters::GetParam<bool>(const std::string &name) const {
86  auto valueIter = _boolParams.find(name);
87  if (valueIter == _boolParams.end()) {
88  throw(std::runtime_error(std::string("Can't find boolean parameter \"").append(name).append("\"")));
89  }
90  return valueIter->second;
91 }
92 
93 template <> std::string GGSParameters::GetParam<std::string>(const std::string &name) const {
94  auto valueIter = _stringParams.find(name);
95  if (valueIter == _stringParams.end()) {
96  throw(std::runtime_error(std::string("Can't find string parameter \"").append(name).append("\"")));
97  }
98  return valueIter->second;
99 }
100 
101 template <> std::vector<int> GGSParameters::GetParam<std::vector<int>>(const std::string &name) const {
102  auto valueIter = _vectIntParams.find(name);
103  if (valueIter == _vectIntParams.end()) {
104  throw(std::runtime_error(std::string("Can't find vector-of-integers parameter \"").append(name).append("\"")));
105  }
106  return valueIter->second;
107 }
108 
109 template <> std::vector<double> GGSParameters::GetParam<std::vector<double>>(const std::string &name) const {
110  auto valueIter = _vectDoubleParams.find(name);
111  if (valueIter == _vectDoubleParams.end()) {
112  throw(std::runtime_error(std::string("Can't find vector-of-reals parameter \"").append(name).append("\"")));
113  }
114  return valueIter->second;
115 }
116 
117 template <> std::vector<bool> GGSParameters::GetParam<std::vector<bool>>(const std::string &name) const {
118  auto valueIter = _vectBoolParams.find(name);
119  if (valueIter == _vectBoolParams.end()) {
120  throw(std::runtime_error(std::string("Can't find vector-of-booleans parameter \"").append(name).append("\"")));
121  }
122  return valueIter->second;
123 }
124 
125 template <> std::vector<std::string> GGSParameters::GetParam<std::vector<std::string>>(const std::string &name) const {
126  auto valueIter = _vectStringParams.find(name);
127  if (valueIter == _vectStringParams.end()) {
128  throw(std::runtime_error(std::string("Can't find vector-of-strings parameter \"").append(name).append("\"")));
129  }
130  return valueIter->second;
131 }
132 
134  if (&params == this)
135  return true;
136  return ((_intParams == params._intParams) && (_doubleParams == params._doubleParams) &&
137  (_stringParams == params._stringParams) && (_boolParams == params._boolParams) &&
138  (_vectIntParams == params._vectIntParams) && (_vectDoubleParams == params._vectDoubleParams) &&
139  (_vectStringParams == params._vectStringParams) && (_vectBoolParams == params._vectBoolParams));
140 }
141 
143  _intParams = rhs._intParams;
144  _doubleParams = rhs._doubleParams;
145  _stringParams = rhs._stringParams;
146  _boolParams = rhs._boolParams;
147  _vectIntParams = rhs._vectIntParams;
148  _vectDoubleParams = rhs._vectDoubleParams;
149  _vectStringParams = rhs._vectStringParams;
150  _vectBoolParams = rhs._vectBoolParams;
151  return *this;
152 }
bool AreSameParamsAs(const GGSParameters &params) const
Compares two parameter objects.
Class for storing parameters.
Definition: GGSParameters.h:29
GGSParameters & operator=(const GGSParameters &rhs)
Assignment operator.
GGSParameters()
Default constructor.