X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=RAW%2FAliRawEventHeaderBase.cxx;h=10beea21dc32ee14552e36d0beba1bf3f7d8dd88;hb=6a150f830ea3a11d55a7dd0fd7861d53c5f71948;hp=b70c775c6ec894ea71150e0433b089ef01458c40;hpb=ec835ab5accc3aa70fef88149d7e5ab47ea96673;p=u%2Fmrichter%2FAliRoot.git diff --git a/RAW/AliRawEventHeaderBase.cxx b/RAW/AliRawEventHeaderBase.cxx index b70c775c6ec..10beea21dc3 100644 --- a/RAW/AliRawEventHeaderBase.cxx +++ b/RAW/AliRawEventHeaderBase.cxx @@ -49,17 +49,23 @@ fVersion(0), fExtendedDataSize(0), fExtendedAllocSize(0), fExtendedData(NULL), -fIsSwapped(kFALSE) +fIsSwapped(kFALSE), +fHeaderSize(0), +fHeaderBegin(NULL), +fFirstEqIndex(-1), +fLastEqIndex(-1) { // Default constructor } //______________________________________________________________________________ -void *AliRawEventHeaderBase::HeaderBegin() +void *AliRawEventHeaderBase::HeaderBegin() const { // Returns the pointer to the first data member // beyond the base class data members + if (fHeaderBegin) return fHeaderBegin; + TList *datalist = IsA()->GetListOfDataMembers(); TIter next(datalist); TDataMember *member = (TDataMember *)next(); @@ -67,7 +73,10 @@ void *AliRawEventHeaderBase::HeaderBegin() if(!strcmp(member->GetTypeName(),"TClass")) member = (TDataMember *)next(); - return (void *)((char *)this+member->GetOffset()); + void *ptr = (void *)((char *)this+member->GetOffset()); + const_cast(this)->fHeaderBegin = ptr; + + return ptr; } //______________________________________________________________________________ @@ -76,6 +85,8 @@ Int_t AliRawEventHeaderBase::HeaderSize() const // Returns the size of the data members list // beyond the base class data members + if (fHeaderSize) return fHeaderSize; + Int_t size = 0; TList *datalist = IsA()->GetListOfDataMembers(); @@ -91,6 +102,8 @@ Int_t AliRawEventHeaderBase::HeaderSize() const for(UInt_t i=0;iGetMaxIndex(i)*unitsize; } + const_cast(this)->fHeaderSize = size; + return size; } @@ -430,3 +443,46 @@ void AliRawEventHeaderBase::Print( const Option_t* opt ) const cout << opt << " Type attribute: " << GetP("TypeAttribute")[0] << "-" << GetP("TypeAttribute")[1] << "-" << GetP("TypeAttribute")[2] << endl; cout << opt << " GDC: " << Get("GdcId") << " LDC: " << Get("LdcId") << endl; } + +//_____________________________________________________________________________ +void AliRawEventHeaderBase::AddEqIndex(Int_t index) +{ + // Adds an equipment by changing properly + // the first and last equipment indexes + if (fFirstEqIndex < 0) fFirstEqIndex = index; + if (index > fLastEqIndex) fLastEqIndex = index; +} + +//_____________________________________________________________________________ +void AliRawEventHeaderBase::Reset() +{ + fFirstEqIndex = fLastEqIndex = -1; +} + +//______________________________________________________________________________ +void AliRawEventHeaderBase::Streamer(TBuffer &R__b) +{ + // Stream an object of class AliRawEventHeaderBase. + + if (R__b.IsReading()) { + UInt_t R__s, R__c; + Version_t R__v = R__b.ReadVersion(&R__s, &R__c); + if (R__v > 3) { + R__b.ReadClassBuffer(AliRawEventHeaderBase::Class(),this,R__v,R__s,R__c); + return; + } + TObject::Streamer(R__b); + R__b >> fSize; + R__b >> fMagic; + R__b >> fHeadSize; + R__b >> fVersion; + R__b >> fExtendedDataSize; + delete [] fExtendedData; + fExtendedData = new char[fExtendedDataSize]; + R__b.ReadFastArray(fExtendedData,fExtendedDataSize); + R__b >> fIsSwapped; + R__b.CheckByteCount(R__s, R__c, AliRawEventHeaderBase::IsA()); + } else { + R__b.WriteClassBuffer(AliRawEventHeaderBase::Class(),this); + } +}