MINT2
NamedParameter.h
Go to the documentation of this file.
1 #ifndef NAMED_PARAMETER_HH
2 #define NAMED_PARAMETER_HH
3 // author: Jonas Rademacker (Jonas.Rademacker@bristol.ac.uk)
4 // status: Mon 9 Feb 2009 19:17:56 GMT
5 
6 #include <string>
7 #include <vector>
8 #include <iostream>
9 
12 
13 namespace MINT{
14 
15 template<typename T>
17  protected:
18  std::vector<T> _valueArray;
19 
20  virtual bool setFromParsedLine(const ParsedParameterLine& line){
21  _valueArray.clear();
22  _valueArray.resize(1);
23  const std::vector<std::string>& vsl = line.parsedStrings();
24  if(vsl.size() < 2) return false; // first element is parameter name
25  if(vsl[0] != _name){
26  std::cout << "ERROR in NamedParameter::setFromParsedLine"
27  << " wrong parameter name. My name is " << _name
28  << " the line's first element is " << vsl[0]
29  << std::endl;
30  return false;
31  }
32  for(unsigned int i=1; i< vsl.size(); i++){
33  // std::stringstream strm(vsl[i]);
34  NamedParameterStream strm(vsl[i]);
35  T tmpVal;
36  strm >> tmpVal;
37  setVal(tmpVal, i-1);
38  }
39  return true;
40  }
41 
42  public:
43  NamedParameter(const std::string& name
45  )
46  : NamedParameterBase(name, (const char*)0, vb)
47  {
49  }
50  NamedParameter(const std::string& name
51  , const char* fname=0
53  )
54  : NamedParameterBase(name, fname, vb)
55  {
57  }
58  NamedParameter(const std::string& name
59  , const T& def
60  , const char* fname=0
62  )
63  : NamedParameterBase(name, fname, vb)
64  {
65  setVal(def);
66  _gotInitialised = true;
68  }
69  NamedParameter(const std::string& name
70  , const T& v0, const T& v1
71  , const char* fname=0
73  )
74  : NamedParameterBase(name, fname, vb)
75  {
76  setVal(v0, 0); setVal(v1,1);
77  _gotInitialised = true;
79  }
80  NamedParameter(const std::string& name
81  , const T& v0, const T& v1, const T& v2
82  , const char* fname=0
84  )
85  : NamedParameterBase(name, fname, vb)
86  {
87  setVal(v0, 0); setVal(v1,1); setVal(v2,2);
88  _gotInitialised = true;
90  }
91  NamedParameter(const std::string& name
92  , const T& v0, const T& v1, const T& v2
93  , const T& v3
94  , const char* fname=0
96  )
97  : NamedParameterBase(name, fname, vb)
98  {
99  setVal(v0, 0); setVal(v1,1); setVal(v2,2); setVal(v3,3);
100  _gotInitialised = true;
102  }
103  NamedParameter(const std::string& name
104  , const T& v0, const T& v1, const T& v2
105  , const T& v3, const T& v4
106  , const char* fname=0
108  )
109  : NamedParameterBase(name, fname, vb)
110  {
111  setVal(v0, 0); setVal(v1,1); setVal(v2,2); setVal(v3,3); setVal(v4,4);
112  _gotInitialised = true;
114  }
115  NamedParameter(const std::string& name
116  , const T& v0, const T& v1, const T& v2
117  , const T& v3, const T& v4, const T& v5
118  , const char* fname=0
120  )
121  : NamedParameterBase(name, fname, vb)
122  {
123  setVal(v0, 0); setVal(v1,1); setVal(v2,2); setVal(v3,3); setVal(v4,4);
124  setVal(v5,5);
125  _gotInitialised = true;
127  }
128  NamedParameter(const std::string& name
129  , const T& v0, const T& v1, const T& v2
130  , const T& v3, const T& v4, const T& v5
131  , const T& v6
132  , const char* fname=0
134  )
135  : NamedParameterBase(name, fname, vb)
136  {
137  setVal(v0, 0); setVal(v1,1); setVal(v2,2); setVal(v3,3);
138  setVal(v4,4); setVal(v5,5); setVal(v6,6);
139  _gotInitialised = true;
141  }
142  NamedParameter(const std::string& name
143  , const T& v0, const T& v1, const T& v2
144  , const T& v3, const T& v4, const T& v5
145  , const T& v6, const T& v7
146  , const char* fname=0
148  )
149  : NamedParameterBase(name, fname, vb)
150  {
151  setVal(v0, 0); setVal(v1,1); setVal(v2,2); setVal(v3,3);
152  setVal(v4,4); setVal(v5,5); setVal(v6,6); setVal(v7,7);
153  _gotInitialised = true;
155  }
156  NamedParameter(const std::string& name
157  , const T& v0, const T& v1, const T& v2
158  , const T& v3, const T& v4, const T& v5
159  , const T& v6, const T& v7, const T& v8
160  , const char* fname=0
162  )
163  : NamedParameterBase(name, fname, vb)
164  {
165  setVal(v0, 0); setVal(v1,1); setVal(v2,2); setVal(v3,3);
166  setVal(v4,4); setVal(v5,5); setVal(v6,6); setVal(v7,7);
167  setVal(v8,8);
168  _gotInitialised = true;
170  }
171  NamedParameter(const std::string& name
172  , const std::vector<T> & defVec
173  , const char* fname=0
175  )
176  : NamedParameterBase(name, fname, vb)
177  {
178  setVal(defVec);
179  _gotInitialised = true;
181  }
183  : INamedParameter()
184  , NamedParameterBase(other)
185  , _valueArray(other._valueArray)
186  {
187  }
188 
189  virtual ~NamedParameter(){}
190 
191  virtual int size() const{
192  return _valueArray.size();
193  }
194  virtual const T& getVal(int i=0) const{
195  if(i < 0 || i >= (int) _valueArray.size()){
196  std::cout << "FATAL ERROR in NamedParameter::getVal: "
197  << " for parameter name \"" << name()
198  << "\". Index: " << i << " out of range [ "
199  << 0 << " , " << _valueArray.size()
200  << " [ - I will crash."
201  << "\n Maybe the parameter was not initialised?"
202  << "\n Even non-array NamedParameters are stored"
203  << " in an array - in this case of size 1."
204  << " Uninitialised this can end up being 0."
205  << std::endl;
206  throw "array index out of bounds";
207  }
208  return _valueArray[i];
209  }
210  operator T() const{
211  return getVal();
212  // meaningful for parameters that aren't arrays
213  // otherwise: you'll get the first.
214  }
215 
216  const std::vector<T>& getVector() const{
217  return _valueArray;
218  }
219 
220  virtual void setVal(const T& val, int i=0){
221  if(i < 0) return;
222  if(i >= (int) _valueArray.size()){
223  _valueArray.resize(i+1);
224  }
225  _valueArray[i] = val;
226  _gotInitialised = true;
227  }
228  virtual void setVal(const std::vector<T>& valList){
229  _valueArray = valList;
230  _gotInitialised = true;
231  }
232  virtual void print(std::ostream& os = std::cout) const{
233  os << "\"" << name() << "\" ";
234  if(size()==0){
235  return;
236  }else{
237  for(int i=0; i< size(); i++){
238  os << getVal(i);
239  if(i != size()) os << " ";
240  }
241  }
242  }
243  operator std::vector<T>()const {return getVector();}
245  setVal(d, 0);
246  return *this;
247  }
248  NamedParameter<T>& operator=(const std::vector<T>& v){
249  setVal(v);
250  return *this;
251  }
253  _valueArray[0] += rhs;
254  return *this;
255  }
257  _valueArray[0] -= rhs;
258  return *this;
259  }
261  for(unsigned int i=0; i < _valueArray.size(); i++) _valueArray[i] *= rhs;
262  return *this;
263  }
265  for(unsigned int i=0; i < _valueArray.size(); i++) _valueArray[i] /= rhs;
266  return *this;
267  }
268 
269 };
270 
271  // specialisations for strings:
272 template<>
273  bool MINT::NamedParameter<std::string>::setFromParsedLine(const ParsedParameterLine& line);
274 
275 template<>
276  void MINT::NamedParameter<std::string>::print(std::ostream& os) const;
277 
278  template<>
280  MINT::NamedParameter<std::string>::operator-=(const std::string& rhs);
281  template<>
283  MINT::NamedParameter<std::string>::operator*=(const std::string& rhs);
284  template<>
286  MINT::NamedParameter<std::string>::operator/=(const std::string& rhs);
287 }//namespace MINT
288 
289 template<typename T>
290 std::ostream& operator<<(std::ostream& os, const MINT::NamedParameter<T>& np){
291  np.print(os);
292  return os;
293 }
294 
295 #endif
296 //
NamedParameter(const std::string &name, const T &v0, const T &v1, const T &v2, const T &v3, const T &v4, const char *fname=0, NamedParameterBase::VERBOSITY vb=NamedParameterBase::VERBOSE)
virtual int size() const
virtual const std::string & name() const
virtual void setVal(const std::vector< T > &valList)
NamedParameter(const std::string &name, const T &v0, const T &v1, const T &v2, const T &v3, const T &v4, const T &v5, const char *fname=0, NamedParameterBase::VERBOSITY vb=NamedParameterBase::VERBOSE)
NamedParameter(const std::string &name, const T &v0, const T &v1, const char *fname=0, NamedParameterBase::VERBOSITY vb=NamedParameterBase::VERBOSE)
NamedParameter(const std::string &name, const T &v0, const T &v1, const T &v2, const T &v3, const T &v4, const T &v5, const T &v6, const T &v7, const char *fname=0, NamedParameterBase::VERBOSITY vb=NamedParameterBase::VERBOSE)
NamedParameter(const std::string &name, const T &v0, const T &v1, const T &v2, const T &v3, const char *fname=0, NamedParameterBase::VERBOSITY vb=NamedParameterBase::VERBOSE)
const std::vector< std::string > & parsedStrings() const
NamedParameter(const std::string &name, const T &v0, const T &v1, const T &v2, const T &v3, const T &v4, const T &v5, const T &v6, const char *fname=0, NamedParameterBase::VERBOSITY vb=NamedParameterBase::VERBOSE)
std::vector< T > _valueArray
NamedParameter< T > & operator=(const T &d)
virtual void print(std::ostream &os=std::cout) const
NamedParameter(const std::string &name, const T &v0, const T &v1, const T &v2, const T &v3, const T &v4, const T &v5, const T &v6, const T &v7, const T &v8, const char *fname=0, NamedParameterBase::VERBOSITY vb=NamedParameterBase::VERBOSE)
NamedParameter(const std::string &name, const std::vector< T > &defVec, const char *fname=0, NamedParameterBase::VERBOSITY vb=NamedParameterBase::VERBOSE)
NamedParameter< T > & operator=(const std::vector< T > &v)
NamedParameter(const std::string &name, const char *fname=0, NamedParameterBase::VERBOSITY vb=NamedParameterBase::VERBOSE)
const std::vector< T > & getVector() const
std::ostream & operator<<(std::ostream &os, const MINT::NamedParameter< T > &np)
virtual void setVal(const T &val, int i=0)
virtual bool setFromParsedLine(const ParsedParameterLine &line)
NamedParameter< T > & operator-=(const T &rhs)
NamedParameter(const std::string &name, const T &v0, const T &v1, const T &v2, const char *fname=0, NamedParameterBase::VERBOSITY vb=NamedParameterBase::VERBOSE)
NamedParameter< T > & operator+=(const T &rhs)
NamedParameter(const NamedParameter< T > &other)
NamedParameter(const std::string &name, const T &def, const char *fname=0, NamedParameterBase::VERBOSITY vb=NamedParameterBase::VERBOSE)
NamedParameter< T > & operator/=(const T &rhs)
NamedParameter(const std::string &name, NamedParameterBase::VERBOSITY vb)
virtual const T & getVal(int i=0) const
NamedParameter< T > & operator *=(const T &rhs)