X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=RAW%2FAliRawEventHeaderBase.cxx;h=675d339e4f21b0089d4fbcf5e9ae803dcce9c4b6;hb=ce7adfe97756b995eead59a54101c6cc320dd5d7;hp=dccd36a8099fef98e13417c52fe33a5d72f7e944;hpb=936875a40225e7b2bd9a99c1f0cfeea07f151740;p=u%2Fmrichter%2FAliRoot.git diff --git a/RAW/AliRawEventHeaderBase.cxx b/RAW/AliRawEventHeaderBase.cxx index dccd36a8099..675d339e4f2 100644 --- a/RAW/AliRawEventHeaderBase.cxx +++ b/RAW/AliRawEventHeaderBase.cxx @@ -50,17 +50,22 @@ fExtendedDataSize(0), fExtendedAllocSize(0), fExtendedData(NULL), fIsSwapped(kFALSE), -fHeaderSize(0) +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(); @@ -68,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; } //______________________________________________________________________________ @@ -361,7 +369,7 @@ UInt_t AliRawEventHeaderBase::Get(const char *datamember) const // in front char buf[256] = "f"; - strcat(buf,datamember); + strncat(buf,datamember,sizeof(buf)-2); TDataMember *member = IsA()->GetDataMember(buf); if (!member) { @@ -394,7 +402,7 @@ const UInt_t* AliRawEventHeaderBase::GetP(const char *datamember) const // in front char buf[256] = "f"; - strcat(buf,datamember); + strncat(buf,datamember,sizeof(buf)-2); TDataMember *member = IsA()->GetDataMember(buf); if (!member) { @@ -435,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); + } +}