StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
Parameter.h
1 #if !defined(PARAMETER_H_INCLUDED_)
2 #define PARAMETER_H_INCLUDED_
3 
4 #if _MSC_VER > 1000
5 #pragma once
6 #endif // _MSC_VER > 1000
7 
8 #include "Named.h"
9 #include "Described.h"
10 #include "Stiostream.h"
11 #include <stdexcept>
12 using namespace std;
13 
23 class Parameter : public Named, public Described
24 {
25  public:
26 
27  static const int Boolean;
28  static const int Integer;
29  static const int Float;
30  static const int Double;
31 
32  Parameter();
33  Parameter(const string & name, const string & description, double value, int type, int key);
34  Parameter(const string & name, const string & description, bool * value, int key);
35  Parameter(const string & name, const string & description, int * value, int key);
36  Parameter(const string & name, const string & description, float * value, int key);
37  Parameter(const string & name, const string & description, double* value, int key);
38  Parameter(const Parameter & parameter);
39  virtual ~Parameter();
40 
41  const Parameter & operator=(const Parameter & parameter);
42 
43  int getKey() const;
44  int getType() const;
45  bool getBoolValue() const;
46  int getIntValue() const;
47  float getFloatValue() const;
48  double getDoubleValue() const;
49 
50  void setKey(int key);
51  void setValue(bool value);
52  void setValue(int value);
53  void setValue(float value);
54  void setValue(double value);
55  void set(const string & name,const string & description, double value,int type=Double,int key=0);
56  void set(const string & name,const string & description, bool * value,int key=0);
57  void set(const string & name,const string & description, int * value,int key=0);
58  void set(const string & name,const string & description, float * value,int key=0);
59  void set(const string & name,const string & description, double* value,int key=0);
60 
61  protected:
62 
63  int _key;
64  int _type;
65  double _value;
66  void * _exValue;
67 
68 };
69 
70 
71 inline const Parameter & Parameter::operator=(const Parameter & parameter)
72 {
73  if (&parameter==this)
74  return *this;
75  _key = parameter._key;
76  _type = parameter._type;
77  _value = parameter._value;
78  return *this;
79 }
80 
81 inline int Parameter::getKey() const
82 {
83  return _key;
84 }
85 
86 inline int Parameter::getType() const
87 {
88  return _type;
89 }
90 
91 inline bool Parameter::getBoolValue() const
92 {
93  if (_exValue)
94  return *static_cast<bool*>(_exValue);
95  else
96  return _value>0;
97 }
98 
99 inline int Parameter::getIntValue() const
100 {
101  if (_exValue)
102  return *static_cast<int*>(_exValue);
103  else
104  return int(_value);
105 }
106 
107 inline float Parameter::getFloatValue() const
108 {
109  if (_exValue)
110  return *static_cast<float*>(_exValue);
111  else
112  return float(_value);
113 }
114 
115 inline double Parameter::getDoubleValue() const
116 {
117  if (_exValue)
118  return *static_cast<double*>(_exValue);
119  else
120  return _value;
121 }
122 
123 inline void Parameter::setKey(int key)
124 {
125  _key = key;
126 }
127 
128 inline void Parameter::setValue(bool value)
129 {
130  //cout << " Parameter::setValue(bool value) value:"<<value<<endl;
131  if (_exValue)
132  {
133  switch (_type)
134  {
135  case 0: *static_cast<bool*>(_exValue) = value; break;
136  case 1: *static_cast<int*>(_exValue) = (int) value; break;
137  case 2: *static_cast<float*>(_exValue) = (float)value; break;
138  case 3: *static_cast<double*>(_exValue) = (double)value; break;
139  }
140  }
141  else
142  _value = value;
143 }
144 
145 inline void Parameter::setValue(int value)
146 {
147  // cout << " Parameter::setValue(int value) value:"<<value<<endl;
148  if (_exValue)
149  {
150  switch (_type)
151  {
152  case 0: *static_cast<bool*>(_exValue) = value>0; break;
153  case 1: *static_cast<int*>(_exValue) = value; break;
154  case 2: *static_cast<float*>(_exValue) = (float)value; break;
155  case 3: *static_cast<double*>(_exValue) = (double)value; break;
156  }
157  }
158  else
159  _value = value;
160 }
161 
162 inline void Parameter::setValue(float value)
163 {
164  //cout << " Parameter::setValue(float value) value:"<<value<<endl;
165  if (_exValue)
166  {
167  switch (_type)
168  {
169  case 0: *static_cast<bool*>(_exValue) = value>0; break;
170  case 1: *static_cast<int*>(_exValue) = (int) value; break;
171  case 2: *static_cast<float*>(_exValue) = value; break;
172  case 3: *static_cast<double*>(_exValue) = (double)value; break;
173  }
174  }
175  else
176  _value = value;
177 }
178 
179 
180 inline void Parameter::setValue(double value)
181 {
182  //cout << " Parameter::setValue(double value) value:"<<value<<endl;
183  if (_exValue)
184  {
185  switch (_type)
186  {
187  case 0: *static_cast<bool*>(_exValue) = value>0; break;
188  case 1: *static_cast<int*>(_exValue) = (int) value; break;
189  case 2: *static_cast<float*>(_exValue) = (float)value; break;
190  case 3: *static_cast<double*>(_exValue) = value; break;
191  }
192  }
193  else
194  _value = value;
195 }
196 
197 inline void Parameter::set(const string & name,
198  const string & description,
199  double value,
200  int type,
201  int key)
202 {
203  setName(name);
204  _description = description;
205  _type = type;
206  _key = key;
207  _value = value;
208  _exValue = 0;
209 }
210 
211 inline void Parameter::set(const string & name,const string & description, bool * value,int key)
212 {
213  setName(name);
214  _description = description;
215  _type = Boolean;
216  _key = key;
217  _exValue = value;
218 }
219 
220 inline void Parameter::set(const string & name,const string & description, int * value,int key)
221 {
222  setName(name);
223  _description = description;
224  _type = Integer;
225  _key = key;
226  _value = 0;
227  _exValue = value;
228 }
229 
230 inline void Parameter::set(const string & name,const string & description, float * value,int key)
231 {
232  setName(name);
233  _description = description;
234  _type = Float;
235  _key = key;
236  _value = 0;
237  _exValue = value;
238 }
239 
240 
241 inline void Parameter::set(const string & name,const string & description, double* value,int key)
242 {
243  setName(name);
244  _description = description;
245  _type = Double;
246  _key = key;
247  _value = 0;
248  _exValue = value;
249 }
250 
251 #endif // !defined(PARAMETER_H_INCLUDED_)
Definition: Named.h:16