KaliVeda
Toolkit for HIC analysis
KVNameValueList.h
1 
4 #ifndef __KVNAMEVALUELIST_H
5 #define __KVNAMEVALUELIST_H
6 #include "KVHashList.h"
7 #include "TNamed.h"
8 #include "TRegexp.h"
9 #include "KVNamedParameter.h"
10 class KVEnv;
11 
115 class KVNameValueList : public TNamed {
116 protected:
117  KVHashList fList;
118  Bool_t fIgnoreBool = kFALSE; //do not convert "yes", "false", "on", etc. in TEnv file to boolean
119 
120 public:
121  KVNameValueList();
122  KVNameValueList(std::initializer_list<KVNamedParameter>);
123  KVNameValueList(const Char_t* name, const Char_t* title = "");
126 
129 
130  class Iterator {
131  public:
132  typedef std::forward_iterator_tag iterator_category;
134  typedef std::ptrdiff_t difference_type;
137  private:
138  TIter fIter;// iterator over hash list
139  KVNamedParameter* current() const
140  {
142  return reinterpret_cast<KVNamedParameter*>(*fIter);
143  }
144 
145  public:
147  : fIter(static_cast<TIterator*>(nullptr))
148  {}
149  Iterator(const Iterator& other)
150  : fIter(other.fIter)
151  {}
153  : fIter(N->GetList())
154  {
155  fIter.Begin();
156  }
158  : fIter(N.GetList())
159  {
160  fIter.Begin();
161  }
163  {
165 
166  return *(current());
167  }
168  Bool_t operator!= (const Iterator& it) const
169  {
171  return current() != it.current();
172  }
173  Bool_t operator== (const Iterator& it) const
174  {
176  return current() == it.current();
177  }
179  {
181  ++fIter;
182  return *this;
183  }
185  {
188  Iterator tmp(*this);
189  operator++();
190  return tmp;
191  }
193  {
195  if (this != &rhs) { // check self-assignment based on address of object
196  fIter = rhs.fIter;
197  }
198  return *this;
199  }
200  static Iterator End()
201  {
202  return Iterator();
203  }
204  virtual ~Iterator() {}
205 
206  ClassDef(Iterator, 0) //Iterator for KVNameValueList
207  };
208  Iterator begin() const
209  {
211  return Iterator(this);
212  }
213  Iterator end() const
214  {
216  return Iterator::End();
217  }
218 
219  bool Set(const KVString&);
220  KVString Get() const;
221 
222  KVHashList* GetList() const;
223 
224  void Clear(Option_t* opt = "") override;
225  virtual void ClearSelection(const TRegexp&);
226  void Print(Option_t* opt = "") const override;
227  TString List(Option_t* opt = "") const;
228  void ls(Option_t* opt = "") const override;
229 
230  void Copy(TObject& nvl) const override;
231  Int_t Compare(const TObject* nvl) const override;
232 
233  template<typename value_type>
234  void SetValue(const Char_t* name, value_type value)
235  {
240  par ? par->Set(name, value) : fList.Add(new KVNamedParameter(name, value));
241  }
242  void SetValue(const KVNamedParameter&);
243  void SetValue64bit(const Char_t* name, ULong64_t);
244  ULong64_t GetValue64bit(const Char_t* name) const;
245  Bool_t HasValue64bit(const Char_t* name) const;
246 
247  template <typename value_type>
248  void SetValueAt(const Char_t* name, value_type value, Int_t idx)
249  {
256  if (par) {
257  par->Set(value);
258  if (fList.IndexOf(par) != idx) {
259  fList.GetCollection()->Remove(par);
260  fList.AddAt(par, idx);
261  }
262  }
263  else fList.AddAt(new KVNamedParameter(name, value), idx);
264  }
265 
266  template <typename value_type>
267  void SetFirstValue(const Char_t* name, value_type value)
268  {
275  if (par) {
276  par->Set(value);
277  if (fList.First() != par) {
278  fList.GetCollection()->Remove(par);
279  fList.AddFirst(par);
280  }
281  }
282  else fList.AddFirst(new KVNamedParameter(name, value));
283  }
284 
285  template <typename value_type>
286  void SetLastValue(const Char_t* name, value_type value)
287  {
294  if (par) {
295  par->Set(value);
296  if (fList.Last() != par) {
297  fList.GetCollection()->Remove(par);
298  fList.AddLast(par);
299  }
300  }
301  else fList.AddLast(new KVNamedParameter(name, value));
302  }
303 
304  template <typename value_type>
305  void IncrementValue(const Char_t* name, value_type value)
306  {
311  par ? par->Add(KVNamedParameter(name, value)) : fList.Add(new KVNamedParameter(name, value));
312  }
313 
314  template <typename value_type>
315  Bool_t IsValue(const Char_t* name, value_type value) const
316  {
319  if (par) {
321  return (*par) == tmp;
322  }
323  return kFALSE;
324  }
325 
326  KVNamedParameter* FindParameter(const Char_t* name) const;
327  KVNamedParameter* GetParameter(Int_t idx) const;
328  void RemoveParameter(const Char_t* name);
329  Bool_t HasParameter(const Char_t* name) const;
330  template <typename value_type>
331  Bool_t HasParameter(const Char_t* name) const
332  {
334 
336  return (p && p->Is<value_type>());
337  }
338  Bool_t HasIntParameter(const Char_t* name) const
339  {
346  return HasParameter<int>(name);
347  }
348  Bool_t HasBoolParameter(const Char_t* name) const
349  {
350  return HasParameter<bool>(name);
351  }
352  Bool_t HasDoubleParameter(const Char_t* name) const
353  {
360  return HasParameter<double>(name);
361  }
362  Bool_t HasStringParameter(const Char_t* name) const
363  {
364  return HasParameter<TString>(name);
365  }
366  Bool_t HasNumericParameter(const Char_t* name) const
367  {
375  }
376  Int_t GetNameIndex(const Char_t* name) const;
377  const Char_t* GetNameAt(Int_t idx) const;
378  Int_t GetNpar() const;
380  {
381  return GetNpar();
382  }
383  Bool_t IsEmpty() const
384  {
385  return GetNpar() == 0;
386  }
387 
388  KVNamedParameter& operator[](const TString& name) const
389  {
394  if (!par)
395  throw std::runtime_error(Form("KVNameValueList::operator[](const TString&): no parameter with name '%s' in list", name.Data()));
396  return *par;
397  }
398  template <typename value_type>
399  value_type GetValue(const Char_t* name) const
400  {
404 
406  return (par ? par->Get<value_type>() : KVNamedParameter::DefaultValue<value_type>());
407  }
408 
409  Int_t GetIntValue(const Char_t* name) const
410  {
411  return GetValue<int>(name);
412  }
413  Bool_t GetBoolValue(const Char_t* name) const
414  {
415  return GetValue<bool>(name);
416  }
417  Double_t GetDoubleValue(const Char_t* name) const
418  {
419  return GetValue<double>(name);
420  }
421  const Char_t* GetStringValue(const Char_t* name) const
422  {
423  return GetValue<cstring>(name);
424  }
425  TString GetTStringValue(const Char_t* name) const;
426 
427  template <typename value_type>
428  value_type GetValue(Int_t idx) const
429  {
433  KVNamedParameter* par = GetParameter(idx);
434  return (par ? par->Get<value_type>() : KVNamedParameter::DefaultValue<value_type>());
435  }
436 
438  {
439  return GetValue<int>(idx);
440  }
442  {
443  return GetValue<bool>(idx);
444  }
446  {
447  return GetValue<double>(idx);
448  }
449  const Char_t* GetStringValue(Int_t idx) const
450  {
451  return GetValue<cstring>(idx);
452  }
453  TString GetTStringValue(Int_t idx) const;
454 
455  virtual void ReadEnvFile(const Char_t* filename);
456  void ReadEnv(const TEnv&);
457  std::unique_ptr<KVEnv> ProduceEnvFile();
458  virtual void WriteEnvFile(const Char_t* filename);
459 
460  void Sort(Bool_t order = kSortAscending)
461  {
464  fList.Sort(order);
465  }
466 
467  void Concatenate(const KVNameValueList& nvl);
468 
469  void WriteClass(const Char_t* classname, const Char_t* classdesc, const Char_t* base_class = "");
470 
471  void SetIgnoreBool(Bool_t ignore = kTRUE)
472  {
477  fIgnoreBool = ignore;
478  }
479  void SetFromEnv(TEnv* tenv, const TString& prefix = "");
480  void WriteToEnv(TEnv* tenv, const TString& prefix = "");
481  void Merge(const KVNameValueList&);
482  void AddValue(const KVNamedParameter& p);
483 
484  TString AsSQLSelection() const;
485 
486  ClassDefOverride(KVNameValueList, 4) //A general-purpose list of parameters
487 };
488 #endif
int Int_t
bool Bool_t
char Char_t
constexpr Bool_t kFALSE
double Double_t
const char Option_t
#define ClassDef(name, id)
#define ClassDefOverride(name, id)
#define N
winID h TVirtualViewer3D TVirtualGLPainter p
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void value
char name[80]
char * Form(const char *fmt,...)
Extension of TEnv to allow the writing of comments in the file.
Definition: KVEnv.h:18
Extended version of ROOT THashList.
Definition: KVHashList.h:29
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++()
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.
KVNamedParameter * GetParameter(Int_t idx) const
return the parameter object with index idx
Iterator begin() const
void Copy(TObject &nvl) const override
Int_t GetIntValue(const Char_t *name) const
KVNameValueList & operator=(KVNameValueList &&)=default
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)
std::unique_ptr< KVEnv > ProduceEnvFile()
Put all name-value pairs in this list as a TEnv format.
Bool_t HasNumericParameter(const Char_t *name) const
void RemoveParameter(const Char_t *name)
void SetValue64bit(const Char_t *name, ULong64_t)
void SetFromEnv(TEnv *tenv, const TString &prefix="")
void IncrementValue(const Char_t *name, value_type value)
const Char_t * GetNameAt(Int_t idx) const
void ls(Option_t *opt="") const override
Int_t GetNpar() const
return the number of stored parameters
Bool_t HasStringParameter(const Char_t *name) const
void ReadEnv(const TEnv &)
Bool_t IsEmpty() const
virtual void ClearSelection(const TRegexp &)
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
TString List(Option_t *opt="") const
void SetValueAt(const Char_t *name, value_type value, Int_t idx)
void Concatenate(const KVNameValueList &nvl)
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
KVNamedParameter * FindParameter(const Char_t *name) const
return the parameter object with the asking name
Int_t Compare(const TObject *nvl) const override
KVNameValueList & operator=(const KVNameValueList &)
Bool_t HasIntParameter(const Char_t *name) const
void Sort(Bool_t order=kSortAscending)
value_type GetValue(Int_t idx) const
void Clear(Option_t *opt="") override
KVNamedParameter & operator[](const TString &name) const
Bool_t GetBoolValue(Int_t idx) const
Double_t GetDoubleValue(Int_t idx) const
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
KVString Get() 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
TString AsSQLSelection() 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 Print(Option_t *opt="") const override
void AddValue(const KVNamedParameter &p)
void SetIgnoreBool(Bool_t ignore=kTRUE)
KVHashList * GetList() const
TString GetTStringValue(const Char_t *name) const
KVNameValueList(KVNameValueList &&)=default
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)
TObject * First() const override
void Add(TObject *obj) override
void AddLast(TObject *obj) override
TObject * Last() const override
TSeqCollection * GetCollection() const
void AddAt(TObject *obj, Int_t idx) override
void AddFirst(TObject *obj) override
Extension of ROOT TString class which allows backwards compatibility with ROOT v3....
Definition: KVString.h:73
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