#include "AliRawReaderMemory.h"
#include <TSystem.h>
ClassImp(AliRawReaderMemory)
AliRawReaderMemory::AliRawReaderMemory() :
fPosition(0),
fBuffers(),
fCurrent(0)
{
}
AliRawReaderMemory::AliRawReaderMemory(UChar_t* memory, UInt_t size) :
fPosition(0),
fBuffers(),
fCurrent(0)
{
fBuffers.push_back(AliRRMBuffer(memory, size, -1));
}
AliRawReaderMemory::~AliRawReaderMemory()
{
}
void AliRawReaderMemory::RequireHeader(Bool_t required)
{
if (!required)
Fatal("AliRawReaderMemory","Reading of raw data without raw data header is not implemented !");
AliRawReader::RequireHeader(required);
}
Bool_t AliRawReaderMemory::ReadHeader()
{
Bool_t result=kFALSE;
if (fCurrent>=fBuffers.size()) return kFALSE;
do {
result=kFALSE;
do {
if (fBuffers[fCurrent].GetEquipmentId() == -1)
{
Warning("ReadHeader", "The equipment ID is not set for the DDL memory buffer.");
}
if (!fBuffers[fCurrent].GetBuffer()) break;
if ( fPosition+fCount >= fBuffers[fCurrent].GetBufferSize() ) break;
fHeader = reinterpret_cast<AliRawDataHeader*>(fBuffers[fCurrent].GetBuffer()+fPosition+fCount);
fHeaderV3 = reinterpret_cast<AliRawDataHeaderV3*>(fBuffers[fCurrent].GetBuffer()+fPosition+fCount);
UChar_t version = fHeader->GetVersion();
UInt_t size = fHeader->fSize;
Int_t headerSize = 0;
if(version == 3) {
fHeader=NULL;
headerSize = sizeof(AliRawDataHeaderV3);
} else if(version == 2) {
fHeaderV3=NULL;
headerSize = sizeof(AliRawDataHeader);
} else {
Error("ReadHeader", "Wrong raw data header version: %d. Expected: 2 or 3.", version);
return kFALSE;
}
while (1) {
if ( ( (size == 0) ||
((Int_t)fPosition + fCount + (Int_t)size > (Int_t)fBuffers[fCurrent].GetBufferSize() ) )
&& size != 0xFFFFFFFF) {
if (fPosition + sizeof(UInt_t) <= fBuffers[fCurrent].GetBufferSize()) {
fPosition += sizeof(UInt_t);
continue;
} else {
Error("ReadHeader", "Could not find a valid DDL header!");
return kFALSE;
}
} else {
fPosition += fCount + headerSize;
}
break;
}
if (size != 0xFFFFFFFF) {
fCount = (Int_t)size - headerSize;
} else {
fCount = fBuffers[fCurrent].GetBufferSize() - headerSize;
}
} while (!(result=IsSelected()) && OpenNextBuffer());
} while (!result && OpenNextBuffer());
return result;
}
Bool_t AliRawReaderMemory::OpenNextBuffer()
{
fPosition=0;
fCount=0;
if (fCurrent>=fBuffers.size()) return kFALSE;
if (++fCurrent>=fBuffers.size()) return kFALSE;
return kTRUE;
}
Bool_t AliRawReaderMemory::ReadNextData(UChar_t*& data)
{
while (fCount == 0) {
if (!ReadHeader()) return kFALSE;
}
if(fCount < 0){
Error("ReadNextData","Cannot read data, payload is negative");
return kFALSE;
}
UInt_t currentPosition = fPosition;
fPosition += fCount;
fCount = 0;
if(fBuffers[fCurrent].GetBufferSize()<currentPosition){
Error("ReadNextData","Current position exceeds buffersize.");
return kFALSE;
}
data = fBuffers[fCurrent].GetBuffer()+currentPosition;
return kTRUE;
}
Bool_t AliRawReaderMemory::ReadNext(UChar_t* data, Int_t size)
{
if (fCurrent>=fBuffers.size()) return kFALSE;
if ( fBuffers[fCurrent].GetBufferSize()-fPosition < (UInt_t)size ) return kFALSE;
memcpy( data, fBuffers[fCurrent].GetBuffer()+fPosition, size );
fCount -= size;
fPosition += size;
return kTRUE;
}
Bool_t AliRawReaderMemory::Reset()
{
fHeader = NULL;
fHeaderV3 = NULL;
fCount = 0;
fPosition = 0;
fCurrent=0;
return kTRUE;
}
Bool_t AliRawReaderMemory::NextEvent()
{
if (fEventNumber < 0) {
fEventNumber++;
return kTRUE;
}
else
return kFALSE;
}
Bool_t AliRawReaderMemory::RewindEvents()
{
fEventNumber = -1;
return Reset();
}
Bool_t AliRawReaderMemory::SetMemory( UChar_t* memory, ULong_t size )
{
if (!memory || size<=0) return kFALSE;
if (fBuffers.size()>1 || (fBuffers.size()==1 && fPosition==0 && fCurrent==0)) {
Error("SetMemory","can not SetMemory for multiple buffers, use AddBuffer(...)");
return kFALSE;
}
if (fBuffers.size()==1) fBuffers.pop_back();
fBuffers.push_back(AliRRMBuffer(memory, size, -1));
fCurrent=0;
fHeader = NULL;
fHeaderV3 = NULL;
fCount = 0;
fPosition = 0;
return kTRUE;
}
void AliRawReaderMemory::SetEquipmentID(Int_t id)
{
if (fBuffers.size()>1) {
Error("SetEquipmentID", "can not SetEquipmentID for multiple buffers, use AddBuffer(...)");
return;
}
if (fBuffers.size()==0 || fCurrent>=fBuffers.size()) {
Error("SetEquipmentID", "no block available to set equipment id");
return;
}
fBuffers[fCurrent].SetEquipmentId(id);
}
Int_t AliRawReaderMemory::GetEquipmentSize() const
{
if (fCurrent>=fBuffers.size()) return 0;
return fBuffers[fCurrent].GetBufferSize();
}
Int_t AliRawReaderMemory::GetEquipmentId() const
{
if (fCurrent>=fBuffers.size()) return -1;
return fBuffers[fCurrent].GetEquipmentId();
}
Bool_t AliRawReaderMemory::AddBuffer(UChar_t* memory, ULong_t size, Int_t equipmentId )
{
if (!memory || size<=0 || equipmentId<0 ) return kFALSE;
fBuffers.push_back(AliRRMBuffer(memory, size, equipmentId));
return kTRUE;
}
void AliRawReaderMemory::ClearBuffers()
{
fBuffers.clear();
Reset();
}
AliRawReaderMemory::AliRRMBuffer::AliRRMBuffer()
:
fBuffer(NULL),
fBufferSize(0),
fEquipmentId(-1)
{
}
AliRawReaderMemory::AliRRMBuffer::AliRRMBuffer(UChar_t* pBuffer, UInt_t bufferSize, Int_t equipmentId)
:
fBuffer(pBuffer),
fBufferSize(bufferSize),
fEquipmentId(equipmentId)
{
}
AliRawReaderMemory::AliRRMBuffer::~AliRRMBuffer()
{
}
AliRawReaderMemory::AliRRMBuffer::AliRRMBuffer(const AliRRMBuffer& src)
:
fBuffer(src.fBuffer),
fBufferSize(src.fBufferSize),
fEquipmentId(src.fEquipmentId)
{
}
AliRawReaderMemory::AliRRMBuffer& AliRawReaderMemory::AliRRMBuffer::operator=(const AliRRMBuffer& src)
{
if(&src == this) return *this;
fBuffer=src.fBuffer;
fBufferSize=src.fBufferSize;
fEquipmentId=src.fEquipmentId;
return *this;
}
AliRawReaderMemory.cxx:10 AliRawReaderMemory.cxx:11 AliRawReaderMemory.cxx:12 AliRawReaderMemory.cxx:13 AliRawReaderMemory.cxx:14 AliRawReaderMemory.cxx:15 AliRawReaderMemory.cxx:16 AliRawReaderMemory.cxx:17 AliRawReaderMemory.cxx:18 AliRawReaderMemory.cxx:19 AliRawReaderMemory.cxx:20 AliRawReaderMemory.cxx:21 AliRawReaderMemory.cxx:22 AliRawReaderMemory.cxx:23 AliRawReaderMemory.cxx:24 AliRawReaderMemory.cxx:25 AliRawReaderMemory.cxx:26 AliRawReaderMemory.cxx:27 AliRawReaderMemory.cxx:28 AliRawReaderMemory.cxx:29 AliRawReaderMemory.cxx:30 AliRawReaderMemory.cxx:31 AliRawReaderMemory.cxx:32 AliRawReaderMemory.cxx:33 AliRawReaderMemory.cxx:34 AliRawReaderMemory.cxx:35 AliRawReaderMemory.cxx:36 AliRawReaderMemory.cxx:37 AliRawReaderMemory.cxx:38 AliRawReaderMemory.cxx:39 AliRawReaderMemory.cxx:40 AliRawReaderMemory.cxx:41 AliRawReaderMemory.cxx:42 AliRawReaderMemory.cxx:43 AliRawReaderMemory.cxx:44 AliRawReaderMemory.cxx:45 AliRawReaderMemory.cxx:46 AliRawReaderMemory.cxx:47 AliRawReaderMemory.cxx:48 AliRawReaderMemory.cxx:49 AliRawReaderMemory.cxx:50 AliRawReaderMemory.cxx:51 AliRawReaderMemory.cxx:52 AliRawReaderMemory.cxx:53 AliRawReaderMemory.cxx:54 AliRawReaderMemory.cxx:55 AliRawReaderMemory.cxx:56 AliRawReaderMemory.cxx:57 AliRawReaderMemory.cxx:58 AliRawReaderMemory.cxx:59 AliRawReaderMemory.cxx:60 AliRawReaderMemory.cxx:61 AliRawReaderMemory.cxx:62 AliRawReaderMemory.cxx:63 AliRawReaderMemory.cxx:64 AliRawReaderMemory.cxx:65 AliRawReaderMemory.cxx:66 AliRawReaderMemory.cxx:67 AliRawReaderMemory.cxx:68 AliRawReaderMemory.cxx:69 AliRawReaderMemory.cxx:70 AliRawReaderMemory.cxx:71 AliRawReaderMemory.cxx:72 AliRawReaderMemory.cxx:73 AliRawReaderMemory.cxx:74 AliRawReaderMemory.cxx:75 AliRawReaderMemory.cxx:76 AliRawReaderMemory.cxx:77 AliRawReaderMemory.cxx:78 AliRawReaderMemory.cxx:79 AliRawReaderMemory.cxx:80 AliRawReaderMemory.cxx:81 AliRawReaderMemory.cxx:82 AliRawReaderMemory.cxx:83 AliRawReaderMemory.cxx:84 AliRawReaderMemory.cxx:85 AliRawReaderMemory.cxx:86 AliRawReaderMemory.cxx:87 AliRawReaderMemory.cxx:88 AliRawReaderMemory.cxx:89 AliRawReaderMemory.cxx:90 AliRawReaderMemory.cxx:91 AliRawReaderMemory.cxx:92 AliRawReaderMemory.cxx:93 AliRawReaderMemory.cxx:94 AliRawReaderMemory.cxx:95 AliRawReaderMemory.cxx:96 AliRawReaderMemory.cxx:97 AliRawReaderMemory.cxx:98 AliRawReaderMemory.cxx:99 AliRawReaderMemory.cxx:100 AliRawReaderMemory.cxx:101 AliRawReaderMemory.cxx:102 AliRawReaderMemory.cxx:103 AliRawReaderMemory.cxx:104 AliRawReaderMemory.cxx:105 AliRawReaderMemory.cxx:106 AliRawReaderMemory.cxx:107 AliRawReaderMemory.cxx:108 AliRawReaderMemory.cxx:109 AliRawReaderMemory.cxx:110 AliRawReaderMemory.cxx:111 AliRawReaderMemory.cxx:112 AliRawReaderMemory.cxx:113 AliRawReaderMemory.cxx:114 AliRawReaderMemory.cxx:115 AliRawReaderMemory.cxx:116 AliRawReaderMemory.cxx:117 AliRawReaderMemory.cxx:118 AliRawReaderMemory.cxx:119 AliRawReaderMemory.cxx:120 AliRawReaderMemory.cxx:121 AliRawReaderMemory.cxx:122 AliRawReaderMemory.cxx:123 AliRawReaderMemory.cxx:124 AliRawReaderMemory.cxx:125 AliRawReaderMemory.cxx:126 AliRawReaderMemory.cxx:127 AliRawReaderMemory.cxx:128 AliRawReaderMemory.cxx:129 AliRawReaderMemory.cxx:130 AliRawReaderMemory.cxx:131 AliRawReaderMemory.cxx:132 AliRawReaderMemory.cxx:133 AliRawReaderMemory.cxx:134 AliRawReaderMemory.cxx:135 AliRawReaderMemory.cxx:136 AliRawReaderMemory.cxx:137 AliRawReaderMemory.cxx:138 AliRawReaderMemory.cxx:139 AliRawReaderMemory.cxx:140 AliRawReaderMemory.cxx:141 AliRawReaderMemory.cxx:142 AliRawReaderMemory.cxx:143 AliRawReaderMemory.cxx:144 AliRawReaderMemory.cxx:145 AliRawReaderMemory.cxx:146 AliRawReaderMemory.cxx:147 AliRawReaderMemory.cxx:148 AliRawReaderMemory.cxx:149 AliRawReaderMemory.cxx:150 AliRawReaderMemory.cxx:151 AliRawReaderMemory.cxx:152 AliRawReaderMemory.cxx:153 AliRawReaderMemory.cxx:154 AliRawReaderMemory.cxx:155 AliRawReaderMemory.cxx:156 AliRawReaderMemory.cxx:157 AliRawReaderMemory.cxx:158 AliRawReaderMemory.cxx:159 AliRawReaderMemory.cxx:160 AliRawReaderMemory.cxx:161 AliRawReaderMemory.cxx:162 AliRawReaderMemory.cxx:163 AliRawReaderMemory.cxx:164 AliRawReaderMemory.cxx:165 AliRawReaderMemory.cxx:166 AliRawReaderMemory.cxx:167 AliRawReaderMemory.cxx:168 AliRawReaderMemory.cxx:169 AliRawReaderMemory.cxx:170 AliRawReaderMemory.cxx:171 AliRawReaderMemory.cxx:172 AliRawReaderMemory.cxx:173 AliRawReaderMemory.cxx:174 AliRawReaderMemory.cxx:175 AliRawReaderMemory.cxx:176 AliRawReaderMemory.cxx:177 AliRawReaderMemory.cxx:178 AliRawReaderMemory.cxx:179 AliRawReaderMemory.cxx:180 AliRawReaderMemory.cxx:181 AliRawReaderMemory.cxx:182 AliRawReaderMemory.cxx:183 AliRawReaderMemory.cxx:184 AliRawReaderMemory.cxx:185 AliRawReaderMemory.cxx:186 AliRawReaderMemory.cxx:187 AliRawReaderMemory.cxx:188 AliRawReaderMemory.cxx:189 AliRawReaderMemory.cxx:190 AliRawReaderMemory.cxx:191 AliRawReaderMemory.cxx:192 AliRawReaderMemory.cxx:193 AliRawReaderMemory.cxx:194 AliRawReaderMemory.cxx:195 AliRawReaderMemory.cxx:196 AliRawReaderMemory.cxx:197 AliRawReaderMemory.cxx:198 AliRawReaderMemory.cxx:199 AliRawReaderMemory.cxx:200 AliRawReaderMemory.cxx:201 AliRawReaderMemory.cxx:202 AliRawReaderMemory.cxx:203 AliRawReaderMemory.cxx:204 AliRawReaderMemory.cxx:205 AliRawReaderMemory.cxx:206 AliRawReaderMemory.cxx:207 AliRawReaderMemory.cxx:208 AliRawReaderMemory.cxx:209 AliRawReaderMemory.cxx:210 AliRawReaderMemory.cxx:211 AliRawReaderMemory.cxx:212 AliRawReaderMemory.cxx:213 AliRawReaderMemory.cxx:214 AliRawReaderMemory.cxx:215 AliRawReaderMemory.cxx:216 AliRawReaderMemory.cxx:217 AliRawReaderMemory.cxx:218 AliRawReaderMemory.cxx:219 AliRawReaderMemory.cxx:220 AliRawReaderMemory.cxx:221 AliRawReaderMemory.cxx:222 AliRawReaderMemory.cxx:223 AliRawReaderMemory.cxx:224 AliRawReaderMemory.cxx:225 AliRawReaderMemory.cxx:226 AliRawReaderMemory.cxx:227 AliRawReaderMemory.cxx:228 AliRawReaderMemory.cxx:229 AliRawReaderMemory.cxx:230 AliRawReaderMemory.cxx:231 AliRawReaderMemory.cxx:232 AliRawReaderMemory.cxx:233 AliRawReaderMemory.cxx:234 AliRawReaderMemory.cxx:235 AliRawReaderMemory.cxx:236 AliRawReaderMemory.cxx:237 AliRawReaderMemory.cxx:238 AliRawReaderMemory.cxx:239 AliRawReaderMemory.cxx:240 AliRawReaderMemory.cxx:241 AliRawReaderMemory.cxx:242 AliRawReaderMemory.cxx:243 AliRawReaderMemory.cxx:244 AliRawReaderMemory.cxx:245 AliRawReaderMemory.cxx:246 AliRawReaderMemory.cxx:247 AliRawReaderMemory.cxx:248 AliRawReaderMemory.cxx:249 AliRawReaderMemory.cxx:250 AliRawReaderMemory.cxx:251 AliRawReaderMemory.cxx:252 AliRawReaderMemory.cxx:253 AliRawReaderMemory.cxx:254 AliRawReaderMemory.cxx:255 AliRawReaderMemory.cxx:256 AliRawReaderMemory.cxx:257 AliRawReaderMemory.cxx:258 AliRawReaderMemory.cxx:259 AliRawReaderMemory.cxx:260 AliRawReaderMemory.cxx:261 AliRawReaderMemory.cxx:262 AliRawReaderMemory.cxx:263 AliRawReaderMemory.cxx:264 AliRawReaderMemory.cxx:265 AliRawReaderMemory.cxx:266 AliRawReaderMemory.cxx:267 AliRawReaderMemory.cxx:268 AliRawReaderMemory.cxx:269 AliRawReaderMemory.cxx:270 AliRawReaderMemory.cxx:271 AliRawReaderMemory.cxx:272 AliRawReaderMemory.cxx:273 AliRawReaderMemory.cxx:274 AliRawReaderMemory.cxx:275 AliRawReaderMemory.cxx:276 AliRawReaderMemory.cxx:277 AliRawReaderMemory.cxx:278 AliRawReaderMemory.cxx:279 AliRawReaderMemory.cxx:280 AliRawReaderMemory.cxx:281 AliRawReaderMemory.cxx:282 AliRawReaderMemory.cxx:283 AliRawReaderMemory.cxx:284 AliRawReaderMemory.cxx:285 AliRawReaderMemory.cxx:286 AliRawReaderMemory.cxx:287 AliRawReaderMemory.cxx:288 AliRawReaderMemory.cxx:289 AliRawReaderMemory.cxx:290 AliRawReaderMemory.cxx:291 AliRawReaderMemory.cxx:292 AliRawReaderMemory.cxx:293 AliRawReaderMemory.cxx:294 AliRawReaderMemory.cxx:295 AliRawReaderMemory.cxx:296 AliRawReaderMemory.cxx:297 AliRawReaderMemory.cxx:298 AliRawReaderMemory.cxx:299 AliRawReaderMemory.cxx:300 AliRawReaderMemory.cxx:301 AliRawReaderMemory.cxx:302 AliRawReaderMemory.cxx:303 AliRawReaderMemory.cxx:304 AliRawReaderMemory.cxx:305 AliRawReaderMemory.cxx:306 AliRawReaderMemory.cxx:307 AliRawReaderMemory.cxx:308 AliRawReaderMemory.cxx:309 AliRawReaderMemory.cxx:310 AliRawReaderMemory.cxx:311 AliRawReaderMemory.cxx:312 AliRawReaderMemory.cxx:313 AliRawReaderMemory.cxx:314 AliRawReaderMemory.cxx:315 AliRawReaderMemory.cxx:316 AliRawReaderMemory.cxx:317 AliRawReaderMemory.cxx:318 AliRawReaderMemory.cxx:319 AliRawReaderMemory.cxx:320 AliRawReaderMemory.cxx:321 AliRawReaderMemory.cxx:322 AliRawReaderMemory.cxx:323 AliRawReaderMemory.cxx:324 AliRawReaderMemory.cxx:325