KaliVeda
Toolkit for HIC analysis
KVNameValueList.h
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 
116 class KVNameValueList : public TNamed {
117 protected:
120 
121 public:
122  KVNameValueList();
123  KVNameValueList(std::initializer_list<KVNamedParameter>);
124  KVNameValueList(const Char_t* name, const Char_t* title = "");
126  virtual ~KVNameValueList();
128 
129  class Iterator {
130  public:
131  typedef std::forward_iterator_tag iterator_category;
133  typedef std::ptrdiff_t difference_type;
136  private:
137  TIter fIter;// iterator over hash list
139  {
141  return reinterpret_cast<KVNamedParameter*>(*fIter);
142  }
143 
144  public:
146  : fIter(static_cast<TIterator*>(nullptr))
147  {}
148  Iterator(const Iterator& other)
149  : fIter(other.fIter)
150  {}
152  : fIter(N->GetList())
153  {
154  fIter.Begin();
155  }
157  : fIter(N.GetList())
158  {
159  fIter.Begin();
160  }
162  {
164 
165  return *(current());
166  }
167  Bool_t operator!= (const Iterator& it) const
168  {
170  return current() != it.current();
171  }
172  Bool_t operator== (const Iterator& it) const
173  {
175  return current() == it.current();
176  }
178  {
180  ++fIter;
181  return *this;
182  }
184  {
187  Iterator tmp(*this);
188  operator++();
189  return tmp;
190  }
192  {
194  if (this != &rhs) { // check self-assignment based on address of object
195  fIter = rhs.fIter;
196  }
197  return *this;
198  }
199  static Iterator End()
200  {
201  return Iterator();
202  }
203  virtual ~Iterator() {}
204 
205  ClassDef(Iterator, 0) //Iterator for KVNameValueList
206  };
207  Iterator begin() const
208  {
210  return Iterator(this);
211  }
212  Iterator end() const
213  {
215  return Iterator::End();
216  }
217 
218  bool Set(const KVString&);
219  KVString Get() const;
220 
221  KVHashList* GetList() const;
222 
223  void Clear(Option_t* opt = "") override;
224  virtual void ClearSelection(TRegexp&);
225  void Print(Option_t* opt = "") const override;
226  TString List(Option_t* opt = "") const;
227  void ls(Option_t* opt = "") const override;
228  void SetOwner(Bool_t enable = kTRUE);
229  Bool_t IsOwner() const;
230 
231  void Copy(TObject& nvl) const override;
232  Int_t Compare(const TObject* nvl) const override;
233 
234  template<typename value_type>
235  void SetValue(const Char_t* name, value_type value)
236  {
241  par ? par->Set(name, value) : fList.Add(new KVNamedParameter(name, value));
242  }
243  void SetValue(const KVNamedParameter&);
244  void SetValue64bit(const Char_t* name, ULong64_t);
245  ULong64_t GetValue64bit(const Char_t* name) const;
246  Bool_t HasValue64bit(const Char_t* name) const;
247 
248  template <typename value_type>
249  void SetValueAt(const Char_t* name, value_type value, Int_t idx)
250  {
257  if (par) {
258  par->Set(value);
259  if (fList.IndexOf(par) != idx) {
260  fList.GetCollection()->Remove(par);
261  fList.AddAt(par, idx);
262  }
263  }
264  else fList.AddAt(new KVNamedParameter(name, value), idx);
265  }
266 
267  template <typename value_type>
268  void SetFirstValue(const Char_t* name, value_type value)
269  {
276  if (par) {
277  par->Set(value);
278  if (fList.First() != par) {
279  fList.GetCollection()->Remove(par);
280  fList.AddFirst(par);
281  }
282  }
284  }
285 
286  template <typename value_type>
287  void SetLastValue(const Char_t* name, value_type value)
288  {
295  if (par) {
296  par->Set(value);
297  if (fList.Last() != par) {
298  fList.GetCollection()->Remove(par);
299  fList.AddLast(par);
300  }
301  }
303  }
304 
305  template <typename value_type>
306  void IncrementValue(const Char_t* name, value_type value)
307  {
313  }
314 
315  template <typename value_type>
316  Bool_t IsValue(const Char_t* name, value_type value) const
317  {
320  if (par) {
322  return (*par) == tmp;
323  }
324  return kFALSE;
325  }
326 
327  KVNamedParameter* FindParameter(const Char_t* name) const;
328  KVNamedParameter* GetParameter(Int_t idx) const;
329  void RemoveParameter(const Char_t* name);
330  Bool_t HasParameter(const Char_t* name) const;
331  template <typename value_type>
332  Bool_t HasParameter(const Char_t* name) const
333  {
335 
337  return (p && p->Is<value_type>());
338  }
339  Bool_t HasIntParameter(const Char_t* name) const
340  {
347  return HasParameter<int>(name);
348  }
349  Bool_t HasBoolParameter(const Char_t* name) const
350  {
351  return HasParameter<bool>(name);
352  }
353  Bool_t HasDoubleParameter(const Char_t* name) const
354  {
361  return HasParameter<double>(name);
362  }
363  Bool_t HasStringParameter(const Char_t* name) const
364  {
365  return HasParameter<TString>(name);
366  }
367  Bool_t HasNumericParameter(const Char_t* name) const
368  {
376  }
377  Int_t GetNameIndex(const Char_t* name) const;
378  const Char_t* GetNameAt(Int_t idx) const;
379  Int_t GetNpar() const;
381  {
382  return GetNpar();
383  }
384  Bool_t IsEmpty() const
385  {
386  return GetNpar() == 0;
387  }
388 
389  template <typename value_type>
390  value_type GetValue(const Char_t* name) const
391  {
395 
397  return (par ? par->Get<value_type>() : KVNamedParameter::DefaultValue<value_type>());
398  }
399 
400  Int_t GetIntValue(const Char_t* name) const
401  {
402  return GetValue<int>(name);
403  }
404  Bool_t GetBoolValue(const Char_t* name) const
405  {
406  return GetValue<bool>(name);
407  }
408  Double_t GetDoubleValue(const Char_t* name) const
409  {
410  return GetValue<double>(name);
411  }
412  const Char_t* GetStringValue(const Char_t* name) const
413  {
414  return GetValue<cstring>(name);
415  }
416  TString GetTStringValue(const Char_t* name) const;
417 
418  template <typename value_type>
419  value_type GetValue(Int_t idx) const
420  {
424  KVNamedParameter* par = GetParameter(idx);
425  return (par ? par->Get<value_type>() : KVNamedParameter::DefaultValue<value_type>());
426  }
427 
429  {
430  return GetValue<int>(idx);
431  }
433  {
434  return GetValue<bool>(idx);
435  }
437  {
438  return GetValue<double>(idx);
439  }
440  const Char_t* GetStringValue(Int_t idx) const
441  {
442  return GetValue<cstring>(idx);
443  }
444  TString GetTStringValue(Int_t idx) const;
445 
446  virtual void ReadEnvFile(const Char_t* filename);
447  virtual void ReadEnv(const TEnv&);
448  virtual KVEnv* ProduceEnvFile();
449  virtual void WriteEnvFile(const Char_t* filename);
450 
451  void Sort(Bool_t order = kSortAscending)
452  {
455  fList.Sort(order);
456  }
457 
458  void Concatenate(const KVNameValueList& nvl);
459 
460  void WriteClass(const Char_t* classname, const Char_t* classdesc, const Char_t* base_class = "");
461 
462  void SetIgnoreBool(Bool_t ignore = kTRUE)
463  {
468  fIgnoreBool = ignore;
469  }
470  void SetFromEnv(TEnv* tenv, const TString& prefix = "");
471  void WriteToEnv(TEnv* tenv, const TString& prefix = "");
472  void Merge(const KVNameValueList&);
473  void AddValue(const KVNamedParameter& p);
474 
475  ClassDefOverride(KVNameValueList, 4) //A general-purpose list of parameters
476 };
477 #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]
Extension of TEnv to allow the writing of comments in the file.
Definition: KVEnv.h:17
Extended version of ROOT THashList.
Definition: KVHashList.h:29
void Sort(Bool_t order=kSortAscending)
Definition: KVHashList.h:44
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.
KVNamedParameter * GetParameter(Int_t idx) const
Iterator begin() const
void Copy(TObject &nvl) const override
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)
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
Bool_t HasStringParameter(const Char_t *name) const
virtual void ReadEnv(const TEnv &)
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
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)
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
Int_t Compare(const TObject *nvl) const override
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 Clear(Option_t *opt="") override
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
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
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
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)
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