46 ClassImp(RooAbsString);
53 RooAbsString::RooAbsString() : RooAbsArg(), _len(128) , _value(new char[128])
61 RooAbsString::RooAbsString(
const char *name,
const char *title, Int_t bufLen) :
62 RooAbsArg(name,title), _len(bufLen), _value(new char[bufLen])
73 RooAbsString::RooAbsString(
const RooAbsString& other,
const char* name) :
74 RooAbsArg(other, name), _len(other._len), _value(new char[other._len])
76 strlcpy(_value,other._value,_len) ;
84 RooAbsString::~RooAbsString()
94 const char* RooAbsString::getVal()
const
98 strlcpy(_value,traceEval(),_len) ;
109 Bool_t RooAbsString::operator==(
const char* value)
const
111 return !TString(getVal()).CompareTo(value) ;
117 Bool_t RooAbsString::isIdentical(
const RooAbsArg& other, Bool_t assumeSameType)
119 if (!assumeSameType) {
120 const RooAbsString* otherString =
dynamic_cast<const RooAbsString*
>(&other) ;
121 return otherString ? operator==(otherString->getVal()) : kFALSE ;
123 return !TString(getVal()).CompareTo(((RooAbsString&)other).getVal()) ; ;
132 Bool_t RooAbsString::operator==(
const RooAbsArg& other)
134 const RooAbsString* otherString =
dynamic_cast<const RooAbsString*
>(&other) ;
135 return otherString ? operator==(otherString->getVal()) : kFALSE ;
143 Bool_t RooAbsString::readFromStream(istream& , Bool_t , Bool_t )
153 void RooAbsString::writeToStream(ostream& , Bool_t )
const
162 void RooAbsString::printValue(ostream& os)
const
172 Bool_t RooAbsString::isValid()
const
174 return isValidString(getVal()) ;
182 Bool_t RooAbsString::isValidString(
const char* value, Bool_t )
const
185 if (TString(value).Length()>_len)
return kFALSE ;
194 Bool_t RooAbsString::traceEvalHook(
const char* )
const
204 TString RooAbsString::traceEval()
const
206 TString value = evaluate() ;
209 if (!isValidString(value)) {
210 cxcoutD(Tracing) <<
"RooAbsString::traceEval(" << GetName() <<
"): new output too long (>" << _len <<
" chars): " << value << endl ;
214 traceEvalHook(value) ;
224 void RooAbsString::syncCache(
const RooArgSet*)
237 void RooAbsString::copyCache(
const RooAbsArg* source, Bool_t , Bool_t setValDirty)
239 RooAbsString* other =
dynamic_cast<RooAbsString*
>(
const_cast<RooAbsArg*
>(source)) ;
242 strlcpy(_value,other->_value,_len) ;
253 void RooAbsString::attachToTree(TTree& t, Int_t bufSize)
257 if ((branch = t.GetBranch(GetName()))) {
258 t.SetBranchAddress(GetName(),_value) ;
259 if (branch->GetCompressionLevel()<0) {
260 cxcoutD(DataHandling) <<
"RooAbsString::attachToTree(" << GetName() <<
") Fixing compression level of branch " << GetName() << endl ;
261 branch->SetCompressionLevel(ROOT::RCompressionSetting::EDefaults::kUseGlobal % 100) ;
264 TString format(GetName());
266 branch = t.Branch(GetName(), _value, (
const Text_t*)format, bufSize);
267 branch->SetCompressionLevel(ROOT::RCompressionSetting::EDefaults::kUseGlobal % 100) ;
276 void RooAbsString::fillTreeBranch(TTree& t)
279 TBranch* branch = t.GetBranch(GetName()) ;
281 coutE(DataHandling) <<
"RooAbsString::fillTreeBranch(" << GetName() <<
") ERROR: not attached to tree" << endl ;
292 void RooAbsString::setTreeBranchStatus(TTree& t, Bool_t active)
294 TBranch* branch = t.GetBranch(GetName()) ;
296 t.SetBranchStatus(GetName(),active?1:0) ;
305 RooAbsArg *RooAbsString::createFundamental(
const char* newname)
const
307 RooStringVar *fund=
new RooStringVar(newname?newname:GetName(),GetTitle(),
"") ;