1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
18 ///////////////////////////////////////////////////////////////////////////////
20 /// This is a class for reading raw data memory buffers.
22 ///////////////////////////////////////////////////////////////////////////////
24 #include "AliRawReaderMemory.h"
28 ClassImp(AliRawReaderMemory)
31 AliRawReaderMemory::AliRawReaderMemory() :
36 // create an object to read digits from
37 // the given memory location
39 fHeader = new AliRawDataHeader;
42 AliRawReaderMemory::AliRawReaderMemory(UChar_t* memory, UInt_t size) :
47 // create an object to read digits from the given memory
49 fHeader = new AliRawDataHeader;
52 AliRawReaderMemory::~AliRawReaderMemory()
54 // close the input memory
60 AliRawReaderMemory::AliRawReaderMemory(const AliRawReaderMemory& rawReader) :
61 AliRawReader(rawReader)
63 Fatal("AliRawReaderMemory", "copy constructor not implemented");
66 AliRawReaderMemory& AliRawReaderMemory::operator = (const AliRawReaderMemory&
69 Fatal("operator =", "assignment operator not implemented");
73 Bool_t AliRawReaderMemory::ReadHeader()
75 // read a data header at the current buffer position
76 // returns kFALSE if the mini header could not be read
78 if (!fBuffer) return kFALSE;
80 if ( fPosition+fCount+sizeof(AliRawDataHeader) > fBufferSize ) return kFALSE;
82 memcpy( fHeader, fBuffer+fPosition+fCount, sizeof(AliRawDataHeader) );
83 fPosition += fCount+sizeof(AliRawDataHeader);
85 if (fHeader->fSize != 0xFFFFFFFF) {
86 // Check for fHeader->fSize < sizeof(AliRawDataHeader) ????
87 fCount = fHeader->fSize - sizeof(AliRawDataHeader);
89 fCount = fBufferSize-fPosition;
91 } while (!IsSelected());
95 Bool_t AliRawReaderMemory::ReadNextData(UChar_t*& data)
97 // reads the next payload at the current buffer position
98 // returns kFALSE if the data could not be read
100 while (fCount == 0) {
101 if (!ReadHeader()) return kFALSE;
103 UInt_t currentPosition = fPosition;
107 data = fBuffer+currentPosition;
111 Bool_t AliRawReaderMemory::ReadNext(UChar_t* data, Int_t size)
113 // reads the next block of data at the current buffer position
114 // returns kFALSE if the data could not be read
116 if ( fBufferSize-fPosition < (UInt_t)size ) return kFALSE;
118 memcpy( data, fBuffer+fPosition, size );
125 Bool_t AliRawReaderMemory::Reset()
127 // reset the current position in the buffer to the beginning of the curevent
134 Bool_t AliRawReaderMemory::NextEvent()
136 // each memory buffer always contains only one event
140 Bool_t AliRawReaderMemory::RewindEvents()
142 // reset the event counter
147 Bool_t AliRawReaderMemory::SetMemory( UChar_t* memory, ULong_t size )
153 return (fBuffer && fBufferSize>0) ? kTRUE : kFALSE;