AliPhysics  775474e (775474e)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Option.C
Go to the documentation of this file.
1 
11 #ifndef OPTION_C
12 #define OPTION_C
13 #include <TNamed.h>
14 #include <iomanip>
15 #ifndef __CINT__
16 # include <TString.h>
17 # include <TList.h>
18 # include <TObjArray.h>
19 # include <TObjString.h>
20 # include <TMath.h>
21 # include <iostream>
22 # include <iomanip>
23 # include <cstdarg>
24 # include <cstdio>
25 # include <sstream>
26 namespace {
27  template <typename T>
28  T& str2val(const char* str, T& v)
29  {
30  std::stringstream s(str);
31  if (str[0] == '0') {
32  s << std::oct;
33  if (str[1] == 'x' || str[1] == 'X')
34  s << std::hex;
35  }
36  s >> v;
37  return v;
38  }
39  template <>
40  bool& str2val(const char* str, bool& v)
41  {
42  if (str[0] == '1' ||
43  str[0] == 'y' || str[0] == 'Y' ||
44  str[0] == 't' || str[0] == 'T')
45  return (v=true);
46  if (str[0] == '0' ||
47  str[0] == 'n' || str[0] == 'N' ||
48  str[0] == 'f' || str[0] == 'F')
49  return (v=false);
50  std::stringstream s;
51  s >> v;
52  return v;
53  }
54 }
55 
56 #else
57 class TString;
58 class TList;
59 class TObjArray;
60 #endif
61 
62 
68 struct Option /* : public TNamed */
69 {
78  Option(const TString& name,
79  const TString& arg,
80  const TString& description,
81  const TString& value)
82  : fName(name), fDescription(description),
83  fValue(value), fArg(arg), fIsSet(false)
84  {}
90  Option(const Option& other)
91  : fName(other.fName),
93  fValue(other.fValue),
94  fArg(other.fArg),
95  fIsSet(other.fIsSet)
96  {}
104  Option& operator=(const Option& other)
105  {
106  if (&other == this) return *this;
107 
108  fName = other.fName;
109  fDescription = other.fDescription;
110  fValue = other.fValue;
111  fArg = other.fArg;
112  fIsSet = other.fIsSet;
113 
114  return *this;
115  }
121  void Set(const TString& val)
122  {
123  if (HasArg()) {
124  fIsSet = true;
125  fValue = val;
126  // Info("Set", "Setting option %s with arg %s to %s",
127  // fName.Data(), fArg.Data(), fValue.Data());
128  return;
129  }
130 
131  // Info("Set", "Setting option %s with no arg", fName.Data());
132  // Allow flags to get =true, =1, =false, =0 values
133  if (!val.IsNull()) {
134  fIsSet = str2val(val.Data(), fIsSet);
135  fValue = val;
136  }
137  else {
138  fIsSet = true;
139  fValue = "true";
140  }
141  }
145  void Set()
146  {
147  if (HasArg()) {
148  Error("Option::Set", "Option %s needs an argument", fName.Data());
149  return;
150  }
151  Set("true");
152  }
157  void Reset()
158  {
159  fIsSet = false;
160  if (!HasArg()) fValue = "false";
161  }
165  const TString& Get() const { return fValue; }
169  Bool_t IsSet() const { return fIsSet; }
173  Bool_t HasArg() const { return !fArg.IsNull(); }
177  Bool_t AsBool() const { return fIsSet; }
181  Int_t AsInt() const { Int_t i; return str2val(fValue.Data(), i); }
185  Long64_t AsLong() const { Long_t i; return str2val(fValue.Data(), i); }
189  Double_t AsDouble() const { Double_t d; return str2val(fValue.Data(),d); }
193  const char* AsString() const { return fValue.Data(); }
197  Int_t NameWidth() const { return fName.IsNull() ? 0 : fName.Length(); }
201  Int_t ArgWidth() const { return fArg.IsNull() ? 0 : fArg.Length(); }
208  void Help(std::ostream& o, Int_t w=-1) const
209  {
210  TString tmp(fName);
211  if (HasArg()) {
212  tmp.Append("=");
213  tmp.Append(fArg);
214  }
215  if (w <= 0) w = NameWidth() + ArgWidth() + 1;
216  std::ios::fmtflags oldf = o.setf(std::ios::left);
217  o << std::setw(w) << tmp << " " << fDescription << " [";
218  if (!HasArg()) o << (IsSet() ? "true" : "false");
219  else o << fValue;
220  o << "]" << std::endl;
221  o.setf(oldf);
222  }
229  void Show(std::ostream& o, Int_t w=-1) const
230  {
231  if (w <= 0) w = NameWidth();
232  std::ios::fmtflags oldf = o.setf(std::ios::left);
233  o << std::setw(w) << fName << ": ";
234  if (!HasArg()) o << (IsSet() ? "true" : "false");
235  else o << fValue;
236  o << std::endl;
237  o.setf(oldf);
238  }
245  void Store(std::ostream& o, bool quote=true) const
246  {
247  o << fName;
248  if (!HasArg()) return;
249  o << "=" << (quote ? "\"" : "") << fValue << (quote ? "\"" : "");
250  }
251  TString fName; // Name
252  TString fDescription; // Description
253  TString fValue; // Value
254  TString fArg; // Argument dummy
255  Bool_t fIsSet; // True if this option was set
256 
257  // ClassDef(Option,1) // Option
258 };
259 
263 struct OptionList
264 {
265  // Linked list element
266  struct Link
267  {
271  Link() : fPrev(0), fNext(0), fThis(0) {}
272  Link(Link* next, Option* opt)
273  : fPrev(next ? next->fPrev : 0), // Set previous
274  fNext(next), // Set next link
275  fThis(opt) // Set data
276  {
277  if (fPrev) fPrev->fNext = this; // Set forward link
278  if (fNext) fNext->fPrev = this; // Set previous link
279  }
280  ~Link() {
281  if (fPrev) fPrev->fNext = fNext;
282  if (fNext) fNext->fPrev = fPrev;
283  delete fThis;
284  }
285  Link(const Link& o)
286  : fPrev(o.fPrev),
287  fNext(o.fNext),
288  fThis(o.fThis)
289  {
290  }
291  Link& operator=(const Link& o)
292  {
293  if (&o == this) return *this;
294  fPrev = o.fPrev;
295  fNext = o.fNext;
296  fThis = o.fThis;
297  return *this;
298  }
299  };
303  OptionList() : fList(0), fDesc("") { }
309  OptionList(const OptionList& other)
310  : fList(0), fDesc(other.fDesc)
311  {
312  // fList.SetOwner();
313  // TIter next(&other.fList);
314  // Option* o = 0;
315  // while ((o = static_cast<Option*>(next())))
316  // fList.Add(new Option(*o));
317  Copy(other);
318  }
323 
327  void Delete()
328  {
329  Link* cur = fList;
330  while (cur) {
331  Link* tmp = cur->fNext;
332  delete cur;
333  cur = tmp;
334  // Remove(cur->fThis->fName);
335  // cur = tmp;
336  }
337  fList = 0;
338  }
347  {
348  if (&other == this) return *this;
349  Delete();
350  Copy(other);
351 
352  return *this;
353  }
359  void SetDescription(const TString& d) { fDesc = d; }
365  void Copy(const OptionList& other)
366  {
367  Delete();
368  const Link* ocur = other.fList;
369  Link* cur = fList;
370  Link* prev = fList;
371  while (ocur) {
372  cur = new Link;
373  cur->fThis = new Option(*(ocur->fThis));
374  cur->fNext = 0;
375  cur->fPrev = prev;
376  if (fList == 0) fList = cur;
377  if (prev) prev->fNext = cur;
378  prev = cur;
379  ocur = ocur->fNext;
380  }
381  }
382  void DebugLink(const Link* link) const
383  {
384  std::cout << "Link=" << link;
385  if (link) {
386  std::cout << " prev=" << link->fPrev
387  << " next=" << link->fNext
388  << " obj=" << link->fThis;
389  if (link->fThis)
390  std::cout << " name=" << link->fThis->fName;
391  }
392  std::cout <<std::endl;
393  }
401  Option* Find(const TString& name) const
402  {
403  const Link* cur = fList;
404  // DebugLink(cur);
405  while (cur && cur->fThis) {
406  if (name.EqualTo(cur->fThis->fName)) return cur->fThis;
407  cur = cur->fNext;
408  }
409  return 0;
410  }
421  Option* Add(const TString& name,
422  const TString& arg,
423  const TString& desc,
424  const TString& val="")
425  {
426  Option* o = Find(name);
427  if (o) {
428  Warning("OptionList::Add", "Option %s already registered", name.Data());
429  return o;
430  }
431  // Info("Add", "New option %s with arg %s (%s) and value %s",
432  // name.Data(), arg.Data(), desc.Data(), val.Data());
433  o = new Option(name, arg, desc, val);
434  Link* cur = fList;
435  if (!cur) {
436  cur = new Link;
437  cur->fThis = o;
438  cur->fNext = 0;
439  cur->fPrev = 0;
440  fList = cur;
441  }
442  else {
443  Link* n = 0;
444  Link* l = 0;
445  while (cur) {
446  if (cur->fThis->fName.CompareTo(name) < 0) {
447  l = cur;
448  cur = cur->fNext;
449  continue;
450  }
451  n = new Link(cur, o);
452  if (cur == fList) fList = n;
453  break;
454  }
455  if (!n) {
456  n = new Link;
457  l->fNext = n;
458  n->fPrev = l;
459  n->fNext = 0;
460  n->fThis = o;
461  }
462  }
463  return o;
464  }
473  Option* Add(const TString& name,
474  const TString& desc)
475  {
476  return Add(name, "", desc, "");
477  }
487  Option* Add(const TString& name,
488  const TString& desc,
489  Bool_t def)
490  {
491  Option* o = Add(name, "", desc, "");
492  if (o) o->Set(def ? "true" : "false");
493  return o;
494  }
506  Option* Add(const TString& name,
507  const TString& arg,
508  const TString& desc,
509  Int_t val,
510  Bool_t asHex=false)
511  {
512  if (asHex) {
513  UInt_t uval = val;
514  return Add(name, arg, desc, Form("0x%x", uval));
515  }
516  return Add(name, arg, desc, Form("%d", val));
517  }
529  Option* Add(const TString& name,
530  const TString& arg,
531  const TString& desc,
532  Long64_t val,
533  Bool_t asHex=false)
534  {
535  if (asHex) {
536  ULong64_t uval = val;
537  return Add(name, arg, desc, Form("0x%llx", uval));
538  }
539  return Add(name, arg, desc, Form("%lld", val));
540  }
551  Option* Add(const TString& name,
552  const TString& arg,
553  const TString& desc,
554  Double_t val)
555  {
556  return Add(name, arg, desc, Form("%lg", val));
557  }
558 
564  void Remove(const TString& name)
565  {
566  Link* cur = fList;
567  while (cur) {
568  if (!cur->fThis->fName.EqualTo(name)) {
569  cur = cur->fNext;
570  continue;
571  }
572  if (fList == cur) fList = cur->fNext;
573  delete cur;
574  break;
575  }
576  }
584  Bool_t Has(const TString& name) const
585  {
586  Option* o = Find(name);
587  return (o && o->IsSet());
588  }
596  const TString& Get(const TString& name) const
597  {
598  static TString null("");
599  Option* o = Find(name);
600  if (!o) return null;
601  return o->Get();
602  }
612  Bool_t GetF(const TString& name, const Char_t* format, ...) const
613  {
614  Option* o = Find(name);
615  if (!o) return false;
616 
617  va_list ap;
618  va_start(ap, format);
619  int ret = vsscanf(o->fValue.Data(), format, ap);
620  va_end(ap);
621 
622  return ret > 0;
623  }
631  Bool_t AsBool(const TString& name) const
632  {
633  Option* o = Find(name);
634  if (!o) return false;
635  return o->AsBool();
636  }
645  Int_t AsInt(const TString& name, Int_t def=0) const
646  {
647  Option* o = Find(name);
648  if (!o) return def;
649  return o->AsInt();
650  }
659  Long64_t AsLong(const TString& name, Long64_t def=0) const
660  {
661  Option* o = Find(name);
662  if (!o) return def;
663  return o->AsLong();
664  }
673  Double_t AsDouble(const TString& name, Double_t def=0) const
674  {
675  Option* o = Find(name);
676  if (!o) return def;
677  return o->AsDouble();
678  }
687  const char* AsString(const TString& name, const TString& def="") const
688  {
689  Option* o = Find(name);
690  if (!o) return def.Data();
691  return o->AsString();
692  }
701  const TString& AsTString(const TString& name, const TString& def="") const
702  {
703  Option* o = Find(name);
704  static TString ddef;
705  ddef = def;
706  if (!o) return ddef;
707  return o->Get();
708  }
715  void SetF(const TString& name, const Char_t* format, ...)
716  {
717  Option* o = Find(name);
718  if (!o) return;
719 
720  static char buf[1024];
721  va_list ap;
722 
723  va_start(ap, format);
724  vsnprintf(buf, 1023, format, ap);
725  buf[1023] = '\0';
726  va_end(ap);
727 
728  o->Set(buf);
729  }
736  void Set(const TString& name, const TString& value)
737  {
738  Option* o = Find(name);
739  if (!o) return;
740  o->Set(value);
741  }
747  void Set(const TString& name)
748  {
749  Option* o = Find(name);
750  if (!o) return;
751  o->Set();
752  }
760  void Set(const TString& name, Int_t val, Bool_t asHex=false)
761  {
762  if (asHex) Set(name, Form("0x%x", val));
763  else Set(name, Form("%d", val));
764  }
772  void Set(const TString& name, Long64_t val, Bool_t asHex=false)
773  {
774  ULong64_t uval = val;
775  if (asHex) Set(name, Form("0x%llx", uval));
776  else Set(name, Form("%lld", val));
777  }
784  void Set(const TString& name, Double_t val)
785  {
786  Set(name, Form("%lg", val));
787  }
796  Bool_t Parse(const TString& tmp, const TString& delims)
797  {
798  TObjArray* opts = tmp.Tokenize(delims);
799  // Info("OptionList::Parse", "Parsing options %s", tmp.Data());
800  Bool_t ret = Parse(opts);
801  opts->Delete();
802  return ret;
803  }
812  Bool_t Parse(const TCollection* opts, Bool_t ignoreUnknown=false)
813  {
814  // Info("OptionList::Parse", "List of options");
815  // opts->ls();
816  TIter next(opts);
817  TObjString* o = 0;
818  while ((o = static_cast<TObjString*>(next()))) {
819  TString& s = o->String();
820  TString key = s;
821  TString val = "";
822  Int_t eq = s.Index("=");
823  if (eq != kNPOS) {
824  key = s(0, eq);
825  val = s(eq+1, s.Length()-eq-1);
826  }
827 
828  // Info("OptionList::Parse", "Looking for key=%s", key.Data());
829  Option* opt = Find(key);
830  if (!opt) {
831  if (!ignoreUnknown)
832  Warning("OptionList::Parse", "Unknown option: \"%s\"", s.Data());
833  continue;
834  }
835  if (opt->HasArg() && val.IsNull()) {
836  Warning("OptionList::Parse",
837  "Option %s needs an argument, using default %s",
838  key.Data(), opt->fValue.Data());
839  val = opt->fValue;
840  // return false;
841  }
842  opt->Set(val);
843  }
844  return true;
845  }
852  void Widest(Int_t& nWidth, Int_t& aWidth) const
853  {
854  nWidth = 0;
855  aWidth = 0;
856  const Link* cur = fList;
857  while (cur) {
858  Option* opt = cur->fThis;
859  nWidth = TMath::Max(nWidth, opt->NameWidth());
860  aWidth = TMath::Max(aWidth, opt->ArgWidth());
861  cur = cur->fNext;
862  }
863 
864  // while ((opt = static_cast<Option*>(next()))) {
865  // }
866  }
867  void HelpDesc(std::ostream& o,
868  const TString& prefix="",
869  const Int_t max=70) const
870  {
871  if (fDesc.IsNull()) return;
872  Int_t indent= prefix.Length();
873  Int_t cur = indent;
874  TObjArray* words = fDesc.Tokenize(" ");
875  TObjString* word = 0;
876  TIter next(words);
877  o << std::endl << prefix;
878  while ((word = static_cast<TObjString*>(next()))) {
879  TString w = word->String();
880  if (w.Contains("\n")) {
881  Int_t idx = w.Index("\n");
882  w.ReplaceAll("\n",Form("%s\n",prefix.Data()));
883  o << w;
884  cur = indent + (w.Length()-idx-1);
885  w = "";
886  }
887  if (cur + w.Length() > max) {
888  o << std::endl << prefix;
889  cur = indent;
890  }
891  o << w << " ";
892  cur += w.Length() + 1;
893  }
894  if (cur != indent) o << std::endl;
895  }
896 
903  void Help(std::ostream& o, const char* prefix=" ") const
904  {
905  Int_t nWidth, aWidth;
906  Widest(nWidth, aWidth);
907  if (aWidth > 0) nWidth += aWidth+1;
908 
909  const Link* cur = fList;
910  while (cur) {
911  Option* opt = cur->fThis;
912  o << prefix;
913  opt->Help(o, nWidth);
914  cur = cur->fNext;
915  }
916  TString pre(prefix);
917  pre.ReplaceAll("-", " ");
918  pre.ReplaceAll(" ", "");
919  if (!pre.IsNull()) pre.Append(" ");
920  HelpDesc(o, pre);
921  }
928  void Show(std::ostream& o, const char* prefix=" ") const
929  {
930  Int_t nWidth, aWidth;
931  Widest(nWidth, aWidth);
932 
933 
934  const Link* cur = fList;
935  while (cur) {
936  Option* opt = cur->fThis;
937  o << prefix;
938  opt->Show(o, nWidth);
939  cur = cur->fNext;
940  }
941  }
951  void Store(std::ostream& o, const char* prefix="",
952  const char* delim=",", bool quote=true,
953  bool onlySet=false) const
954  {
955  Int_t nWidth, aWidth;
956  Widest(nWidth, aWidth);
957 
958  const Link* cur = fList;
959  while (cur) {
960  Option* opt = cur->fThis;
961  if ((!opt->HasArg() || onlySet) && !opt->IsSet()) {
962  cur = cur->fNext;
963  continue;
964  }
965  o << prefix;
966  opt->Store(o, quote);
967  o << delim;
968  cur = cur->fNext;
969  }
970  }
971  // Our linked list
974 
975  static void Test(const char* opts="")
976  {
977  OptionList l;
978  l.Add("int", "NUMBER", "Integer", "42");
979  l.Add("float", "NUMBER", "Floating point", "3.14");
980  l.Add("bool", "Flag");
981  l.Add("hex", "NUMBER", "Hexadecimal", "0xdead");
982  l.Add("string", "STRING", "A string", "Hello, world");
983  l.Show(std::cout, "\t");
984 
985  std::cout << "Find" << std::endl;
986  Option* b = l.Find("bool");
987  b->Set("true");
988  b->Show(std::cout);
989 
990  std::cout << "SetF" << std::endl;
991  l.SetF("float", "%f", 2.17);
992  l.Show(std::cout, "\t");
993 
994  std::cout << "GetF" << std::endl;
995  Float_t f;
996  l.GetF("float", "%f", &f);
997  std::cout << "\tf=" << f << std::endl;
998  std::cout << "Remove" << std::endl;
999  l.Remove("float");
1000  l.Show(std::cout, "\t");
1001 
1002  std::cout << "Set" << std::endl;
1003  l.Set("int", "10");
1004  l.Set("hex", 0xbeef, true);
1005  l.Set("bool", "false");
1006  l.Show(std::cout, "\t");
1007 
1008  std::cout << "Copy" << std::endl;
1009  OptionList c(l);
1010  c.Show(std::cout, "\t");
1011 
1012  std::cout << "Parse" << std::endl;
1013  c.Parse(opts,",");
1014  c.Show(std::cout, "\t");
1015  std::cout << "End of test" << std::endl;
1016  }
1017  // TList fList;
1018 };
1019 
1020 #endif
1021 
Double_t AsDouble(const TString &name, Double_t def=0) const
Definition: Option.C:673
void Reset()
Definition: Option.C:157
void HelpDesc(std::ostream &o, const TString &prefix="", const Int_t max=70) const
Definition: Option.C:867
return jsonbuilder str().c_str()
Bool_t HasArg() const
Definition: Option.C:173
void Help(std::ostream &o, const char *prefix=" ") const
Definition: Option.C:903
double Double_t
Definition: External.C:58
void DebugLink(const Link *link) const
Definition: Option.C:382
void Help(std::ostream &o, Int_t w=-1) const
Definition: Option.C:208
long long Long64_t
Definition: External.C:43
Int_t AsInt() const
Definition: Option.C:181
Int_t NameWidth() const
Definition: Option.C:197
const TString & Get() const
Definition: Option.C:165
Option * Find(const TString &name) const
Definition: Option.C:401
~OptionList()
Definition: Option.C:322
Bool_t AsBool(const TString &name) const
Definition: Option.C:631
Int_t ArgWidth() const
Definition: Option.C:201
char Char_t
Definition: External.C:18
TString fDesc
Definition: Option.C:973
Option & operator=(const Option &other)
Definition: Option.C:104
void Store(std::ostream &o, const char *prefix="", const char *delim=",", bool quote=true, bool onlySet=false) const
Definition: Option.C:951
TCanvas * c
Definition: TestFitELoss.C:172
Int_t AsInt(const TString &name, Int_t def=0) const
Definition: Option.C:645
const char * AsString(const TString &name, const TString &def="") const
Definition: Option.C:687
Option * Add(const TString &name, const TString &arg, const TString &desc, Int_t val, Bool_t asHex=false)
Definition: Option.C:506
void Store(std::ostream &o, bool quote=true) const
Definition: Option.C:245
Bool_t IsSet() const
Definition: Option.C:169
UShort_t T(UShort_t m, UShort_t t)
Definition: RingBits.C:60
Long64_t AsLong(const TString &name, Long64_t def=0) const
Definition: Option.C:659
const TString & Get(const TString &name) const
Definition: Option.C:596
Bool_t Has(const TString &name) const
Definition: Option.C:584
Bool_t Parse(const TString &tmp, const TString &delims)
Definition: Option.C:796
int Int_t
Definition: External.C:63
TString fName
Definition: Option.C:251
Double_t AsDouble() const
Definition: Option.C:189
unsigned int UInt_t
Definition: External.C:33
float Float_t
Definition: External.C:68
void Set(const TString &name, Double_t val)
Definition: Option.C:784
Bool_t Parse(const TCollection *opts, Bool_t ignoreUnknown=false)
Definition: Option.C:812
void Delete()
Definition: Option.C:327
static void Test(const char *opts="")
Definition: Option.C:975
Option * Add(const TString &name, const TString &desc, Bool_t def)
Definition: Option.C:487
Definition: Option.C:68
void Set(const TString &name, Int_t val, Bool_t asHex=false)
Definition: Option.C:760
void Set(const TString &name, const TString &value)
Definition: Option.C:736
void Show(std::ostream &o, Int_t w=-1) const
Definition: Option.C:229
const TString & AsTString(const TString &name, const TString &def="") const
Definition: Option.C:701
TString fArg
Definition: Option.C:254
Bool_t fIsSet
Definition: Option.C:255
void SetDescription(const TString &d)
Definition: Option.C:359
const char * AsString() const
Definition: Option.C:193
Option * Add(const TString &name, const TString &arg, const TString &desc, const TString &val="")
Definition: Option.C:421
OptionList(const OptionList &other)
Definition: Option.C:309
Option(const TString &name, const TString &arg, const TString &description, const TString &value)
Definition: Option.C:78
void Set(const TString &val)
Definition: Option.C:121
TString fValue
Definition: Option.C:253
void Set(const TString &name)
Definition: Option.C:747
Option * Add(const TString &name, const TString &desc)
Definition: Option.C:473
Bool_t GetF(const TString &name, const Char_t *format,...) const
Definition: Option.C:612
OptionList & operator=(const OptionList &other)
Definition: Option.C:346
Bool_t AsBool() const
Definition: Option.C:177
Long64_t AsLong() const
Definition: Option.C:185
Option * Add(const TString &name, const TString &arg, const TString &desc, Double_t val)
Definition: Option.C:551
OptionList()
Definition: Option.C:303
void Widest(Int_t &nWidth, Int_t &aWidth) const
Definition: Option.C:852
void Show(std::ostream &o, const char *prefix=" ") const
Definition: Option.C:928
Option(const Option &other)
Definition: Option.C:90
bool Bool_t
Definition: External.C:53
Option * Add(const TString &name, const TString &arg, const TString &desc, Long64_t val, Bool_t asHex=false)
Definition: Option.C:529
TString fDescription
Definition: Option.C:252
void Set(const TString &name, Long64_t val, Bool_t asHex=false)
Definition: Option.C:772
void Copy(const OptionList &other)
Definition: Option.C:365
void SetF(const TString &name, const Char_t *format,...)
Definition: Option.C:715
void Remove(const TString &name)
Definition: Option.C:564
Link * fList
Definition: Option.C:972
void Set()
Definition: Option.C:145