00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include <stdio.h>
00012 #include <stdlib.h>
00013 #include <string.h>
00014 #include <ctype.h>
00015 #include <assert.h>
00016 #include "TAttr.h"
00017 #include "TClass.h"
00018 Int_t TAttr::_debug = 0;
00019 ClassImp(TAttr)
00020
00021 TAttr::TAttr(const char *name)
00022 {
00023 if (!name) name = "";
00024 SetName(name);
00025 }
00026
00027 TAttr::~TAttr()
00028 {
00029 Delete();
00030 }
00031
00039 void TAttr::SetAttr(const char *key, const char *val)
00040 {
00041
00042 TString tk(key);tk.ToLower();tk.ReplaceAll(" ","");tk.ReplaceAll("\t","");
00043 if (!val) val ="";
00044 TString tv(val);tv = tv.Strip(TString::kBoth) ;tv.ReplaceAll("\t","");
00045 if (tv == ".remove") {
00046 TObject *t = FindObject(tk.Data());
00047 if (t) {Remove(t); delete t;}
00048 } else {
00049 AddFirst(new TNamed(tk.Data(),tv.Data()));
00050 }
00051 if (_debug)
00052 Info("SetAttr","(\"%s\",\"%s\",\")",tk.Data(),tv.Data());
00053
00054 }
00055
00056 int TAttr::SetAttr(const TAttr *att)
00057 {
00058 TListIter iter(att,kIterBackward);
00059 int add=0; const TNamed *tn=0;
00060 while ((tn = (const TNamed*)iter())) {AddFirst(new TNamed(*tn));add++;}
00061 return add;
00062 }
00063
00064 void TAttr::SetAttr(const char *key, int val)
00065 {
00066 TString ts; ts+=val; SetAttr(key, ts.Data());
00067 }
00068
00069 void TAttr::SetAttr(const char *key, UInt_t val)
00070 {
00071 TString ts; ts+=val; return SetAttr(key, ts.Data());
00072 }
00073
00074 void TAttr::SetAttr(const char *key, double val)
00075 {
00076 TString ts; ts+=val; return SetAttr(key, ts.Data());
00077 }
00078
00079
00080 const char *TAttr::SAttr(const char *key) const
00081 {
00082 TString tey(key);
00083 tey.ToLower(); tey.ReplaceAll(" ",""); tey.ReplaceAll("\t","");
00084 TObject *att = FindObject(tey.Data());
00085 return (att)? att->GetTitle():"";
00086 }
00087
00088 int TAttr::IAttr(const char *key) const
00089 {
00090 const char *val = SAttr(key);
00091 if (!val || !val[0]) return 0;
00092 if (isdigit(*val)) return strtoul(val,0,0);
00093 return strtol(val,0,0);
00094 }
00095
00096 UInt_t TAttr::UAttr(const char *key) const
00097 {
00098 return (UInt_t)IAttr(key);
00099 }
00100
00101 double TAttr::DAttr(const char *key) const
00102 {
00103 const char *val = SAttr(key);
00104 if (!val) return 0;
00105 if (!val[0]) return 0;
00106 return strtod(val,0);
00107 }
00108
00109 void TAttr::PrintAttr() const
00110 {
00111 if (!First()) return;
00112 TIter next(this);
00113 printf("PrintAttr() for %s::%s\n",ClassName(),GetName());
00114 TObject *object;
00115 int n=0;
00116 while ((object = next())) {
00117 n++;
00118 printf(" %2d - %s = %s\n",n,object->GetName(),object->GetTitle());
00119 }
00120 printf("PrintAttr() ==============================================\n");
00121 }
00122