#include "TROOT.h"
#include "TStreamerElement.h"
#include "TVirtualStreamerInfo.h"
#include "TClass.h"
#include "TClassEdit.h"
#include "TBaseClass.h"
#include "TDataMember.h"
#include "TDataType.h"
#include "TMethodCall.h"
#include "TRealData.h"
#include "TFolder.h"
#include "TRef.h"
#include "TInterpreter.h"
#include "TError.h"
#include "TDataType.h"
#include "TVirtualMutex.h"
#include <iostream>
#include <string>
namespace std {} using namespace std;
const Int_t kMaxLen = 1024;
static char gIncludeName[kMaxLen];
static TStreamerBasicType *InitCounter(const char *countClass, const char *countName)
{
TClass *cl = TClass::GetClass(countClass);
if (cl==0) return 0;
TStreamerBasicType *counter = TVirtualStreamerInfo::GetElementCounter(countName,cl);
if (counter) {
if (counter->GetType() < TVirtualStreamerInfo::kCounter) counter->SetType(TVirtualStreamerInfo::kCounter);
}
return counter;
}
static void GetRange(const char *comments, Double_t &xmin, Double_t &xmax, Double_t &factor)
{
const Double_t kPi =3.14159265358979323846 ;
factor = xmin = xmax = 0;
if (!comments) return;
const char *left = strstr(comments,"[");
if (!left) return;
const char *right = strstr(left,"]");
if (!right) return;
const char *comma = strstr(left,",");
if (!comma || comma > right) {
left = strstr(right,"[");
if (!left) return;
right = strstr(left,"]");
if (!right) return;
comma = strstr(left,",");
if (!comma || comma >right) return;
}
const char *comma2 = 0;
if (comma) comma2 = strstr(comma+1,",");
if (comma2 > right) comma2 = 0;
Int_t nbits = 32;
if (comma2) {
TString sbits(comma2+1,right-comma2-1);
sscanf(sbits.Data(),"%d",&nbits);
if (nbits < 2 || nbits > 32) {
::Error("GetRange","Illegal specification for the number of bits; %d. reset to 32.",nbits);
nbits = 32;
}
right = comma2;
}
TString range(left+1,right-left-1);
TString sxmin(left+1,comma-left-1);
sxmin.ToLower();
sxmin.ReplaceAll(" ","");
if (sxmin.Contains("pi")) {
if (sxmin.Contains("2pi")) xmin = 2*kPi;
else if (sxmin.Contains("2*pi")) xmin = 2*kPi;
else if (sxmin.Contains("twopi")) xmin = 2*kPi;
else if (sxmin.Contains("pi/2")) xmin = kPi/2;
else if (sxmin.Contains("pi/4")) xmin = kPi/4;
else if (sxmin.Contains("pi")) xmin = kPi;
if (sxmin.Contains("-")) xmin = -xmin;
} else {
sscanf(sxmin.Data(),"%lg",&xmin);
}
TString sxmax(comma+1,right-comma-1);
sxmax.ToLower();
sxmax.ReplaceAll(" ","");
if (sxmax.Contains("pi")) {
if (sxmax.Contains("2pi")) xmax = 2*kPi;
else if (sxmax.Contains("2*pi")) xmax = 2*kPi;
else if (sxmax.Contains("twopi")) xmax = 2*kPi;
else if (sxmax.Contains("pi/2")) xmax = kPi/2;
else if (sxmax.Contains("pi/4")) xmax = kPi/4;
else if (sxmax.Contains("pi")) xmax = kPi;
if (sxmax.Contains("-")) xmax = -xmax;
} else {
sscanf(sxmax.Data(),"%lg",&xmax);
}
UInt_t bigint;
if (nbits < 32) bigint = 1<<nbits;
else bigint = 0xffffffff;
if (xmin < xmax) factor = bigint/(xmax-xmin);
if (xmin >= xmax && nbits <15) xmin = nbits+0.1;
}
ClassImp(TStreamerElement)
TStreamerElement::TStreamerElement()
{
fType = 0;
fSize = 0;
fNewType = 0;
fArrayDim = 0;
fArrayLength = 0;
fStreamer = 0;
fMethod = 0;
fOffset = 0;
fClassObject = (TClass*)(-1);
fNewClass = 0;
fTObjectOffset = 0;
fFactor = 0;
fXmin = 0;
fXmax = 0;
for (Int_t i=0;i<5;i++) fMaxIndex[i] = 0;
}
TStreamerElement::TStreamerElement(const char *name, const char *title, Int_t offset, Int_t dtype, const char *typeName)
: TNamed(name,title)
{
fOffset = offset;
fType = dtype;
fSize = 0;
fNewType = fType;
fArrayDim = 0;
fArrayLength = 0;
fTypeName = TClassEdit::ResolveTypedef(typeName);
fStreamer = 0;
fMethod = 0;
fClassObject = (TClass*)(-1);
fNewClass = 0;
fTObjectOffset = 0;
fFactor = 0;
fXmin = 0;
fXmax = 0;
for (Int_t i=0;i<5;i++) fMaxIndex[i] = 0;
if (fTypeName == "Float16_t" || fTypeName == "Float16_t*") {
GetRange(title,fXmin,fXmax,fFactor);
if (fFactor > 0 || fXmin > 0) SetBit(kHasRange);
}
if (fTypeName == "Double32_t" || fTypeName == "Double32_t*") {
GetRange(title,fXmin,fXmax,fFactor);
if (fFactor > 0 || fXmin > 0) SetBit(kHasRange);
}
}
TStreamerElement::~TStreamerElement()
{
delete fMethod;
}
Bool_t TStreamerElement::CannotSplit() const
{
if (strspn(GetTitle(),"||") == 2) return kTRUE;
TClass *cl = GetClassPointer();
if (!cl) return kFALSE;
switch(fType) {
case TVirtualStreamerInfo::kAny +TVirtualStreamerInfo::kOffsetL:
case TVirtualStreamerInfo::kObject +TVirtualStreamerInfo::kOffsetL:
case TVirtualStreamerInfo::kTObject+TVirtualStreamerInfo::kOffsetL:
case TVirtualStreamerInfo::kTString+TVirtualStreamerInfo::kOffsetL:
case TVirtualStreamerInfo::kTNamed +TVirtualStreamerInfo::kOffsetL:
return kTRUE;
}
if ( !cl->CanSplit() ) return kTRUE;
return kFALSE;
}
TClass *TStreamerElement::GetClassPointer() const
{
if (fClassObject!=(TClass*)(-1)) return fClassObject;
TString className = fTypeName.Strip(TString::kTrailing, '*');
if (className.Index("const ")==0) className.Remove(0,6);
((TStreamerElement*)this)->fClassObject = TClass::GetClass(className);
return fClassObject;
}
Int_t TStreamerElement::GetExecID() const
{
if (strncmp(fTypeName.Data(),"TRef",4) != 0) return 0;
if (GetUniqueID()) return GetUniqueID();
char *action = (char*)strstr(GetTitle(),"EXEC:");
if (!action) return 0;
char caction[512];
strcpy(caction,action+5);
char *blank = (char*)strchr(caction,' ');
if (blank) *blank = 0;
Int_t index = TRef::AddExec(caction);
((TStreamerElement*)this)->SetUniqueID(index+1);
return index+1;
}
const char *TStreamerElement::GetFullName() const
{
static char name[kMaxLen];
char cdim[20];
sprintf(name,"%s",GetName());
for (Int_t i=0;i<fArrayDim;i++) {
sprintf(cdim,"[%d]",fMaxIndex[i]);
strcat(name,cdim);
}
return name;
}
Int_t TStreamerElement::GetSize() const
{
return fSize;
}
TMemberStreamer *TStreamerElement::GetStreamer() const
{
return fStreamer;
}
const char *TStreamerElement::GetTypeNameBasic() const
{
TDataType *dt = gROOT->GetType(fTypeName.Data());
if (fType < 1 || fType > 55) return fTypeName.Data();
if (dt && dt->GetType() > 0) return fTypeName.Data();
Int_t dtype = fType%20;
return TDataType::GetTypeName((EDataType)dtype);
}
void TStreamerElement::Init(TObject *)
{
fClassObject = GetClassPointer();
if (fClassObject && fClassObject->InheritsFrom(TObject::Class())) {
fTObjectOffset = fClassObject->GetBaseClassOffset(TObject::Class());
}
}
Bool_t TStreamerElement::IsOldFormat(const char *newTypeName)
{
if (!strstr(newTypeName,fTypeName.Data())) return kFALSE;
fTypeName = newTypeName;
return kTRUE;
}
Bool_t TStreamerElement::IsBase() const
{
return kFALSE;
}
void TStreamerElement::ls(Option_t *) const
{
sprintf(gIncludeName,"%s",GetTypeName());
if (IsaPointer() && !fTypeName.Contains("*")) strcat(gIncludeName,"*");
printf(" %-14s %-15s offset=%3d type=%2d %s%-20s\n",
gIncludeName,GetFullName(),fOffset,fType,TestBit(kCache)?"(cached) ":"",
GetTitle());
}
void TStreamerElement::SetArrayDim(Int_t dim)
{
fArrayDim = dim;
if (dim) fType += TVirtualStreamerInfo::kOffsetL;
fNewType = fType;
}
void TStreamerElement::SetMaxIndex(Int_t dim, Int_t max)
{
if (dim < 0 || dim > 4) return;
fMaxIndex[dim] = max;
if (fArrayLength == 0) fArrayLength = max;
else fArrayLength *= max;
}
void TStreamerElement::SetStreamer(TMemberStreamer *streamer)
{
fStreamer = streamer;
}
void TStreamerElement::Streamer(TBuffer &R__b)
{
UInt_t R__s, R__c;
if (R__b.IsReading()) {
Version_t R__v = R__b.ReadVersion(&R__s, &R__c);
R__b.ClassBegin(TStreamerElement::Class(), R__v);
R__b.ClassMember("TNamed");
TNamed::Streamer(R__b);
R__b.ClassMember("fType","Int_t");
R__b >> fType;
R__b.ClassMember("fSize","Int_t");
R__b >> fSize;
R__b.ClassMember("fArrayLength","Int_t");
R__b >> fArrayLength;
R__b.ClassMember("fArrayDim","Int_t");
R__b >> fArrayDim;
R__b.ClassMember("fMaxIndex","Int_t", 5);
if (R__v == 1) R__b.ReadStaticArray(fMaxIndex);
else R__b.ReadFastArray(fMaxIndex,5);
R__b.ClassMember("fTypeName","TString");
fTypeName.Streamer(R__b);
if (fType==11&&(fTypeName=="Bool_t"||fTypeName=="bool")) fType = 18;
if (R__v > 1) {
SetUniqueID(0);
GetExecID();
}
if (R__v <= 2 && this->IsA()==TStreamerBasicType::Class()) {
TDataType *type = gROOT->GetType(GetTypeName());
if (type && fArrayLength) fSize = fArrayLength * type->Size();
}
if (R__v == 3) {
R__b >> fXmin;
R__b >> fXmax;
R__b >> fFactor;
if (fFactor > 0) SetBit(kHasRange);
}
if (R__v > 3) {
if (TestBit(kHasRange)) GetRange(GetTitle(),fXmin,fXmax,fFactor);
}
R__b.ClassEnd(TStreamerElement::Class());
R__b.SetBufferOffset(R__s+R__c+sizeof(UInt_t));
} else {
R__b.WriteClassBuffer(TStreamerElement::Class(),this);
}
}
void TStreamerElement::Update(const TClass *oldClass, TClass *newClass)
{
if (fClassObject == oldClass) {
fClassObject = newClass;
if (fClassObject && fClassObject->InheritsFrom(TObject::Class())) {
fTObjectOffset = fClassObject->GetBaseClassOffset(TObject::Class());
}
} else if (fClassObject==0) {
fClassObject = (TClass*)-1;
GetClassPointer();
if (fClassObject && fClassObject->InheritsFrom(TObject::Class())) {
fTObjectOffset = fClassObject->GetBaseClassOffset(TObject::Class());
}
}
}
ClassImp(TStreamerBase)
TStreamerBase::TStreamerBase()
{
fBaseClass = (TClass*)(-1);
fBaseVersion = 0;
fNewBaseClass = 0;
}
TStreamerBase::TStreamerBase(const char *name, const char *title, Int_t offset)
: TStreamerElement(name,title,offset,TVirtualStreamerInfo::kBase,"BASE")
{
if (strcmp(name,"TObject") == 0) fType = TVirtualStreamerInfo::kTObject;
if (strcmp(name,"TNamed") == 0) fType = TVirtualStreamerInfo::kTNamed;
fNewType = fType;
fBaseClass = TClass::GetClass(GetName());
fBaseVersion = fBaseClass->GetClassVersion();
fNewBaseClass = 0;
Init();
}
TStreamerBase::~TStreamerBase()
{
}
TClass *TStreamerBase::GetClassPointer() const
{
if (fBaseClass!=(TClass*)(-1)) return fBaseClass;
((TStreamerBase*)this)->fBaseClass = TClass::GetClass(GetName());
return fBaseClass;
}
Int_t TStreamerBase::GetSize() const
{
TClass *cl = GetClassPointer();
if (cl) return cl->Size();
return 0;
}
void TStreamerBase::Init(TObject *)
{
if (fType == TVirtualStreamerInfo::kTObject || fType == TVirtualStreamerInfo::kTNamed) return;
fBaseClass = TClass::GetClass(GetName());
if (!fBaseClass) return;
if (!fBaseClass->GetMethodAny("StreamerNVirtual")) return;
delete fMethod;
fMethod = new TMethodCall();
fMethod->InitWithPrototype(fBaseClass,"StreamerNVirtual","TBuffer &");
}
Bool_t TStreamerBase::IsBase() const
{
return kTRUE;
}
const char *TStreamerBase::GetInclude() const
{
if (GetClassPointer() && fBaseClass->GetClassInfo()) {
sprintf(gIncludeName,"\"%s\"",fBaseClass->GetDeclFileName());
} else {
std::string shortname( TClassEdit::ShortType( GetName(), 1 ) );
sprintf(gIncludeName,"\"%s.h\"",shortname.c_str());
}
return gIncludeName;
}
void TStreamerBase::ls(Option_t *) const
{
printf(" %-14s %-15s offset=%3d type=%2d %s%-20s\n",GetFullName(),GetTypeName(),fOffset,fType,TestBit(kCache)?"(cached) ":"",GetTitle());
}
Int_t TStreamerBase::ReadBuffer (TBuffer &b, char *pointer)
{
if (fMethod) {
ULong_t args[1];
args[0] = (ULong_t)&b;
R__LOCKGUARD2(gCINTMutex);
fMethod->SetParamPtrs(args);
fMethod->Execute((void*)(pointer+fOffset));
} else {
if( fNewBaseClass )
b.ReadClassBuffer( fNewBaseClass, pointer+fOffset, fBaseClass );
else
b.ReadClassBuffer( fBaseClass, pointer+fOffset );
}
return 0;
}
void TStreamerBase::Streamer(TBuffer &R__b)
{
UInt_t R__s, R__c;
if (R__b.IsReading()) {
Version_t R__v = R__b.ReadVersion(&R__s, &R__c);
R__b.ClassBegin(TStreamerBase::Class(), R__v);
R__b.ClassMember("TStreamerElement");
TStreamerElement::Streamer(R__b);
fBaseClass = (TClass*)-1;
fNewBaseClass = 0;
if (R__v > 2) {
R__b.ClassMember("fBaseVersion","Int_t");
R__b >> fBaseVersion;
} else {
fBaseClass = TClass::GetClass(GetName());
fBaseVersion = fBaseClass->GetClassVersion();
}
R__b.ClassEnd(TStreamerBase::Class());
R__b.SetBufferOffset(R__s+R__c+sizeof(UInt_t));
} else {
R__b.WriteClassBuffer(TStreamerBase::Class(),this);
}
}
void TStreamerBase::Update(const TClass *oldClass, TClass *newClass)
{
if (fClassObject == oldClass) fClassObject = newClass;
else if (fClassObject == 0) {
fClassObject = (TClass*)-1;
GetClassPointer();
}
if (fBaseClass == oldClass) fBaseClass = newClass;
else if (fBaseClass == 0 ) {
fBaseClass = (TClass*)-1;
GetClassPointer();
}
if (fClassObject != (TClass*)-1 &&
fClassObject && fClassObject->InheritsFrom(TObject::Class())) {
fTObjectOffset = fClassObject->GetBaseClassOffset(TObject::Class());
}
}
Int_t TStreamerBase::WriteBuffer (TBuffer &b, char *pointer)
{
if (!fMethod) {
fBaseClass->WriteBuffer(b,pointer+fOffset);
return 0;
}
ULong_t args[1];
args[0] = (ULong_t)&b;
R__LOCKGUARD2(gCINTMutex);
fMethod->SetParamPtrs(args);
fMethod->Execute((void*)(pointer+fOffset));
b.ForceWriteInfo(fBaseClass->GetStreamerInfo(),kFALSE);
return 0;
}
ClassImp(TStreamerBasicPointer)
TStreamerBasicPointer::TStreamerBasicPointer() : fCounter(0)
{
fCounter = 0;
}
TStreamerBasicPointer::TStreamerBasicPointer(const char *name, const char *title, Int_t offset, Int_t dtype, const char *countName, const char *countClass, Int_t countVersion, const char *typeName)
: TStreamerElement(name,title,offset,dtype,typeName)
{
fType += TVirtualStreamerInfo::kOffsetP;
fCountName = countName;
fCountClass = countClass;
fCountVersion = countVersion;
Init();
}
TStreamerBasicPointer::~TStreamerBasicPointer()
{
}
ULong_t TStreamerBasicPointer::GetMethod() const
{
if (!fCounter) ((TStreamerBasicPointer*)this)->Init();
if (!fCounter) return 0;
return (ULong_t)fCounter->GetOffset();
}
Int_t TStreamerBasicPointer::GetSize() const
{
if (fArrayLength) return fArrayLength*sizeof(void *);
return sizeof(void *);
}
void TStreamerBasicPointer::Init(TObject *)
{
fCounter = InitCounter( fCountClass, fCountName );
}
void TStreamerBasicPointer::SetArrayDim(Int_t dim)
{
fArrayDim = dim;
fNewType = fType;
}
void TStreamerBasicPointer::Streamer(TBuffer &R__b)
{
UInt_t R__s, R__c;
if (R__b.IsReading()) {
Version_t R__v = R__b.ReadVersion(&R__s, &R__c);
if (R__v > 1) {
R__b.ReadClassBuffer(TStreamerBasicPointer::Class(), this, R__v, R__s, R__c);
return;
}
TStreamerElement::Streamer(R__b);
R__b >> fCountVersion;
fCountName.Streamer(R__b);
fCountClass.Streamer(R__b);
R__b.SetBufferOffset(R__s+R__c+sizeof(UInt_t));
} else {
R__b.WriteClassBuffer(TStreamerBasicPointer::Class(),this);
}
}
ClassImp(TStreamerLoop)
TStreamerLoop::TStreamerLoop() : fCounter(0)
{
fCounter = 0;
}
TStreamerLoop::TStreamerLoop(const char *name, const char *title, Int_t offset, const char *countName, const char *countClass, Int_t countVersion, const char *typeName)
: TStreamerElement(name,title,offset,TVirtualStreamerInfo::kStreamLoop,typeName)
{
fCountName = countName;
fCountClass = countClass;
fCountVersion = countVersion;
Init();
}
TStreamerLoop::~TStreamerLoop()
{
}
ULong_t TStreamerLoop::GetMethod() const
{
if (!fCounter) return 0;
return (ULong_t)fCounter->GetOffset();
}
Int_t TStreamerLoop::GetSize() const
{
if (fArrayLength) return fArrayLength*sizeof(Int_t);
return sizeof(Int_t);
}
void TStreamerLoop::Init(TObject *)
{
fCounter = InitCounter( fCountClass, fCountName );
}
const char *TStreamerLoop::GetInclude() const
{
sprintf(gIncludeName,"<%s>","TString.h");
return gIncludeName;
}
void TStreamerLoop::Streamer(TBuffer &R__b)
{
UInt_t R__s, R__c;
if (R__b.IsReading()) {
Version_t R__v = R__b.ReadVersion(&R__s, &R__c);
if (R__v > 1) {
R__b.ReadClassBuffer(TStreamerLoop::Class(), this, R__v, R__s, R__c);
return;
}
TStreamerElement::Streamer(R__b);
R__b >> fCountVersion;
fCountName.Streamer(R__b);
fCountClass.Streamer(R__b);
R__b.SetBufferOffset(R__s+R__c+sizeof(UInt_t));
} else {
R__b.WriteClassBuffer(TStreamerLoop::Class(),this);
}
}
ClassImp(TStreamerBasicType)
TStreamerBasicType::TStreamerBasicType()
{
}
TStreamerBasicType::TStreamerBasicType(const char *name, const char *title, Int_t offset, Int_t dtype, const char *typeName)
: TStreamerElement(name,title,offset,dtype,typeName)
{
}
TStreamerBasicType::~TStreamerBasicType()
{
}
ULong_t TStreamerBasicType::GetMethod() const
{
if (fType == TVirtualStreamerInfo::kCounter ||
fType == (TVirtualStreamerInfo::kCounter+TVirtualStreamerInfo::kSkip)) return (ULong_t)&fCounter;
return 0;
}
Int_t TStreamerBasicType::GetSize() const
{
return fSize;
}
void TStreamerBasicType::Streamer(TBuffer &R__b)
{
UInt_t R__s, R__c;
if (R__b.IsReading()) {
Version_t R__v = R__b.ReadVersion(&R__s, &R__c);
if (R__v > 1) {
R__b.ReadClassBuffer(TStreamerBasicType::Class(), this, R__v, R__s, R__c);
} else {
TStreamerElement::Streamer(R__b);
R__b.CheckByteCount(R__s, R__c, TStreamerBasicType::IsA());
}
switch(fType) {
case kBool_t: fSize = sizeof(bool); break;
case kShort_t: fSize = sizeof(Short_t); break;
case kInt_t: fSize = sizeof(Int_t); break;
case kLong_t: fSize = sizeof(Long_t); break;
case kLong64_t: fSize = sizeof(Long64_t); break;
case kFloat_t: fSize = sizeof(Float_t); break;
case kFloat16_t: fSize = sizeof(Float_t); break;
case kDouble_t: fSize = sizeof(Double_t); break;
case kDouble32_t: fSize = sizeof(Double_t); break;
case kUChar_t: fSize = sizeof(UChar_t); break;
case kUShort_t: fSize = sizeof(UShort_t); break;
case kUInt_t: fSize = sizeof(UInt_t); break;
case kULong_t: fSize = sizeof(ULong_t); break;
case kULong64_t: fSize = sizeof(ULong64_t); break;
case kBits: fSize = sizeof(UInt_t); break;
case kCounter: fSize = sizeof(Int_t); break;
case kChar_t: fSize = sizeof(Char_t); break;
case kCharStar: fSize = sizeof(Char_t*); break;
default: return;
}
if (fArrayLength) fSize *= GetArrayLength();
} else {
R__b.WriteClassBuffer(TStreamerBasicType::Class(),this);
}
}
ClassImp(TStreamerObject)
TStreamerObject::TStreamerObject()
{
}
TStreamerObject::TStreamerObject(const char *name, const char *title, Int_t offset, const char *typeName)
: TStreamerElement(name,title,offset,0,typeName)
{
fType = TVirtualStreamerInfo::kObject;
if (strcmp(typeName,"TObject") == 0) fType = TVirtualStreamerInfo::kTObject;
if (strcmp(typeName,"TNamed") == 0) fType = TVirtualStreamerInfo::kTNamed;
fNewType = fType;
Init();
}
TStreamerObject::~TStreamerObject()
{
}
void TStreamerObject::Init(TObject *)
{
fClassObject = GetClassPointer();
if (fClassObject && fClassObject->InheritsFrom(TObject::Class())) {
fTObjectOffset = fClassObject->GetBaseClassOffset(TObject::Class());
}
}
const char *TStreamerObject::GetInclude() const
{
TClass *cl = GetClassPointer();
if (cl && cl->GetClassInfo()) {
sprintf(gIncludeName,"\"%s\"",cl->GetDeclFileName());
} else {
std::string shortname( TClassEdit::ShortType( GetTypeName(), 1 ) );
sprintf(gIncludeName,"\"%s.h\"",shortname.c_str());
}
return gIncludeName;
}
Int_t TStreamerObject::GetSize() const
{
TClass *cl = GetClassPointer();
Int_t classSize = 8;
if (cl) classSize = cl->Size();
if (fArrayLength) return fArrayLength*classSize;
return classSize;
}
void TStreamerObject::Streamer(TBuffer &R__b)
{
UInt_t R__s, R__c;
if (R__b.IsReading()) {
Version_t R__v = R__b.ReadVersion(&R__s, &R__c);
if (R__v > 1) {
R__b.ReadClassBuffer(TStreamerObject::Class(), this, R__v, R__s, R__c);
return;
}
TStreamerElement::Streamer(R__b);
R__b.CheckByteCount(R__s, R__c, TStreamerObject::IsA());
} else {
R__b.WriteClassBuffer(TStreamerObject::Class(),this);
}
}
ClassImp(TStreamerObjectAny)
TStreamerObjectAny::TStreamerObjectAny()
{
}
TStreamerObjectAny::TStreamerObjectAny(const char *name, const char *title, Int_t offset, const char *typeName)
: TStreamerElement(name,title,offset,TVirtualStreamerInfo::kAny,typeName)
{
Init();
}
TStreamerObjectAny::~TStreamerObjectAny()
{
}
void TStreamerObjectAny::Init(TObject *)
{
fClassObject = GetClassPointer();
if (fClassObject && fClassObject->InheritsFrom(TObject::Class())) {
fTObjectOffset = fClassObject->GetBaseClassOffset(TObject::Class());
}
}
const char *TStreamerObjectAny::GetInclude() const
{
TClass *cl = GetClassPointer();
if (cl && cl->GetClassInfo()) {
sprintf(gIncludeName,"\"%s\"",cl->GetDeclFileName());
} else {
std::string shortname( TClassEdit::ShortType( GetTypeName(), 1 ) );
sprintf(gIncludeName,"\"%s.h\"",shortname.c_str());
}
return gIncludeName;
}
Int_t TStreamerObjectAny::GetSize() const
{
TClass *cl = GetClassPointer();
Int_t classSize = 8;
if (cl) classSize = cl->Size();
if (fArrayLength) return fArrayLength*classSize;
return classSize;
}
void TStreamerObjectAny::Streamer(TBuffer &R__b)
{
UInt_t R__s, R__c;
if (R__b.IsReading()) {
Version_t R__v = R__b.ReadVersion(&R__s, &R__c);
if (R__v > 1) {
R__b.ReadClassBuffer(TStreamerObjectAny::Class(), this, R__v, R__s, R__c);
return;
}
TStreamerElement::Streamer(R__b);
R__b.CheckByteCount(R__s, R__c, TStreamerObjectAny::IsA());
} else {
R__b.WriteClassBuffer(TStreamerObjectAny::Class(),this);
}
}
ClassImp(TStreamerObjectPointer)
TStreamerObjectPointer::TStreamerObjectPointer()
{
}
TStreamerObjectPointer::TStreamerObjectPointer(const char *name, const char *title,
Int_t offset, const char *typeName)
: TStreamerElement(name,title,offset,TVirtualStreamerInfo::kObjectP,typeName)
{
if (strncmp(title,"->",2) == 0) fType = TVirtualStreamerInfo::kObjectp;
fNewType = fType;
Init();
}
TStreamerObjectPointer::~TStreamerObjectPointer()
{
}
void TStreamerObjectPointer::Init(TObject *)
{
fClassObject = GetClassPointer();
if (fClassObject && fClassObject->InheritsFrom(TObject::Class())) {
fTObjectOffset = fClassObject->GetBaseClassOffset(TObject::Class());
}
}
const char *TStreamerObjectPointer::GetInclude() const
{
TClass *cl = GetClassPointer();
if (cl && cl->GetClassInfo()) {
sprintf(gIncludeName,"\"%s\"",cl->GetDeclFileName());
} else {
std::string shortname( TClassEdit::ShortType( GetTypeName(), 1 ) );
sprintf(gIncludeName,"\"%s.h\"",shortname.c_str());
}
return gIncludeName;
}
Int_t TStreamerObjectPointer::GetSize() const
{
if (fArrayLength) return fArrayLength*sizeof(void *);
return sizeof(void *);
}
void TStreamerObjectPointer::SetArrayDim(Int_t dim)
{
fArrayDim = dim;
fNewType = fType;
}
void TStreamerObjectPointer::Streamer(TBuffer &R__b)
{
UInt_t R__s, R__c;
if (R__b.IsReading()) {
Version_t R__v = R__b.ReadVersion(&R__s, &R__c);
if (R__v > 1) {
R__b.ReadClassBuffer(TStreamerObjectPointer::Class(), this, R__v, R__s, R__c);
return;
}
TStreamerElement::Streamer(R__b);
R__b.CheckByteCount(R__s, R__c, TStreamerObjectPointer::IsA());
} else {
R__b.WriteClassBuffer(TStreamerObjectPointer::Class(),this);
}
}
ClassImp(TStreamerObjectAnyPointer)
TStreamerObjectAnyPointer::TStreamerObjectAnyPointer()
{
}
TStreamerObjectAnyPointer::TStreamerObjectAnyPointer(const char *name, const char *title,
Int_t offset, const char *typeName)
: TStreamerElement(name,title,offset,TVirtualStreamerInfo::kAnyP,typeName)
{
if (strncmp(title,"->",2) == 0) fType = TVirtualStreamerInfo::kAnyp;
fNewType = fType;
Init();
}
TStreamerObjectAnyPointer::~TStreamerObjectAnyPointer()
{
}
void TStreamerObjectAnyPointer::Init(TObject *)
{
fClassObject = GetClassPointer();
if (fClassObject && fClassObject->InheritsFrom(TObject::Class())) {
fTObjectOffset = fClassObject->GetBaseClassOffset(TObject::Class());
}
}
const char *TStreamerObjectAnyPointer::GetInclude() const
{
TClass *cl = GetClassPointer();
if (cl && cl->GetClassInfo()) {
sprintf(gIncludeName,"\"%s\"",cl->GetDeclFileName());
} else {
std::string shortname( TClassEdit::ShortType( GetTypeName(), 1 ) );
sprintf(gIncludeName,"\"%s.h\"",shortname.c_str());
}
return gIncludeName;
}
Int_t TStreamerObjectAnyPointer::GetSize() const
{
if (fArrayLength) return fArrayLength*sizeof(void *);
return sizeof(void *);
}
void TStreamerObjectAnyPointer::SetArrayDim(Int_t dim)
{
fArrayDim = dim;
fNewType = fType;
}
void TStreamerObjectAnyPointer::Streamer(TBuffer &R__b)
{
if (R__b.IsReading()) {
R__b.ReadClassBuffer(TStreamerObjectAnyPointer::Class(), this);
} else {
R__b.WriteClassBuffer(TStreamerObjectAnyPointer::Class(),this);
}
}
ClassImp(TStreamerString)
TStreamerString::TStreamerString()
{
}
TStreamerString::TStreamerString(const char *name, const char *title, Int_t offset)
: TStreamerElement(name,title,offset,TVirtualStreamerInfo::kTString,"TString")
{
}
TStreamerString::~TStreamerString()
{
}
Int_t TStreamerString::GetSize() const
{
if (fArrayLength) return fArrayLength*sizeof(TString);
return sizeof(TString);
}
void TStreamerString::Streamer(TBuffer &R__b)
{
UInt_t R__s, R__c;
if (R__b.IsReading()) {
Version_t R__v = R__b.ReadVersion(&R__s, &R__c);
if (R__v > 1) {
R__b.ReadClassBuffer(TStreamerString::Class(), this, R__v, R__s, R__c);
return;
}
TStreamerElement::Streamer(R__b);
R__b.CheckByteCount(R__s, R__c, TStreamerString::IsA());
} else {
R__b.WriteClassBuffer(TStreamerString::Class(),this);
}
}
ClassImp(TStreamerSTL)
TStreamerSTL::TStreamerSTL()
{
}
TStreamerSTL::TStreamerSTL(const char *name, const char *title, Int_t offset,
const char *typeName, const char *trueType, Bool_t dmPointer)
: TStreamerElement(name,title,offset,kSTL,typeName)
{
const char *t = trueType;
if (!t || !*t) t = typeName;
fTypeName = TClassEdit::ShortType(fTypeName,TClassEdit::kDropStlDefault).c_str();
if (name==typeName
|| strcmp(name,typeName)==0) {
fName = fTypeName;
}
Int_t nch = strlen(t);
char *s = new char[nch+1];
strcpy(s,t);
char *sopen = strchr(s,'<'); *sopen = 0; sopen++;
char* current=sopen;
for(int count = 0; *current!='\0'; current++) {
if (*current=='<') count++;
if (*current=='>') {
if (count==0) break;
count--;
}
if (*current==',' && count==0) break;
}
char *sclose = current; *sclose = 0; sclose--;
char *sconst = strstr(sopen,"const ");
char *sbracket = strstr(sopen,"<");
if (sconst && (sbracket==0 || sconst < sbracket)) {
char *pconst = sconst-1;
if (*pconst == ' ' || *pconst == '<' || *pconst == '*' || *pconst == '\0') sopen = sconst + 5;
}
fSTLtype = 0;
fCtype = 0;
if (strstr(s,"vector")) fSTLtype = kSTLvector;
else if (strstr(s,"list")) fSTLtype = kSTLlist;
else if (strstr(s,"deque")) fSTLtype = kSTLdeque;
else if (strstr(s,"multimap")) fSTLtype = kSTLmultimap;
else if (strstr(s,"multiset")) fSTLtype = kSTLmultiset;
else if (strstr(s,"bitset")) fSTLtype = kSTLbitset;
else if (strstr(s,"map")) fSTLtype = kSTLmap;
else if (strstr(s,"set")) fSTLtype = kSTLset;
if (fSTLtype == 0) { delete [] s; return;}
if (dmPointer) fSTLtype += TVirtualStreamerInfo::kOffsetP;
while (*sopen==' ') sopen++;
Bool_t isPointer = kFALSE;
char *star = strrchr(sopen,'>');
if (star) star = strchr(star,'*');
else star = strchr(sopen,'*');
if (star) {
isPointer = kTRUE;
*star = 0;
sclose = star - 1;
}
while (*sclose == ' ') {*sclose = 0; sclose--;}
TDataType *dt = (TDataType*)gROOT->GetListOfTypes()->FindObject(sopen);
if (fSTLtype == kSTLbitset) {
} else if (dt) {
fCtype = dt->GetType();
if (isPointer) fCtype += TVirtualStreamerInfo::kOffsetP;
} else {
TClass *cl = TClass::GetClass(sopen);
if (cl) {
if (isPointer) fCtype = TVirtualStreamerInfo::kObjectp;
else fCtype = TVirtualStreamerInfo::kObject;
} else {
if (gCint->ClassInfo_IsEnum(sopen)) {
if (isPointer) fCtype += TVirtualStreamerInfo::kOffsetP;
} else {
if(strcmp(sopen,"string")) {
if (GetClassPointer() && GetClassPointer()->IsLoaded()) {
Warning("TStreamerSTL","For %s we could not find any information about the type %s %d %s",fTypeName.Data(),sopen,fSTLtype,s);
}
}
}
}
}
delete [] s;
if (TStreamerSTL::IsaPointer()) fType = TVirtualStreamerInfo::kSTLp;
}
TStreamerSTL::~TStreamerSTL()
{
}
Bool_t TStreamerSTL::CannotSplit() const
{
if (IsaPointer()) {
if (GetTitle()[0]=='[') return kTRUE;
return kTRUE;
}
if (GetArrayDim()>=1 && GetArrayLength()>1) return kTRUE;
if (TStreamerElement::CannotSplit()) return kTRUE;
return kFALSE;
}
Bool_t TStreamerSTL::IsaPointer() const
{
const char *type_name = GetTypeName();
if ( type_name[strlen(type_name)-1]=='*' ) return kTRUE;
else return kFALSE;
}
Bool_t TStreamerSTL::IsBase() const
{
TString ts(GetName());
if (strcmp(ts.Data(),GetTypeName())==0) return kTRUE;
if (strcmp(ts.Data(),GetTypeNameBasic())==0) return kTRUE;
return kFALSE;
}
Int_t TStreamerSTL::GetSize() const
{
UInt_t size = GetClassPointer()->Size();
if (fArrayLength) return fArrayLength*size;
return size;
}
void TStreamerSTL::ls(Option_t *) const
{
char name[kMaxLen];
char cdim[20];
sprintf(name,"%s",GetName());
for (Int_t i=0;i<fArrayDim;i++) {
sprintf(cdim,"[%d]",fMaxIndex[i]);
strcat(name,cdim);
}
printf(" %-14s %-15s offset=%3d type=%2d %s,stl=%d, ctype=%d, %-20s\n",
GetTypeName(),name,fOffset,fType,TestBit(kCache)?"(cached)":"",
fSTLtype,fCtype,GetTitle());
}
const char *TStreamerSTL::GetInclude() const
{
if (fSTLtype == kSTLvector) sprintf(gIncludeName,"<%s>","vector");
else if (fSTLtype == kSTLlist) sprintf(gIncludeName,"<%s>","list");
else if (fSTLtype == kSTLdeque) sprintf(gIncludeName,"<%s>","deque");
else if (fSTLtype == kSTLmap) sprintf(gIncludeName,"<%s>","map");
else if (fSTLtype == kSTLset) sprintf(gIncludeName,"<%s>","set");
else if (fSTLtype == kSTLmultimap) sprintf(gIncludeName,"<%s>","multimap");
else if (fSTLtype == kSTLmultiset) sprintf(gIncludeName,"<%s>","multiset");
else if (fSTLtype == kSTLbitset) sprintf(gIncludeName,"<%s>","bitset");
return gIncludeName;
}
void TStreamerSTL::SetStreamer(TMemberStreamer *streamer)
{
fStreamer = streamer;
}
void TStreamerSTL::Streamer(TBuffer &R__b)
{
UInt_t R__s, R__c;
if (R__b.IsReading()) {
Version_t R__v = R__b.ReadVersion(&R__s, &R__c);
if (R__v > 2) {
R__b.ReadClassBuffer(TStreamerSTL::Class(), this, R__v, R__s, R__c);
} else {
TStreamerElement::Streamer(R__b);
R__b >> fSTLtype;
R__b >> fCtype;
R__b.CheckByteCount(R__s, R__c, TStreamerSTL::IsA());
}
if (IsaPointer()) fType = TVirtualStreamerInfo::kSTLp;
else fType = TVirtualStreamerInfo::kSTL;
return;
} else {
Int_t tmp = fType;
fType = TVirtualStreamerInfo::kStreamer;
R__b.WriteClassBuffer(TStreamerSTL::Class(),this);
fType = tmp;
}
}
ClassImp(TStreamerSTLstring)
TStreamerSTLstring::TStreamerSTLstring()
{
}
TStreamerSTLstring::TStreamerSTLstring(const char *name, const char *title, Int_t offset,
const char *typeName, Bool_t dmPointer)
: TStreamerSTL()
{
SetName(name);
SetTitle(title);
if (dmPointer) {
fType = TVirtualStreamerInfo::kSTLp;
} else {
fType = TVirtualStreamerInfo::kSTL;
}
fNewType = fType;
fOffset = offset;
fSTLtype = kSTLstring;
fCtype = kSTLstring;
fTypeName= typeName;
}
TStreamerSTLstring::~TStreamerSTLstring()
{
}
const char *TStreamerSTLstring::GetInclude() const
{
sprintf(gIncludeName,"<string>");
return gIncludeName;
}
Int_t TStreamerSTLstring::GetSize() const
{
if (fArrayLength) return fArrayLength*sizeof(string);
return sizeof(string);
}
void TStreamerSTLstring::Streamer(TBuffer &R__b)
{
UInt_t R__s, R__c;
if (R__b.IsReading()) {
Version_t R__v = R__b.ReadVersion(&R__s, &R__c);
if (R__v > 1) {
R__b.ReadClassBuffer(TStreamerSTLstring::Class(), this, R__v, R__s, R__c);
return;
}
TStreamerSTL::Streamer(R__b);
R__b.CheckByteCount(R__s, R__c, TStreamerSTLstring::IsA());
} else {
R__b.WriteClassBuffer(TStreamerSTLstring::Class(),this);
}
}
ClassImp(TStreamerSTLstring);
void TStreamerArtificial::Streamer(TBuffer& )
{
return;
}
ROOT::TSchemaRule::ReadFuncPtr_t TStreamerArtificial::GetReadFunc()
{
return fReadFunc;
}
ROOT::TSchemaRule::ReadRawFuncPtr_t TStreamerArtificial::GetReadRawFunc()
{
return fReadRawFunc;
}
TStreamerElement.cxx:1000 TStreamerElement.cxx:1001 TStreamerElement.cxx:1002 TStreamerElement.cxx:1003 TStreamerElement.cxx:1004 TStreamerElement.cxx:1005 TStreamerElement.cxx:1006 TStreamerElement.cxx:1007 TStreamerElement.cxx:1008 TStreamerElement.cxx:1009 TStreamerElement.cxx:1010 TStreamerElement.cxx:1011 TStreamerElement.cxx:1012 TStreamerElement.cxx:1013 TStreamerElement.cxx:1014 TStreamerElement.cxx:1015 TStreamerElement.cxx:1016 TStreamerElement.cxx:1017 TStreamerElement.cxx:1018 TStreamerElement.cxx:1019 TStreamerElement.cxx:1020 TStreamerElement.cxx:1021 TStreamerElement.cxx:1022 TStreamerElement.cxx:1023 TStreamerElement.cxx:1024 TStreamerElement.cxx:1025 TStreamerElement.cxx:1026 TStreamerElement.cxx:1027 TStreamerElement.cxx:1028 TStreamerElement.cxx:1029 TStreamerElement.cxx:1030 TStreamerElement.cxx:1031 TStreamerElement.cxx:1032 TStreamerElement.cxx:1033 TStreamerElement.cxx:1034 TStreamerElement.cxx:1035 TStreamerElement.cxx:1036 TStreamerElement.cxx:1037 TStreamerElement.cxx:1038 TStreamerElement.cxx:1039 TStreamerElement.cxx:1040 TStreamerElement.cxx:1041 TStreamerElement.cxx:1042 TStreamerElement.cxx:1043 TStreamerElement.cxx:1044 TStreamerElement.cxx:1045 TStreamerElement.cxx:1046 TStreamerElement.cxx:1047 TStreamerElement.cxx:1048 TStreamerElement.cxx:1049 TStreamerElement.cxx:1050 TStreamerElement.cxx:1051 TStreamerElement.cxx:1052 TStreamerElement.cxx:1053 TStreamerElement.cxx:1054 TStreamerElement.cxx:1055 TStreamerElement.cxx:1056 TStreamerElement.cxx:1057 TStreamerElement.cxx:1058 TStreamerElement.cxx:1059 TStreamerElement.cxx:1060 TStreamerElement.cxx:1061 TStreamerElement.cxx:1062 TStreamerElement.cxx:1063 TStreamerElement.cxx:1064 TStreamerElement.cxx:1065 TStreamerElement.cxx:1066 TStreamerElement.cxx:1067 TStreamerElement.cxx:1068 TStreamerElement.cxx:1069 TStreamerElement.cxx:1070 TStreamerElement.cxx:1071 TStreamerElement.cxx:1072 TStreamerElement.cxx:1073 TStreamerElement.cxx:1074 TStreamerElement.cxx:1075 TStreamerElement.cxx:1076 TStreamerElement.cxx:1077 TStreamerElement.cxx:1078 TStreamerElement.cxx:1079 TStreamerElement.cxx:1080 TStreamerElement.cxx:1081 TStreamerElement.cxx:1082 TStreamerElement.cxx:1083 TStreamerElement.cxx:1084 TStreamerElement.cxx:1085 TStreamerElement.cxx:1086 TStreamerElement.cxx:1087 TStreamerElement.cxx:1088 TStreamerElement.cxx:1089 TStreamerElement.cxx:1090 TStreamerElement.cxx:1091 TStreamerElement.cxx:1092 TStreamerElement.cxx:1093 TStreamerElement.cxx:1094 TStreamerElement.cxx:1095 TStreamerElement.cxx:1096 TStreamerElement.cxx:1097 TStreamerElement.cxx:1098 TStreamerElement.cxx:1099 TStreamerElement.cxx:1100 TStreamerElement.cxx:1101 TStreamerElement.cxx:1102 TStreamerElement.cxx:1103 TStreamerElement.cxx:1104 TStreamerElement.cxx:1105 TStreamerElement.cxx:1106 TStreamerElement.cxx:1107 TStreamerElement.cxx:1108 TStreamerElement.cxx:1109 TStreamerElement.cxx:1110 TStreamerElement.cxx:1111 TStreamerElement.cxx:1112 TStreamerElement.cxx:1113 TStreamerElement.cxx:1114 TStreamerElement.cxx:1115 TStreamerElement.cxx:1116 TStreamerElement.cxx:1117 TStreamerElement.cxx:1118 TStreamerElement.cxx:1119 TStreamerElement.cxx:1120 TStreamerElement.cxx:1121 TStreamerElement.cxx:1122 TStreamerElement.cxx:1123 TStreamerElement.cxx:1124 TStreamerElement.cxx:1125 TStreamerElement.cxx:1126 TStreamerElement.cxx:1127 TStreamerElement.cxx:1128 TStreamerElement.cxx:1129 TStreamerElement.cxx:1130 TStreamerElement.cxx:1131 TStreamerElement.cxx:1132 TStreamerElement.cxx:1133 TStreamerElement.cxx:1134 TStreamerElement.cxx:1135 TStreamerElement.cxx:1136 TStreamerElement.cxx:1137 TStreamerElement.cxx:1138 TStreamerElement.cxx:1139 TStreamerElement.cxx:1140 TStreamerElement.cxx:1141 TStreamerElement.cxx:1142 TStreamerElement.cxx:1143 TStreamerElement.cxx:1144 TStreamerElement.cxx:1145 TStreamerElement.cxx:1146 TStreamerElement.cxx:1147 TStreamerElement.cxx:1148 TStreamerElement.cxx:1149 TStreamerElement.cxx:1150 TStreamerElement.cxx:1151 TStreamerElement.cxx:1152 TStreamerElement.cxx:1153 TStreamerElement.cxx:1154 TStreamerElement.cxx:1155 TStreamerElement.cxx:1156 TStreamerElement.cxx:1157 TStreamerElement.cxx:1158 TStreamerElement.cxx:1159 TStreamerElement.cxx:1160 TStreamerElement.cxx:1161 TStreamerElement.cxx:1162 TStreamerElement.cxx:1163 TStreamerElement.cxx:1164 TStreamerElement.cxx:1165 TStreamerElement.cxx:1166 TStreamerElement.cxx:1167 TStreamerElement.cxx:1168 TStreamerElement.cxx:1169 TStreamerElement.cxx:1170 TStreamerElement.cxx:1171 TStreamerElement.cxx:1172 TStreamerElement.cxx:1173 TStreamerElement.cxx:1174 TStreamerElement.cxx:1175 TStreamerElement.cxx:1176 TStreamerElement.cxx:1177 TStreamerElement.cxx:1178 TStreamerElement.cxx:1179 TStreamerElement.cxx:1180 TStreamerElement.cxx:1181 TStreamerElement.cxx:1182 TStreamerElement.cxx:1183 TStreamerElement.cxx:1184 TStreamerElement.cxx:1185 TStreamerElement.cxx:1186 TStreamerElement.cxx:1187 TStreamerElement.cxx:1188 TStreamerElement.cxx:1189 TStreamerElement.cxx:1190 TStreamerElement.cxx:1191 TStreamerElement.cxx:1192 TStreamerElement.cxx:1193 TStreamerElement.cxx:1194 TStreamerElement.cxx:1195 TStreamerElement.cxx:1196 TStreamerElement.cxx:1197 TStreamerElement.cxx:1198 TStreamerElement.cxx:1199 TStreamerElement.cxx:1200 TStreamerElement.cxx:1201 TStreamerElement.cxx:1202 TStreamerElement.cxx:1203 TStreamerElement.cxx:1204 TStreamerElement.cxx:1205 TStreamerElement.cxx:1206 TStreamerElement.cxx:1207 TStreamerElement.cxx:1208 TStreamerElement.cxx:1209 TStreamerElement.cxx:1210 TStreamerElement.cxx:1211 TStreamerElement.cxx:1212 TStreamerElement.cxx:1213 TStreamerElement.cxx:1214 TStreamerElement.cxx:1215 TStreamerElement.cxx:1216 TStreamerElement.cxx:1217 TStreamerElement.cxx:1218 TStreamerElement.cxx:1219 TStreamerElement.cxx:1220 TStreamerElement.cxx:1221 TStreamerElement.cxx:1222 TStreamerElement.cxx:1223 TStreamerElement.cxx:1224 TStreamerElement.cxx:1225 TStreamerElement.cxx:1226 TStreamerElement.cxx:1227 TStreamerElement.cxx:1228 TStreamerElement.cxx:1229 TStreamerElement.cxx:1230 TStreamerElement.cxx:1231 TStreamerElement.cxx:1232 TStreamerElement.cxx:1233 TStreamerElement.cxx:1234 TStreamerElement.cxx:1235 TStreamerElement.cxx:1236 TStreamerElement.cxx:1237 TStreamerElement.cxx:1238 TStreamerElement.cxx:1239 TStreamerElement.cxx:1240 TStreamerElement.cxx:1241 TStreamerElement.cxx:1242 TStreamerElement.cxx:1243 TStreamerElement.cxx:1244 TStreamerElement.cxx:1245 TStreamerElement.cxx:1246 TStreamerElement.cxx:1247 TStreamerElement.cxx:1248 TStreamerElement.cxx:1249 TStreamerElement.cxx:1250 TStreamerElement.cxx:1251 TStreamerElement.cxx:1252 TStreamerElement.cxx:1253 TStreamerElement.cxx:1254 TStreamerElement.cxx:1255 TStreamerElement.cxx:1256 TStreamerElement.cxx:1257 TStreamerElement.cxx:1258 TStreamerElement.cxx:1259 TStreamerElement.cxx:1260 TStreamerElement.cxx:1261 TStreamerElement.cxx:1262 TStreamerElement.cxx:1263 TStreamerElement.cxx:1264 TStreamerElement.cxx:1265 TStreamerElement.cxx:1266 TStreamerElement.cxx:1267 TStreamerElement.cxx:1268 TStreamerElement.cxx:1269 TStreamerElement.cxx:1270 TStreamerElement.cxx:1271 TStreamerElement.cxx:1272 TStreamerElement.cxx:1273 TStreamerElement.cxx:1274 TStreamerElement.cxx:1275 TStreamerElement.cxx:1276 TStreamerElement.cxx:1277 TStreamerElement.cxx:1278 TStreamerElement.cxx:1279 TStreamerElement.cxx:1280 TStreamerElement.cxx:1281 TStreamerElement.cxx:1282 TStreamerElement.cxx:1283 TStreamerElement.cxx:1284 TStreamerElement.cxx:1285 TStreamerElement.cxx:1286 TStreamerElement.cxx:1287 TStreamerElement.cxx:1288 TStreamerElement.cxx:1289 TStreamerElement.cxx:1290 TStreamerElement.cxx:1291 TStreamerElement.cxx:1292 TStreamerElement.cxx:1293 TStreamerElement.cxx:1294 TStreamerElement.cxx:1295 TStreamerElement.cxx:1296 TStreamerElement.cxx:1297 TStreamerElement.cxx:1298 TStreamerElement.cxx:1299 TStreamerElement.cxx:1300 TStreamerElement.cxx:1301 TStreamerElement.cxx:1302 TStreamerElement.cxx:1303 TStreamerElement.cxx:1304 TStreamerElement.cxx:1305 TStreamerElement.cxx:1306 TStreamerElement.cxx:1307 TStreamerElement.cxx:1308 TStreamerElement.cxx:1309 TStreamerElement.cxx:1310 TStreamerElement.cxx:1311 TStreamerElement.cxx:1312 TStreamerElement.cxx:1313 TStreamerElement.cxx:1314 TStreamerElement.cxx:1315 TStreamerElement.cxx:1316 TStreamerElement.cxx:1317 TStreamerElement.cxx:1318 TStreamerElement.cxx:1319 TStreamerElement.cxx:1320 TStreamerElement.cxx:1321 TStreamerElement.cxx:1322 TStreamerElement.cxx:1323 TStreamerElement.cxx:1324 TStreamerElement.cxx:1325 TStreamerElement.cxx:1326 TStreamerElement.cxx:1327 TStreamerElement.cxx:1328 TStreamerElement.cxx:1329 TStreamerElement.cxx:1330 TStreamerElement.cxx:1331 TStreamerElement.cxx:1332 TStreamerElement.cxx:1333 TStreamerElement.cxx:1334 TStreamerElement.cxx:1335 TStreamerElement.cxx:1336 TStreamerElement.cxx:1337 TStreamerElement.cxx:1338 TStreamerElement.cxx:1339 TStreamerElement.cxx:1340 TStreamerElement.cxx:1341 TStreamerElement.cxx:1342 TStreamerElement.cxx:1343 TStreamerElement.cxx:1344 TStreamerElement.cxx:1345 TStreamerElement.cxx:1346 TStreamerElement.cxx:1347 TStreamerElement.cxx:1348 TStreamerElement.cxx:1349 TStreamerElement.cxx:1350 TStreamerElement.cxx:1351 TStreamerElement.cxx:1352 TStreamerElement.cxx:1353 TStreamerElement.cxx:1354 TStreamerElement.cxx:1355 TStreamerElement.cxx:1356 TStreamerElement.cxx:1357 TStreamerElement.cxx:1358 TStreamerElement.cxx:1359 TStreamerElement.cxx:1360 TStreamerElement.cxx:1361 TStreamerElement.cxx:1362 TStreamerElement.cxx:1363 TStreamerElement.cxx:1364 TStreamerElement.cxx:1365 TStreamerElement.cxx:1366 TStreamerElement.cxx:1367 TStreamerElement.cxx:1368 TStreamerElement.cxx:1369 TStreamerElement.cxx:1370 TStreamerElement.cxx:1371 TStreamerElement.cxx:1372 TStreamerElement.cxx:1373 TStreamerElement.cxx:1374 TStreamerElement.cxx:1375 TStreamerElement.cxx:1376 TStreamerElement.cxx:1377 TStreamerElement.cxx:1378 TStreamerElement.cxx:1379 TStreamerElement.cxx:1380 TStreamerElement.cxx:1381 TStreamerElement.cxx:1382 TStreamerElement.cxx:1383 TStreamerElement.cxx:1384 TStreamerElement.cxx:1385 TStreamerElement.cxx:1386 TStreamerElement.cxx:1387 TStreamerElement.cxx:1388 TStreamerElement.cxx:1389 TStreamerElement.cxx:1390 TStreamerElement.cxx:1391 TStreamerElement.cxx:1392 TStreamerElement.cxx:1393 TStreamerElement.cxx:1394 TStreamerElement.cxx:1395 TStreamerElement.cxx:1396 TStreamerElement.cxx:1397 TStreamerElement.cxx:1398 TStreamerElement.cxx:1399 TStreamerElement.cxx:1400 TStreamerElement.cxx:1401 TStreamerElement.cxx:1402 TStreamerElement.cxx:1403 TStreamerElement.cxx:1404 TStreamerElement.cxx:1405 TStreamerElement.cxx:1406 TStreamerElement.cxx:1407 TStreamerElement.cxx:1408 TStreamerElement.cxx:1409 TStreamerElement.cxx:1410 TStreamerElement.cxx:1411 TStreamerElement.cxx:1412 TStreamerElement.cxx:1413 TStreamerElement.cxx:1414 TStreamerElement.cxx:1415 TStreamerElement.cxx:1416 TStreamerElement.cxx:1417 TStreamerElement.cxx:1418 TStreamerElement.cxx:1419 TStreamerElement.cxx:1420 TStreamerElement.cxx:1421 TStreamerElement.cxx:1422 TStreamerElement.cxx:1423 TStreamerElement.cxx:1424 TStreamerElement.cxx:1425 TStreamerElement.cxx:1426 TStreamerElement.cxx:1427 TStreamerElement.cxx:1428 TStreamerElement.cxx:1429 TStreamerElement.cxx:1430 TStreamerElement.cxx:1431 TStreamerElement.cxx:1432 TStreamerElement.cxx:1433 TStreamerElement.cxx:1434 TStreamerElement.cxx:1435 TStreamerElement.cxx:1436 TStreamerElement.cxx:1437 TStreamerElement.cxx:1438 TStreamerElement.cxx:1439 TStreamerElement.cxx:1440 TStreamerElement.cxx:1441 TStreamerElement.cxx:1442 TStreamerElement.cxx:1443 TStreamerElement.cxx:1444 TStreamerElement.cxx:1445 TStreamerElement.cxx:1446 TStreamerElement.cxx:1447 TStreamerElement.cxx:1448 TStreamerElement.cxx:1449 TStreamerElement.cxx:1450 TStreamerElement.cxx:1451 TStreamerElement.cxx:1452 TStreamerElement.cxx:1453 TStreamerElement.cxx:1454 TStreamerElement.cxx:1455 TStreamerElement.cxx:1456 TStreamerElement.cxx:1457 TStreamerElement.cxx:1458 TStreamerElement.cxx:1459 TStreamerElement.cxx:1460 TStreamerElement.cxx:1461 TStreamerElement.cxx:1462 TStreamerElement.cxx:1463 TStreamerElement.cxx:1464 TStreamerElement.cxx:1465 TStreamerElement.cxx:1466 TStreamerElement.cxx:1467 TStreamerElement.cxx:1468 TStreamerElement.cxx:1469 TStreamerElement.cxx:1470 TStreamerElement.cxx:1471 TStreamerElement.cxx:1472 TStreamerElement.cxx:1473 TStreamerElement.cxx:1474 TStreamerElement.cxx:1475 TStreamerElement.cxx:1476 TStreamerElement.cxx:1477 TStreamerElement.cxx:1478 TStreamerElement.cxx:1479 TStreamerElement.cxx:1480 TStreamerElement.cxx:1481 TStreamerElement.cxx:1482 TStreamerElement.cxx:1483 TStreamerElement.cxx:1484 TStreamerElement.cxx:1485 TStreamerElement.cxx:1486 TStreamerElement.cxx:1487 TStreamerElement.cxx:1488 TStreamerElement.cxx:1489 TStreamerElement.cxx:1490 TStreamerElement.cxx:1491 TStreamerElement.cxx:1492 TStreamerElement.cxx:1493 TStreamerElement.cxx:1494 TStreamerElement.cxx:1495 TStreamerElement.cxx:1496 TStreamerElement.cxx:1497 TStreamerElement.cxx:1498 TStreamerElement.cxx:1499 TStreamerElement.cxx:1500 TStreamerElement.cxx:1501 TStreamerElement.cxx:1502 TStreamerElement.cxx:1503 TStreamerElement.cxx:1504 TStreamerElement.cxx:1505 TStreamerElement.cxx:1506 TStreamerElement.cxx:1507 TStreamerElement.cxx:1508 TStreamerElement.cxx:1509 TStreamerElement.cxx:1510 TStreamerElement.cxx:1511 TStreamerElement.cxx:1512 TStreamerElement.cxx:1513 TStreamerElement.cxx:1514 TStreamerElement.cxx:1515 TStreamerElement.cxx:1516 TStreamerElement.cxx:1517 TStreamerElement.cxx:1518 TStreamerElement.cxx:1519 TStreamerElement.cxx:1520 TStreamerElement.cxx:1521 TStreamerElement.cxx:1522 TStreamerElement.cxx:1523 TStreamerElement.cxx:1524 TStreamerElement.cxx:1525 TStreamerElement.cxx:1526 TStreamerElement.cxx:1527 TStreamerElement.cxx:1528 TStreamerElement.cxx:1529 TStreamerElement.cxx:1530 TStreamerElement.cxx:1531 TStreamerElement.cxx:1532 TStreamerElement.cxx:1533 TStreamerElement.cxx:1534 TStreamerElement.cxx:1535 TStreamerElement.cxx:1536 TStreamerElement.cxx:1537 TStreamerElement.cxx:1538 TStreamerElement.cxx:1539 TStreamerElement.cxx:1540 TStreamerElement.cxx:1541 TStreamerElement.cxx:1542 TStreamerElement.cxx:1543 TStreamerElement.cxx:1544 TStreamerElement.cxx:1545 TStreamerElement.cxx:1546 TStreamerElement.cxx:1547 TStreamerElement.cxx:1548 TStreamerElement.cxx:1549 TStreamerElement.cxx:1550 TStreamerElement.cxx:1551 TStreamerElement.cxx:1552 TStreamerElement.cxx:1553 TStreamerElement.cxx:1554 TStreamerElement.cxx:1555 TStreamerElement.cxx:1556 TStreamerElement.cxx:1557 TStreamerElement.cxx:1558 TStreamerElement.cxx:1559 TStreamerElement.cxx:1560 TStreamerElement.cxx:1561 TStreamerElement.cxx:1562 TStreamerElement.cxx:1563 TStreamerElement.cxx:1564 TStreamerElement.cxx:1565 TStreamerElement.cxx:1566 TStreamerElement.cxx:1567 TStreamerElement.cxx:1568 TStreamerElement.cxx:1569 TStreamerElement.cxx:1570 TStreamerElement.cxx:1571 TStreamerElement.cxx:1572 TStreamerElement.cxx:1573 TStreamerElement.cxx:1574 TStreamerElement.cxx:1575 TStreamerElement.cxx:1576 TStreamerElement.cxx:1577 TStreamerElement.cxx:1578 TStreamerElement.cxx:1579 TStreamerElement.cxx:1580 TStreamerElement.cxx:1581 TStreamerElement.cxx:1582 TStreamerElement.cxx:1583 TStreamerElement.cxx:1584 TStreamerElement.cxx:1585 TStreamerElement.cxx:1586 TStreamerElement.cxx:1587 TStreamerElement.cxx:1588 TStreamerElement.cxx:1589 TStreamerElement.cxx:1590 TStreamerElement.cxx:1591 TStreamerElement.cxx:1592 TStreamerElement.cxx:1593 TStreamerElement.cxx:1594 TStreamerElement.cxx:1595 TStreamerElement.cxx:1596 TStreamerElement.cxx:1597 TStreamerElement.cxx:1598 TStreamerElement.cxx:1599 TStreamerElement.cxx:1600 TStreamerElement.cxx:1601 TStreamerElement.cxx:1602 TStreamerElement.cxx:1603 TStreamerElement.cxx:1604 TStreamerElement.cxx:1605 TStreamerElement.cxx:1606 TStreamerElement.cxx:1607 TStreamerElement.cxx:1608 TStreamerElement.cxx:1609 TStreamerElement.cxx:1610 TStreamerElement.cxx:1611 TStreamerElement.cxx:1612 TStreamerElement.cxx:1613 TStreamerElement.cxx:1614 TStreamerElement.cxx:1615 TStreamerElement.cxx:1616 TStreamerElement.cxx:1617 TStreamerElement.cxx:1618 TStreamerElement.cxx:1619 TStreamerElement.cxx:1620 TStreamerElement.cxx:1621 TStreamerElement.cxx:1622 TStreamerElement.cxx:1623 TStreamerElement.cxx:1624 TStreamerElement.cxx:1625 TStreamerElement.cxx:1626 TStreamerElement.cxx:1627 TStreamerElement.cxx:1628 TStreamerElement.cxx:1629 TStreamerElement.cxx:1630 TStreamerElement.cxx:1631 TStreamerElement.cxx:1632 TStreamerElement.cxx:1633 TStreamerElement.cxx:1634 TStreamerElement.cxx:1635 TStreamerElement.cxx:1636 TStreamerElement.cxx:1637 TStreamerElement.cxx:1638 TStreamerElement.cxx:1639 TStreamerElement.cxx:1640 TStreamerElement.cxx:1641 TStreamerElement.cxx:1642 TStreamerElement.cxx:1643 TStreamerElement.cxx:1644 TStreamerElement.cxx:1645 TStreamerElement.cxx:1646 TStreamerElement.cxx:1647 TStreamerElement.cxx:1648 TStreamerElement.cxx:1649 TStreamerElement.cxx:1650 TStreamerElement.cxx:1651 TStreamerElement.cxx:1652 TStreamerElement.cxx:1653 TStreamerElement.cxx:1654 TStreamerElement.cxx:1655 TStreamerElement.cxx:1656 TStreamerElement.cxx:1657 TStreamerElement.cxx:1658 TStreamerElement.cxx:1659 TStreamerElement.cxx:1660 TStreamerElement.cxx:1661 TStreamerElement.cxx:1662 TStreamerElement.cxx:1663 TStreamerElement.cxx:1664 TStreamerElement.cxx:1665 TStreamerElement.cxx:1666 TStreamerElement.cxx:1667 TStreamerElement.cxx:1668 TStreamerElement.cxx:1669 TStreamerElement.cxx:1670 TStreamerElement.cxx:1671 TStreamerElement.cxx:1672 TStreamerElement.cxx:1673 TStreamerElement.cxx:1674 TStreamerElement.cxx:1675 TStreamerElement.cxx:1676 TStreamerElement.cxx:1677 TStreamerElement.cxx:1678 TStreamerElement.cxx:1679 TStreamerElement.cxx:1680 TStreamerElement.cxx:1681 TStreamerElement.cxx:1682 TStreamerElement.cxx:1683 TStreamerElement.cxx:1684 TStreamerElement.cxx:1685 TStreamerElement.cxx:1686 TStreamerElement.cxx:1687 TStreamerElement.cxx:1688 TStreamerElement.cxx:1689 TStreamerElement.cxx:1690 TStreamerElement.cxx:1691 TStreamerElement.cxx:1692 TStreamerElement.cxx:1693 TStreamerElement.cxx:1694 TStreamerElement.cxx:1695 TStreamerElement.cxx:1696 TStreamerElement.cxx:1697 TStreamerElement.cxx:1698 TStreamerElement.cxx:1699 TStreamerElement.cxx:1700 TStreamerElement.cxx:1701 TStreamerElement.cxx:1702 TStreamerElement.cxx:1703 TStreamerElement.cxx:1704 TStreamerElement.cxx:1705 TStreamerElement.cxx:1706 TStreamerElement.cxx:1707 TStreamerElement.cxx:1708 TStreamerElement.cxx:1709 TStreamerElement.cxx:1710 TStreamerElement.cxx:1711 TStreamerElement.cxx:1712 TStreamerElement.cxx:1713 TStreamerElement.cxx:1714 TStreamerElement.cxx:1715 TStreamerElement.cxx:1716 TStreamerElement.cxx:1717 TStreamerElement.cxx:1718 TStreamerElement.cxx:1719 TStreamerElement.cxx:1720 TStreamerElement.cxx:1721 TStreamerElement.cxx:1722 TStreamerElement.cxx:1723 TStreamerElement.cxx:1724 TStreamerElement.cxx:1725 TStreamerElement.cxx:1726 TStreamerElement.cxx:1727 TStreamerElement.cxx:1728 TStreamerElement.cxx:1729 TStreamerElement.cxx:1730 TStreamerElement.cxx:1731 TStreamerElement.cxx:1732 TStreamerElement.cxx:1733 TStreamerElement.cxx:1734 TStreamerElement.cxx:1735 TStreamerElement.cxx:1736 TStreamerElement.cxx:1737 TStreamerElement.cxx:1738 TStreamerElement.cxx:1739 TStreamerElement.cxx:1740 TStreamerElement.cxx:1741 TStreamerElement.cxx:1742 TStreamerElement.cxx:1743 TStreamerElement.cxx:1744 TStreamerElement.cxx:1745 TStreamerElement.cxx:1746 TStreamerElement.cxx:1747 TStreamerElement.cxx:1748 TStreamerElement.cxx:1749 TStreamerElement.cxx:1750 TStreamerElement.cxx:1751 TStreamerElement.cxx:1752 TStreamerElement.cxx:1753 TStreamerElement.cxx:1754 TStreamerElement.cxx:1755 TStreamerElement.cxx:1756 TStreamerElement.cxx:1757 TStreamerElement.cxx:1758 TStreamerElement.cxx:1759 TStreamerElement.cxx:1760 TStreamerElement.cxx:1761 TStreamerElement.cxx:1762 TStreamerElement.cxx:1763 TStreamerElement.cxx:1764 TStreamerElement.cxx:1765 TStreamerElement.cxx:1766 TStreamerElement.cxx:1767 TStreamerElement.cxx:1768 TStreamerElement.cxx:1769 TStreamerElement.cxx:1770 TStreamerElement.cxx:1771 TStreamerElement.cxx:1772 TStreamerElement.cxx:1773 TStreamerElement.cxx:1774 TStreamerElement.cxx:1775 TStreamerElement.cxx:1776 TStreamerElement.cxx:1777 TStreamerElement.cxx:1778 TStreamerElement.cxx:1779 TStreamerElement.cxx:1780 TStreamerElement.cxx:1781 TStreamerElement.cxx:1782 TStreamerElement.cxx:1783 TStreamerElement.cxx:1784 TStreamerElement.cxx:1785 TStreamerElement.cxx:1786 TStreamerElement.cxx:1787 TStreamerElement.cxx:1788 TStreamerElement.cxx:1789 TStreamerElement.cxx:1790 TStreamerElement.cxx:1791 TStreamerElement.cxx:1792 TStreamerElement.cxx:1793 TStreamerElement.cxx:1794 TStreamerElement.cxx:1795 TStreamerElement.cxx:1796 TStreamerElement.cxx:1797