KaliVeda  1.12/06
Heavy-Ion Analysis Toolkit
KVNameValueList.h
Go to the documentation of this file.
1 
4 #ifndef __KVNAMEVALUELIST_H
5 #define __KVNAMEVALUELIST_H
6 
7 #include "KVHashList.h"
8 #include "TNamed.h"
9 #include "TRegexp.h"
10 #include "KVNamedParameter.h"
11 class KVEnv;
12 
115 class KVNameValueList : public TNamed {
116 protected:
119 
120 public:
121  KVNameValueList();
122  KVNameValueList(std::initializer_list<KVNamedParameter>);
123  KVNameValueList(const Char_t* name, const Char_t* title = "");
125  virtual ~KVNameValueList();
127 
128  class Iterator {
129  public:
130  typedef std::forward_iterator_tag iterator_category;
132  typedef std::ptrdiff_t difference_type;
135  private:
136  TIter fIter;// iterator over hash list
138  {
140  return reinterpret_cast<KVNamedParameter*>(*fIter);
141  }
142 
143  public:
145  : fIter(static_cast<TIterator*>(nullptr))
146  {}
147  Iterator(const Iterator& other)
148  : fIter(other.fIter)
149  {}
151  : fIter(N->GetList())
152  {
153  fIter.Begin();
154  }
156  : fIter(N.GetList())
157  {
158  fIter.Begin();
159  }
161  {
163 
164  return *(current());
165  }
166  Bool_t operator!= (const Iterator& it) const
167  {
169  return current() != it.current();
170  }
171  Bool_t operator== (const Iterator& it) const
172  {
174  return current() == it.current();
175  }
177  {
179  ++fIter;
180  return *this;
181  }
183  {
186  Iterator tmp(*this);
187  operator++();
188  return tmp;
189  }
191  {
193  if (this != &rhs) { // check self-assignment based on address of object
194  fIter = rhs.fIter;
195  }
196  return *this;
197  }
198  static Iterator End()
199  {
200  return Iterator();
201  }
202  virtual ~Iterator() {}
203 
204  ClassDef(Iterator, 0) //Iterator for KVNameValueList
205  };
206  Iterator begin() const
207  {
209  return Iterator(this);
210  }
211  Iterator end() const
212  {
214  return Iterator::End();
215  }
216 
217  bool Set(const KVString&);
218 
219  KVHashList* GetList() const;
220 
221  virtual void Clear(Option_t* opt = "");
222  virtual void ClearSelection(TRegexp&);
223  virtual void Print(Option_t* opt = "") const;
224  virtual void ls(Option_t* opt = "") const;
225  void SetOwner(Bool_t enable = kTRUE);
226  Bool_t IsOwner() const;
227 
228  void Copy(TObject& nvl) const;
229  Int_t Compare(const TObject* nvl) const;
230 
231  template<typename value_type>
232  void SetValue(const Char_t* name, value_type value)
233  {
237  KVNamedParameter* par = FindParameter(name);
238  par ? par->Set(name, value) : fList.Add(new KVNamedParameter(name, value));
239  }
240  void SetValue(const KVNamedParameter&);
241  void SetValue64bit(const Char_t* name, ULong64_t);
242  ULong64_t GetValue64bit(const Char_t* name) const;
243  Bool_t HasValue64bit(const Char_t* name) const;
244 
245  template <typename value_type>
246  void SetValueAt(const Char_t* name, value_type value, Int_t idx)
247  {
253  KVNamedParameter* par = FindParameter(name);
254  if (par) {
255  par->Set(value);
256  if (fList.IndexOf(par) != idx) {
257  fList.GetCollection()->Remove(par);
258  fList.AddAt(par, idx);
259  }
260  }
261  else fList.AddAt(new KVNamedParameter(name, value), idx);
262  }
263 
264  template <typename value_type>
265  void SetFirstValue(const Char_t* name, value_type value)
266  {
272  KVNamedParameter* par = FindParameter(name);
273  if (par) {
274  par->Set(value);
275  if (fList.First() != par) {
276  fList.GetCollection()->Remove(par);
277  fList.AddFirst(par);
278  }
279  }
280  else fList.AddFirst(new KVNamedParameter(name, value));
281  }
282 
283  template <typename value_type>
284  void SetLastValue(const Char_t* name, value_type value)
285  {
291  KVNamedParameter* par = FindParameter(name);
292  if (par) {
293  par->Set(value);
294  if (fList.Last() != par) {
295  fList.GetCollection()->Remove(par);
296  fList.AddLast(par);
297  }
298  }
299  else fList.AddLast(new KVNamedParameter(name, value));
300  }
301 
302  template <typename value_type>
303  void IncrementValue(const Char_t* name, value_type value)
304  {
308  KVNamedParameter* par = FindParameter(name);
309  par ? par->Add(KVNamedParameter(name, value)) : fList.Add(new KVNamedParameter(name, value));
310  }
311 
312  template <typename value_type>
313  Bool_t IsValue(const Char_t* name, value_type value) const
314  {
316  KVNamedParameter* par = FindParameter(name);
317  if (par) {
318  KVNamedParameter tmp(name, value);
319  return (*par) == tmp;
320  }
321  return kFALSE;
322  }
323 
324  KVNamedParameter* FindParameter(const Char_t* name) const;
325  KVNamedParameter* GetParameter(Int_t idx) const;
326  void RemoveParameter(const Char_t* name);
327  Bool_t HasParameter(const Char_t* name) const;
328  template <typename value_type>
329  Bool_t HasParameter(const Char_t* name) const
330  {
332 
333  KVNamedParameter* p = FindParameter(name);
334  return (p && p->Is<value_type>());
335  }
336  Bool_t HasIntParameter(const Char_t* name) const
337  {
344  return HasParameter<int>(name);
345  }
346  Bool_t HasBoolParameter(const Char_t* name) const
347  {
348  return HasParameter<bool>(name);
349  }
350  Bool_t HasDoubleParameter(const Char_t* name) const
351  {
358  return HasParameter<double>(name);
359  }
360  Bool_t HasStringParameter(const Char_t* name) const
361  {
362  return HasParameter<TString>(name);
363  }
364  Bool_t HasNumericParameter(const Char_t* name) const
365  {
372  return (HasIntParameter(name) || HasDoubleParameter(name)) || (HasStringParameter(name) && GetTStringValue(name).IsFloat());
373  }
374  Int_t GetNameIndex(const Char_t* name) const;
375  const Char_t* GetNameAt(Int_t idx) const;
376  Int_t GetNpar() const;
378  {
379  return GetNpar();
380  }
381  Bool_t IsEmpty() const
382  {
383  return GetNpar() == 0;
384  }
385 
386  template <typename value_type>
387  value_type GetValue(const Char_t* name) const
388  {
392 
393  KVNamedParameter* par = FindParameter(name);
394  return (par ? par->Get<value_type>() : KVNamedParameter::DefaultValue<value_type>());
395  }
396 
397  Int_t GetIntValue(const Char_t* name) const
398  {
399  return GetValue<int>(name);
400  }
401  Bool_t GetBoolValue(const Char_t* name) const
402  {
403  return GetValue<bool>(name);
404  }
405  Double_t GetDoubleValue(const Char_t* name) const
406  {
407  return GetValue<double>(name);
408  }
409  const Char_t* GetStringValue(const Char_t* name) const
410  {
411  return GetValue<cstring>(name);
412  }
413  TString GetTStringValue(const Char_t* name) const;
414 
415  template <typename value_type>
416  value_type GetValue(Int_t idx) const
417  {
421  KVNamedParameter* par = GetParameter(idx);
422  return (par ? par->Get<value_type>() : KVNamedParameter::DefaultValue<value_type>());
423  }
424 
426  {
427  return GetValue<int>(idx);
428  }
430  {
431  return GetValue<bool>(idx);
432  }
434  {
435  return GetValue<double>(idx);
436  }
437  const Char_t* GetStringValue(Int_t idx) const
438  {
439  return GetValue<cstring>(idx);
440  }
441  TString GetTStringValue(Int_t idx) const;
442 
443  virtual void ReadEnvFile(const Char_t* filename);
444  virtual KVEnv* ProduceEnvFile();
445  virtual void WriteEnvFile(const Char_t* filename);
446 
447  void Sort(Bool_t order = kSortAscending)
448  {
451  fList.Sort(order);
452  }
453 
455 
456  void WriteClass(const Char_t* classname, const Char_t* classdesc, const Char_t* base_class = "");
457 
458  void SetIgnoreBool(Bool_t ignore = kTRUE)
459  {
464  fIgnoreBool = ignore;
465  }
466  void SetFromEnv(TEnv* tenv, const TString& prefix = "");
467  void WriteToEnv(TEnv* tenv, const TString& prefix = "");
468  void Merge(const KVNameValueList&);
469  void AddValue(const KVNamedParameter& p);
470 
471  ClassDef(KVNameValueList, 4) //A general-purpose list of parameters
472 };
473 #endif
int Int_t
char Char_t
const Bool_t kFALSE
bool Bool_t
double Double_t
const char Option_t
#define ClassDef(name, id)
#define N
Extension of TEnv to allow the writing of comments in the file.
Definition: KVEnv.h:16
Extended version of ROOT THashList.
Definition: KVHashList.h:28
void Sort(Bool_t order=kSortAscending)
Definition: KVHashList.h:43
std::forward_iterator_tag iterator_category
KVNamedParameter * pointer
Iterator(const Iterator &other)
KVNamedParameter & operator*() const
KVNamedParameter & reference
Iterator(const KVNameValueList *N)
Iterator(const KVNameValueList &N)
Bool_t operator==(const Iterator &it) const
Bool_t operator!=(const Iterator &it) const
const Iterator & operator++()
KVNamedParameter * current() const
Iterator & operator=(const Iterator &rhs)
std::ptrdiff_t difference_type
KVNamedParameter value_type
Handles lists of named parameters with different types, a list of KVNamedParameter objects.
virtual void Print(Option_t *opt="") const
KVNamedParameter * GetParameter(Int_t idx) const
return the parameter object with index idx
Iterator begin() const
virtual void ls(Option_t *opt="") const
Int_t GetIntValue(const Char_t *name) const
Double_t GetDoubleValue(const Char_t *name) const
Bool_t HasValue64bit(const Char_t *name) const
void SetValue(const Char_t *name, value_type value)
virtual ~KVNameValueList()
Destructor.
Bool_t fIgnoreBool
do not convert "yes", "false", "on", etc. in TEnv file to boolean
Bool_t IsOwner() const
Bool_t HasNumericParameter(const Char_t *name) const
void RemoveParameter(const Char_t *name)
Int_t Compare(const TObject *nvl) const
void SetValue64bit(const Char_t *name, ULong64_t)
void SetFromEnv(TEnv *tenv, const TString &prefix="")
void IncrementValue(const Char_t *name, value_type value)
virtual void Clear(Option_t *opt="")
const Char_t * GetNameAt(Int_t idx) const
Int_t GetNpar() const
return the number of stored parameters
Bool_t HasStringParameter(const Char_t *name) const
Bool_t IsEmpty() const
void SetFirstValue(const Char_t *name, value_type value)
virtual void ReadEnvFile(const Char_t *filename)
Bool_t IsValue(const Char_t *name, value_type value) const
Int_t GetEntries() const
void SetValueAt(const Char_t *name, value_type value, Int_t idx)
virtual void WriteEnvFile(const Char_t *filename)
Write all name-value pairs in this list as a TEnv format file.
Int_t GetNameIndex(const Char_t *name) const
void Merge(const KVNameValueList &)
Iterator end() const
KVNameValueList()
Default constructor.
KVNamedParameter * FindParameter(const Char_t *name) const
return the parameter object with the asking name
KVNameValueList operator+=(const KVNameValueList &nvl)
KVNameValueList & operator=(const KVNameValueList &)
KVHashList fList
list of KVNamedParameter objects
Bool_t HasIntParameter(const Char_t *name) const
void Sort(Bool_t order=kSortAscending)
value_type GetValue(Int_t idx) const
void SetOwner(Bool_t enable=kTRUE)
Bool_t GetBoolValue(Int_t idx) const
Double_t GetDoubleValue(Int_t idx) const
virtual KVEnv * ProduceEnvFile()
void WriteClass(const Char_t *classname, const Char_t *classdesc, const Char_t *base_class="")
Bool_t HasBoolParameter(const Char_t *name) const
Bool_t GetBoolValue(const Char_t *name) const
ULong64_t GetValue64bit(const Char_t *name) const
value_type GetValue(const Char_t *name) const
const Char_t * GetStringValue(Int_t idx) const
Int_t GetIntValue(Int_t idx) const
const Char_t * GetStringValue(const Char_t *name) const
Bool_t HasParameter(const Char_t *name) const
void SetLastValue(const Char_t *name, value_type value)
bool Set(const KVString &)
Bool_t HasDoubleParameter(const Char_t *name) const
Bool_t HasParameter(const Char_t *name) const
void AddValue(const KVNamedParameter &p)
void SetIgnoreBool(Bool_t ignore=kTRUE)
KVHashList * GetList() const
TString GetTStringValue(const Char_t *name) const
void Copy(TObject &nvl) const
virtual void ClearSelection(TRegexp &)
void WriteToEnv(TEnv *tenv, const TString &prefix="")
A generic named parameter storing values of different types.
void Set(const char *, const char *)
void Add(const KVNamedParameter &p)
Bool_t Is() const
virtual void AddLast(TObject *obj)
virtual TObject * Last() const
virtual TObject * First() const
TSeqCollection * GetCollection() const
virtual void Add(TObject *obj)
virtual void AddAt(TObject *obj, Int_t idx)
virtual void AddFirst(TObject *obj)
Extension of ROOT TString class which allows backwards compatibility with ROOT v3....
Definition: KVString.h:72
virtual TObject * Remove(TObject *obj)=0
TIter & Begin()
virtual Int_t IndexOf(const TObject *obj) const
Bool_t IsFloat() const
unsigned long long ULong64_t