KaliVeda  1.13/01
Heavy-Ion Analysis Toolkit
KVNamedParameter.h
Go to the documentation of this file.
1 
4 #ifndef __KVNAMEDPARAMETER_H
5 #define __KVNAMEDPARAMETER_H
6 
7 #include "TNamed.h"
8 #include "TEnv.h"
9 #include "KVString.h"
10 
11 typedef const char* cstring;
12 
89 class KVNamedParameter : public TNamed {
90 
91  friend class KVNameValueList;
92 
93  enum {
94  kIsString = BIT(14),
95  kIsDouble = BIT(15),
96  kIsInt = BIT(16),
97  kIsBool = BIT(17)
98  };
99  template <typename T>
100  struct typecode {};
101 
102  enum {
103  kBitMask = 0x0003c000
104  };
105  void ResetBits()
106  {
108  }
109 
110  Int_t GetType() const
111  {
113  return TestBits(kBitMask);
114  }
115 
116  void SetType(UInt_t f)
117  {
118  ResetBits();
119  SetBit(f);
120  }
121 
122 protected:
124 
125 public:
127  KVNamedParameter(const char*);
128  KVNamedParameter(const char*, const char*);
129  KVNamedParameter(const char*, Double_t);
130  KVNamedParameter(const char*, Int_t);
131  KVNamedParameter(const char*, Bool_t);
132  KVNamedParameter(const char*, const KVNamedParameter&);
133  virtual ~KVNamedParameter();
134 
135  void Set(const char*, const char*);
136  void Set(const char*, Double_t);
137  void Set(const char*, Int_t);
138  void Set(const char*, Bool_t);
139  void Set(const char*, const KVNamedParameter&);
140  void Set(const char*);
141  void Set(Double_t);
142  void Set(Int_t);
143  void Set(Bool_t);
145  void Set(TEnv*, const TString& p = "");
146 
147  const Char_t* GetString() const;
148  TString GetTString() const;
149  Double_t GetDouble() const;
150  Int_t GetInt() const;
151  Bool_t GetBool() const;
152 
153  template <typename T>
154  T Get() const
155  {
157  T a;
158  a.very_unlikely_method_name();
159  }
160  template <typename T>
161  static T DefaultValue();
162  virtual void Clear(Option_t* = "");
163 
164  template <typename T>
165  Bool_t Is() const;
166  Bool_t IsString() const
167  {
168  return GetType() == kIsString;
169  }
170  Bool_t IsDouble() const
171  {
172  return GetType() == kIsDouble;
173  }
174  Bool_t IsInt() const
175  {
176  return GetType() == kIsInt;
177  }
178  Bool_t IsBool() const
179  {
180  return GetType() == kIsBool;
181  }
182  Bool_t IsNumber() const
183  {
184  return (IsDouble() || IsInt());
185  }
186 
187  Bool_t IsEqual(const TObject* obj) const;
188  Bool_t operator== (const KVNamedParameter&) const;
189  Bool_t HasSameValueAs(const KVNamedParameter&) const;
190  virtual void Print(Option_t* opt = "") const;
191  virtual void ls(Option_t* opt = "") const;
192 
193  Int_t Compare(const TObject* obj) const;
194  void WriteToEnv(TEnv*, const TString& p = "");
195 
196  const Char_t* GetSQLType() const;
197  void Add(const KVNamedParameter& p);
198 
199  ClassDef(KVNamedParameter, 1) //A generic parameter with a name and a value
200 };
201 
202 template<> inline int KVNamedParameter::Get<int>() const
203 {
204  return GetInt();
205 }
206 template<> inline double KVNamedParameter::Get<double>() const
207 {
208  return GetDouble();
209 }
210 template<> inline bool KVNamedParameter::Get<bool>() const
211 {
212  return GetBool();
213 }
214 template<> inline KVString KVNamedParameter::Get<KVString>() const
215 {
216  return GetTString();
217 }
218 template<> inline TString KVNamedParameter::Get<TString>() const
219 {
220  return GetTString();
221 }
222 template<> inline cstring KVNamedParameter::Get<cstring>() const
223 {
224  return GetString();
225 }
226 template<> inline std::string KVNamedParameter::Get<std::string>() const
227 {
228  return std::string(GetString());
229 }
230 template<> inline int KVNamedParameter::DefaultValue<int>()
231 {
232  return -1;
233 }
234 template<> inline double KVNamedParameter::DefaultValue<double>()
235 {
236  return -1.0;
237 }
238 template<> inline bool KVNamedParameter::DefaultValue<bool>()
239 {
240  return false;
241 }
242 template<> inline TString KVNamedParameter::DefaultValue<TString>()
243 {
244  return "-1";
245 }
246 template<> inline KVString KVNamedParameter::DefaultValue<KVString>()
247 {
248  return "-1";
249 }
250 template<> inline cstring KVNamedParameter::DefaultValue<cstring>()
251 {
252  return "-1";
253 }
254 template<> inline std::string KVNamedParameter::DefaultValue<std::string>()
255 {
256  return "-1";
257 }
258 #ifndef __CINT__
259 template<> struct KVNamedParameter::typecode<int> {
260  static const int VALUE = KVNamedParameter::kIsInt;
261 };
262 template<> struct KVNamedParameter::typecode<double> {
263  static const int VALUE = KVNamedParameter::kIsDouble;
264 };
265 template<> struct KVNamedParameter::typecode<bool> {
266  static const int VALUE = KVNamedParameter::kIsBool;
267 };
268 template<> struct KVNamedParameter::typecode<std::string> {
269  static const int VALUE = KVNamedParameter::kIsString;
270 };
272  static const int VALUE = KVNamedParameter::kIsString;
273 };
275  static const int VALUE = KVNamedParameter::kIsString;
276 };
278  static const int VALUE = KVNamedParameter::kIsString;
279 };
280 #endif
281 template <typename T>
283 {
284  return GetType() == typecode<T>::VALUE;
285 }
286 #endif
287 
int Int_t
unsigned int UInt_t
double
const char * cstring
#define f(i)
char Char_t
bool Bool_t
double Double_t
const char Option_t
#define ClassDef(name, id)
#define BIT(n)
Handles lists of named parameters with different types, a list of KVNamedParameter objects.
A generic named parameter storing values of different types.
Bool_t IsEqual(const TObject *obj) const
Int_t GetType() const
Bool_t HasSameValueAs(const KVNamedParameter &) const
Bool_t IsDouble() const
const Char_t * GetString() const
void SetType(UInt_t f)
KVNamedParameter()
Default constructor.
void Set(const char *, const char *)
Int_t GetInt() const
Bool_t IsInt() const
virtual void Print(Option_t *opt="") const
Bool_t IsBool() const
static T DefaultValue()
void Add(const KVNamedParameter &p)
Bool_t operator==(const KVNamedParameter &) const
Bool_t IsString() const
const Char_t * GetSQLType() const
Double_t GetDouble() const
virtual void Clear(Option_t *="")
Removes the name and any assigned value.
virtual void ls(Option_t *opt="") const
Int_t Compare(const TObject *obj) const
Compares numerical parameters for sorting lists (such as KVNameValueList)
void WriteToEnv(TEnv *, const TString &p="")
Write parameter in TEnv, using optional prefix p as "p.[name]".
Double_t fNumber
used to store numerical (integer or floating-point) values
TString GetTString() const
Bool_t IsNumber() const
Bool_t Is() const
virtual ~KVNamedParameter()
Destructor.
Bool_t GetBool() const
Extension of ROOT TString class which allows backwards compatibility with ROOT v3....
Definition: KVString.h:72
void SetBit(UInt_t f)
Int_t TestBits(UInt_t f) const
void ResetBit(UInt_t f)
double T(double x)
auto * a