ROOT logo
// $Id$

//**************************************************************************
//* This file is property of and copyright by the                          * 
//* ALICE Experiment at CERN, All rights reserved.                         *
//*                                                                        *
//* Primary Authors: Matthias Richter <Matthias.Richter@ift.uib.no>        *
//*                  for The ALICE HLT Project.                            *
//*                                                                        *
//* Permission to use, copy, modify and distribute this software and its   *
//* documentation strictly for non-commercial purposes is hereby granted   *
//* without fee, provided that the above copyright notice appears in all   *
//* copies and that both the copyright notice and this permission notice   *
//* appear in the supporting documentation. The authors make no claims     *
//* about the suitability of this software for any purpose. It is          *
//* provided "as is" without express or implied warranty.                  *
//**************************************************************************

//  @file   AliHLTDataBuffer.cxx
//  @author Matthias Richter
//  @date   
//  @brief  Handling of Data Buffers for HLT components.
//  @note   Only used in the AliRoot framework

#include "AliHLTDataBuffer.h"
#include "AliHLTConsumerDescriptor.h"
#include "AliHLTComponent.h"
#include "AliHLTTask.h"
#include <cerrno>
#include <cassert>
//#include <string>
//#include "AliHLTSystem.h"

using std::cout;

/** ROOT macro for the implementation of ROOT specific class methods */
ClassImp(AliHLTDataBuffer)

AliHLTDataBuffer::AliHLTDataBuffer()
  :
  fSegments(),
  fConsumers(),
  fActiveConsumers(),
  fReleasedConsumers(),
  fpBuffer(NULL),
  fFlags(0),
  fForwardedSegmentSources(),
  fForwardedSegments()
{
  // see header file for class documentation
  // or
  // refer to README to build package
  // or
  // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
  fSegments.empty();
  fConsumers.empty();
  fActiveConsumers.empty();
  fReleasedConsumers.empty();
  fgNofInstances++;
}

int AliHLTDataBuffer::fgNofInstances=0;
AliHLTDataBuffer::AliHLTRawBufferPList AliHLTDataBuffer::fgFreeBuffers;
AliHLTDataBuffer::AliHLTRawBufferPList AliHLTDataBuffer::fgActiveBuffers;
AliHLTUInt32_t AliHLTDataBuffer::fgMargin=1024;
AliHLTLogging AliHLTDataBuffer::fgLogging;
const Int_t AliHLTDataBuffer::fgkSafetyPatternSize=16;
const char AliHLTDataBuffer::fgkSafetyPattern[]={0x28, 0x63, 0x29, 0x4d, 0x52, 0x49, 0x43, 0x48, 0x54, 0x45, 0x52, 0x20, 0x32, 0x30, 0x30, 0x37};
AliHLTUInt32_t AliHLTDataBuffer::fgEventCount=0;

AliHLTDataBuffer::~AliHLTDataBuffer()
{
  // see header file for function documentation
  CleanupConsumerList();

  if (--fgNofInstances<=0) {
    DeleteRawBuffers();
  }
}

int AliHLTDataBuffer::SetConsumer(AliHLTComponent* pConsumer)
{
  // see header file for function documentation
  int iResult=0;
  if (pConsumer) {
    if (FindConsumer(pConsumer)) {
      HLTWarning("consumer %s (%p) already set to data buffer %p", pConsumer->GetComponentID(), pConsumer, this);
    }
    AliHLTConsumerDescriptor* pDesc=new AliHLTConsumerDescriptor(pConsumer);
    if (pDesc) {
      fConsumers.push_back(pDesc);
      HLTDebug("set consumer %s (%p) to data buffer %p", pConsumer->GetComponentID(), pConsumer, this);
    } else {
      HLTError("memory allocation failed");
      iResult=-ENOMEM;
    }
  } else {
    HLTError("invalid parameter: consumer component (nil)");
    iResult=-EINVAL;
  }
  return iResult;
}

int AliHLTDataBuffer::FindMatchingDataBlocks(const AliHLTComponent* pConsumer, AliHLTComponentDataTypeList* tgtList)
{
  // see header file for function documentation
  int iResult=0;
  if (pConsumer) {
    AliHLTDataSegmentList segments;
    if ((iResult=FindMatchingDataSegments(pConsumer, segments))>=0) {
      if (tgtList) {
	AliHLTDataSegmentList::iterator segment=segments.begin();
	while (segment!=segments.end()) {
	  tgtList->push_back((*segment).fDataType);
	  segment++;
	}
      }
      iResult=segments.size();
    }
  } else {
    iResult=-EINVAL;
  }
  return iResult;
}

int AliHLTDataBuffer::FindMatchingDataSegments(const AliHLTComponent* /*pConsumer*/,
					       AliHLTDataSegmentList& tgtList)
{
  // see header file for function documentation
  int iResult=0;

  // Matthias 26.09.2007 relax the restriction to matching data blocks
  // all blocks are passed to the consumer, which is the policy also in
  // PubSub
  tgtList.assign(fSegments.begin(), fSegments.end());

  // add all forwarded blocks
  tgtList.insert(tgtList.begin(), fForwardedSegments.begin(), fForwardedSegments.end());
  iResult=tgtList.size();
  return iResult;
}

int AliHLTDataBuffer::Subscribe(const AliHLTComponent* pConsumer, AliHLTComponentBlockDataList& blockDescList)
{
  // see header file for function documentation
  int iResult=0;
  if (pConsumer) {
    if (1/*fpBuffer*/) {
      AliHLTConsumerDescriptor* pDesc=FindConsumer(pConsumer, fConsumers);
      if (pDesc) {
	AliHLTDataSegmentList tgtList;
	// Matthias 26.07.2007 AliHLTSystem should behave the same way as PubSub
	// so it does not matter if there are matching data types or not, unless
	// we implement such a check in PubSub
	if ((iResult=FindMatchingDataSegments(pConsumer, tgtList))>=0) {
	  AliHLTDataSegmentList::iterator segment=tgtList.begin();
	  while (segment!=tgtList.end()) {
	    // fill the block data descriptor
	    AliHLTComponentBlockData bd;
	    AliHLTComponent::FillBlockData(bd);
	    // This models the behavior of PubSub.
	    // For incoming data blocks, fOffset must be ignored by the
	    // processing component. It is set for bookkeeping in the framework.
	    // fPtr always points to the beginning of the data.
	    bd.fOffset=0;
	    AliHLTUInt8_t* pTgt=*segment;
	    bd.fPtr=reinterpret_cast<void*>(pTgt);
	    bd.fSize=(*segment).fSegmentSize;
	    bd.fDataType=(*segment).fDataType;
	    bd.fSpecification=(*segment).fSpecification;
	    blockDescList.push_back(bd);
	    pDesc->SetActiveDataSegment(*segment);
	    HLTDebug("component %p (%s) subscribed to segment offset %d size %d data type %s %#x", 
		     pConsumer, ((AliHLTComponent*)pConsumer)->GetComponentID(), bd.fOffset,
		     bd.fSize, (AliHLTComponent::DataType2Text(bd.fDataType)).c_str(), 
		     bd.fSpecification);
	    segment++;
	  }
	  // move this consumer to the active list
	  if (tgtList.size()==0) {
	    ChangeConsumerState(pDesc, fConsumers, fReleasedConsumers);
	    HLTDebug("no input data for component %p (%s) available", pConsumer, ((AliHLTComponent*)pConsumer)->GetComponentID());
	  } else if (ChangeConsumerState(pDesc, fConsumers, fActiveConsumers)>=0) {
	    HLTDebug("component %p (%s) subscribed to data buffer %p", pConsumer, ((AliHLTComponent*)pConsumer)->GetComponentID(), this);
	  } else {
	    // TODO: cleanup the consumer descriptor correctly
	    segment=tgtList.begin();
	    while (segment!=tgtList.end()) {
	      blockDescList.pop_back();
	      segment++;
	    }
	    HLTError("can not activate consumer %p for data buffer %p", pConsumer, this);
	    iResult=-EACCES;
	  }
	} else {
	  HLTError("unresolved data segment(s) for component %p (%s)", pConsumer, ((AliHLTComponent*)pConsumer)->GetComponentID());
	  iResult=-EBADF;
	}
      } else {
	if (!FindConsumer(pConsumer)) {
	  HLTError("component %p is not a data consumer of data buffer %p", pConsumer, this);
	} else {
	  HLTError("component %p is a valid data consumer of data buffer %p, but did not release it's buffer subscription", pConsumer, this);
	}
	iResult=-ENOENT;
      }
    } else {
      // Matthias 26.07.2007 until now, data had to be present for successful subscription
      // in order to be consistent with the PubSub framework, this restiction has been
      // removed
      //HLTError("data buffer %p is empty", this);
      //iResult=-ENODATA;
    }
  } else {
    HLTError("invalid parameter");
    iResult=-EINVAL;
  }
  return iResult;
}

int AliHLTDataBuffer::Release(AliHLTComponentBlockData* pBlockDesc,
			      const AliHLTComponent* pConsumer,
			      const AliHLTTask* pOwnerTask)
{
  // see header file for function documentation
  int iResult=0;
  if (pBlockDesc && pConsumer) {
    AliHLTConsumerDescriptor* pDesc=FindConsumer(pConsumer, fActiveConsumers);
    if (pDesc) {
      if ((iResult=pDesc->CheckActiveDataSegment(AliHLTDataSegment(pBlockDesc->fPtr, pBlockDesc->fOffset, pBlockDesc->fSize)))!=1) {
	HLTWarning("data segment mismatch, component %p has not subscribed to a segment with offset %#x and size %d", pConsumer, pBlockDesc->fOffset, pBlockDesc->fSize);
	// TODO: appropriate error handling, but so far optional
	iResult=0;
      } else {
	pDesc->ReleaseActiveDataSegment(AliHLTDataSegment(pBlockDesc->fPtr, pBlockDesc->fOffset, pBlockDesc->fSize));
      }
      if (GetNofPendingConsumers()==0 && fForwardedSegments.size()>0) {
	// last consumer, release forwarded segments
	ReleaseForwardedBlock(pBlockDesc, pOwnerTask);
      }
      pBlockDesc->fOffset=0;
      pBlockDesc->fPtr=NULL;
      pBlockDesc->fSize=0;
      if (pDesc->GetNofActiveSegments()==0) {
	if ((iResult=ChangeConsumerState(pDesc, fActiveConsumers, fReleasedConsumers))>=0) {
	  if (GetNofActiveConsumers()==0 && GetNofPendingConsumers()==0) {
	    // this is the last consumer, reset the consumer list and release the raw buffer
	    ResetDataBuffer();
	  }
	} else {
	  HLTError("can not deactivate consumer %p for data buffer %p", pConsumer, this);
	  iResult=-EACCES;
	}
      }
    } else {
      HLTWarning("component %p has currently not subscribed to the data buffer %p", pConsumer, this);
      iResult=-ENOENT;
    }
  } else {
    HLTError("inavalid parameter: pBlockDesc=%p pConsumer=%p", pBlockDesc, pConsumer);
    iResult=-EINVAL;
  }
  return iResult;
}

int AliHLTDataBuffer::ReleaseForwardedBlock(AliHLTComponentBlockData* pBlockDesc,
					    const AliHLTTask* pOwnerTask)
{
  // see header file for function documentation
  int iResult=0;
  if (pBlockDesc && pOwnerTask) {
	assert(fForwardedSegments.size()==fForwardedSegmentSources.size());
	AliHLTDataSegmentList::iterator segment=fForwardedSegments.begin();
	AliHLTTaskPList::iterator src=fForwardedSegmentSources.begin();
	//HLTDebug("%p checking forwarded segments", this);
	for (; segment!=fForwardedSegments.end(); segment++, src++) {
	  //HLTDebug("segment ptr=%p offset=%d size=%d\n"
	  //   "block ptr=%p offset=%d size=%d", (*segment).fPtr, (*segment).fSegmentOffset, (*segment).fSegmentSize, pBlockDesc->fPtr, pBlockDesc->fOffset, pBlockDesc->fSize);
	  if ((*segment)==AliHLTDataSegment(pBlockDesc->fPtr, pBlockDesc->fOffset, pBlockDesc->fSize)) {
	    //HLTDebug("release segment of task %p", *src);
	    assert((*src)!=NULL);
	    if ((*src)!=NULL) {
	      if ((*src)->Release(pBlockDesc, pOwnerTask)>=0) {
		HLTDebug("task %s (%p) released forwarded segment %p size %d of task %s (%p)",
			 pOwnerTask->GetName(), pOwnerTask, (*segment).GetPtr(), (*segment).GetSize(),
			 (*src)->GetName(), *src);
	      } else {
		HLTError("task %s (%p) failed releasing forwarded segment %p size %d of task %s (%p)",
			 pOwnerTask->GetName(), pOwnerTask, (*segment).GetPtr(), (*segment).GetSize(),
			 (*src)->GetName(), *src);
	      }
	    }
	    fForwardedSegments.erase(segment);
	    fForwardedSegmentSources.erase(src);
	    break;
	  }
	}
  } else {
    HLTError("inavalid parameter: pBlockDesc=%p pOwnerTask=%p", pBlockDesc, pOwnerTask);
    iResult=-EINVAL;
  }
  return iResult;
}

int AliHLTDataBuffer::Forward(AliHLTTask* pSrcTask, AliHLTComponentBlockData* pBlockDesc)
{
  // see header file for function documentation
  if (pSrcTask==NULL || pBlockDesc==NULL) return -EINVAL;
  assert(fForwardedSegments.size()==fForwardedSegmentSources.size());
  if (fForwardedSegments.size()!=fForwardedSegmentSources.size()) return -EFAULT;
  fForwardedSegmentSources.push_back(pSrcTask);
  fForwardedSegments.push_back(AliHLTDataSegment(pBlockDesc->fPtr, pBlockDesc->fOffset, pBlockDesc->fSize, pBlockDesc->fDataType, pBlockDesc->fSpecification));
  return 0;
}

AliHLTUInt8_t* AliHLTDataBuffer::GetTargetBuffer(int iMinSize)
{
  // see header file for function documentation
  AliHLTUInt8_t* pTargetBuffer=NULL;
  if (fpBuffer!=NULL) {
    HLTWarning("data buffer not properly reset, possible memory leak\n");
  }
  fpBuffer=CreateRawBuffer(iMinSize);
  if (fpBuffer) {
    pTargetBuffer=*fpBuffer;
  } else {
    HLTError("can not create raw buffer");
  }
  return pTargetBuffer;
}

int AliHLTDataBuffer::SetSegments(AliHLTUInt8_t* pTgt, AliHLTComponentBlockData* arrayBlockData, int iSize)
{
  // see header file for function documentation
  int iResult=0;
  if (pTgt && arrayBlockData && iSize>=0) {
    if (fpBuffer) {
      if (*fpBuffer==pTgt) {
	AliHLTDataBuffer::AliHLTDataSegment segment;
	AliHLTUInt32_t maxSize=0;
	for (int i=0; i<iSize; i++) {
	  // This function has to model the behavior of PubSub
	  // For output blocks only the fOffset value is used, this must be the offset
	  // relative to the output pointer. fPtr must be either NULL or the output
	  // pointer. In either case it is 'ignored' and set to the beginning of the
	  // data buffer
	  if (arrayBlockData[i].fPtr==NULL ||
	      arrayBlockData[i].fPtr==*fpBuffer) {
	    arrayBlockData[i].fPtr=*fpBuffer;
	    if ((arrayBlockData[i].fOffset+arrayBlockData[i].fSize<=fpBuffer->GetUsedSize()) ||
		((arrayBlockData[i].fOffset==~(AliHLTUInt32_t)0) && arrayBlockData[i].fSize==0)) {
	      segment.fSegmentOffset=arrayBlockData[i].fOffset;
	      segment.fPtr=(AliHLTUInt8_t*)arrayBlockData[i].fPtr;
	      segment.fSegmentSize=arrayBlockData[i].fSize;
	      segment.fDataType=arrayBlockData[i].fDataType;
	      segment.fSpecification=arrayBlockData[i].fSpecification;
	      fSegments.push_back(segment);
	      HLTDebug("set segment %s with size %d at offset %d", AliHLTComponent::DataType2Text(segment.fDataType).data(), segment.fSegmentSize, segment.fSegmentOffset);

	      // find the actual size of the data
	      if ((arrayBlockData[i].fOffset!=~(AliHLTUInt32_t)0) &&
		  arrayBlockData[i].fOffset+arrayBlockData[i].fSize>maxSize) {
		maxSize=arrayBlockData[i].fOffset+arrayBlockData[i].fSize;
	      }
	    } else {
	      HLTError("block data specification %#d (%s) exceeds size of data buffer", i, AliHLTComponent::DataType2Text(arrayBlockData[i].fDataType).data());
	      HLTError("block offset=%d, block size=%d, buffer size=%d", arrayBlockData[i].fOffset, arrayBlockData[i].fSize, fpBuffer->GetUsedSize());
	      iResult=-E2BIG;
	    }
	  } else {
	    HLTError("invalid pointer (%p) in block data specification (buffer %p size %d)."
		     "please note: for output blocks only the fOffset value is valid and must "
		     "be relative to the output buffer", arrayBlockData[i].fPtr, fpBuffer->GetPointer(), fpBuffer->GetUsedSize());
	    iResult=-ERANGE;
	  }
	}
	// to be enabled if unit test is ready
	iResult=SetRawBufferDataSize(fpBuffer, maxSize);	
      } else {
	HLTError("this data buffer (%p) does not match the internal data buffer %p of raw buffer %p", pTgt, fpBuffer->GetPointer(), fpBuffer);
	iResult=-EINVAL;
      }
    } else {
      HLTFatal("internal data structur mismatch");
      iResult=-EFAULT;
    }
  } else {
    HLTError("invalid parameter: pTgtBuffer=%p arrayBlockData=%p", pTgt, arrayBlockData);
    iResult=-EINVAL;
  }
  return iResult;
}

int AliHLTDataBuffer::IsEmpty()
{
  // see header file for function documentation
  int iResult=(fpBuffer==NULL && fForwardedSegments.size()==0) || GetNofSegments()==0;
  return iResult;
}

int AliHLTDataBuffer::GetNofSegments() const
{
  // see header file for function documentation
  int iResult=fSegments.size() + fForwardedSegments.size();
  return iResult;
}

int AliHLTDataBuffer::GetNofConsumers() const
{
  // see header file for function documentation
  int iResult=fConsumers.size() + GetNofActiveConsumers() + fReleasedConsumers.size();
  return iResult;
}

int AliHLTDataBuffer::GetNofPendingConsumers() const
{
  // see header file for function documentation
  int iResult=fConsumers.size();
  return iResult;
}

int AliHLTDataBuffer::GetNofActiveConsumers() const
{
  // see header file for function documentation
  int iResult=fActiveConsumers.size();
  return iResult;
}

AliHLTDataBuffer::AliHLTRawBuffer* AliHLTDataBuffer::CreateRawBuffer(AliHLTUInt32_t size)
{
  // see header file for function documentation
  AliHLTRawBuffer* pRawBuffer=NULL;
  unsigned int reqSize=size+fgkSafetyPatternSize;
  pRawBuffer=AliHLTDataBuffer::AliHLTRawPage::GlobalAlloc(reqSize);
  if (pRawBuffer) {
    pRawBuffer->UseBuffer(size);
  }
  if (pRawBuffer!=NULL && fgkSafetyPatternSize>0) {
    //fgLogging.Logging(kHLTLogDebug, "AliHLTDataBuffer::CreateRawBuffer", "data buffer handling", "writing safety pattern to %p offset %d", (*buffer)->GetPointer(), (*buffer)->GetUsedSize());
    pRawBuffer->WritePattern(fgkSafetyPattern, fgkSafetyPatternSize);
  }
  return pRawBuffer;
}

int AliHLTDataBuffer::SetRawBufferDataSize(AliHLTRawBuffer* pBuffer, AliHLTUInt32_t size) const
{
  // see header file for function documentation
  int iResult=0;
  if (!pBuffer) return -EINVAL;
  if (size>pBuffer->GetUsedSize()) {
    HLTError("indicated data size %d exceeds data buffer %p (%d)", size, pBuffer->GetPointer(), pBuffer->GetUsedSize());
    return -ENOSPC;
  }
  if (fgkSafetyPatternSize>0) {
    if (pBuffer->CheckPattern(fgkSafetyPattern, fgkSafetyPatternSize)) {
      HLTError("potential memory corruption: component has written beyond end of data buffer %p size %d", pBuffer->GetPointer(), pBuffer->GetUsedSize());
    }
  }
  // shrink the buffer and write new pattern at the end
  AliHLTDataBuffer::AliHLTRawPage* rawpage=AliHLTDataBuffer::AliHLTRawPage::FindPage(pBuffer);
  if (rawpage) {
    pBuffer->UseBuffer(size);
    if (rawpage->SetSize(pBuffer, size+fgkSafetyPatternSize)==0) {
      // nothing to do
    } else {
      fgLogging.Logging(kHLTLogError, "AliHLTDataBuffer::SetRawBufferDataSize", "data buffer handling", "failed to set size for raw buffer %p", pBuffer);
      iResult=-EFAULT;
    }
  } else {
    fgLogging.Logging(kHLTLogError, "AliHLTDataBuffer::SetRawBufferDataSize", "data buffer handling", "can not find raw page for buffer %p", pBuffer);
    iResult=-ENOENT;
  }
  if (fgkSafetyPatternSize>0) {
    pBuffer->WritePattern(fgkSafetyPattern, fgkSafetyPatternSize);
  }
  return iResult;
}

int AliHLTDataBuffer::ReleaseRawBuffer(AliHLTRawBuffer* pBuffer)
{
  // see header file for function documentation
  int iResult=0;
  if (pBuffer) {
    AliHLTDataBuffer::AliHLTRawPage* rawpage=AliHLTDataBuffer::AliHLTRawPage::FindPage(pBuffer);
    if (rawpage)
    {
      if (fgkSafetyPatternSize>0) {
	//fgLogging.Logging(kHLTLogDebug, "AliHLTDataBuffer::ReleaseRawBuffer", "data buffer handling", "comparing safety pattern at %p offset %d", pBuffer->GetPointer(), reinterpret_cast<AliHLTUInt32_t>(pBuffer));
	if ((pBuffer)->CheckPattern(fgkSafetyPattern, fgkSafetyPatternSize)) {
	  fgLogging.Logging(kHLTLogFatal, "AliHLTDataBuffer::ReleaseRawBuffer", "data buffer handling", "component has written beyond end of data buffer %p size %d", pBuffer->GetPointer(), pBuffer->GetUsedSize());
	}
      }
      pBuffer->Reset();
      if (rawpage->Free(pBuffer)==0) {
      } else {
	fgLogging.Logging(kHLTLogError, "AliHLTDataBuffer::ReleaseRawBuffer", "data buffer handling", "failed to release raw buffer %p", pBuffer);
      }
    } else {
      fgLogging.Logging(kHLTLogError, "AliHLTDataBuffer::ReleaseRawBuffer", "data buffer handling", "can not find raw page for buffer %p", pBuffer);
      iResult=-ENOENT;
    }
  } else {
    fgLogging.Logging(kHLTLogError, "AliHLTDataBuffer::ReleaseRawBuffer", "data buffer handling", "invalid parameter");
    iResult=-EINVAL;
  }
  return iResult;
}


int AliHLTDataBuffer::DeleteRawBuffers() 
{
  // see header file for function documentation
  int iResult=0;
#ifdef ALIHLTSYSTEM_PROFILING
  int iTotalSize=0;
  int iCount=fgFreeBuffers.size()+fgActiveBuffers.size();
#endif //ALIHLTSYSTEM_PROFILING
  AliHLTRawBufferPList::iterator buffer;;
  while ((buffer=fgFreeBuffers.begin())!=fgFreeBuffers.end()) {
#ifdef ALIHLTSYSTEM_PROFILING
    iTotalSize+=(*buffer)->GetTotalSize();
#endif //ALIHLTSYSTEM_PROFILING
    delete *buffer;
    fgFreeBuffers.erase(buffer);
  }
  while ((buffer=fgActiveBuffers.begin())!=fgActiveBuffers.end()) {
#ifdef ALIHLTSYSTEM_PROFILING
    iTotalSize+=(*buffer)->GetTotalSize();
#endif //ALIHLTSYSTEM_PROFILING
    fgLogging.Logging(kHLTLogWarning, "AliHLTDataBuffer::DeleteRawBuffer", "data buffer handling", "request to delete active raw buffer container (raw buffer %p, size %d)", (*buffer)->GetPointer(), (*buffer)->GetTotalSize());
    delete *buffer;
    fgActiveBuffers.erase(buffer);
  }
#ifdef ALIHLTSYSTEM_PROFILING
  fgLogging.Logging(kHLTLogImportant, "AliHLTDataBuffer::DeleteRawBuffer", "data buffer handling", "Total memory allocation: %d byte in %d buffers", iTotalSize, iCount);
#endif //ALIHLTSYSTEM_PROFILING
  return iResult;
}

int AliHLTDataBuffer::PrintStatistics() 
{
  // see header file for function documentation
  int iResult=0;
  int nofPages=0;
  AliHLTUInt32_t totalSize=0;
  for (AliHLTDataBuffer::AliHLTRawPage* rawpage=AliHLTDataBuffer::AliHLTRawPage::NextPage(NULL);
       rawpage!=NULL; 
       rawpage=AliHLTDataBuffer::AliHLTRawPage::NextPage(rawpage)) {
    nofPages++;
    totalSize+=rawpage->Size();
    if (fgLogging.CheckFilter(kHLTLogDebug)) rawpage->Print("");
  }
  //if (rawpage) rawpage->Print("global");
  fgLogging.Logging(kHLTLogInfo, "AliHLTDataBuffer::PrintStatistics", "data buffer handling", "total number of memory pages: %d   total size %d", nofPages, totalSize);

  return iResult;
}

AliHLTConsumerDescriptor* AliHLTDataBuffer::FindConsumer(const AliHLTComponent* pConsumer, AliHLTConsumerDescriptorPList &list) const
{
  // see header file for function documentation
  AliHLTConsumerDescriptor* pDesc=NULL;
  AliHLTConsumerDescriptorPList::iterator desc=list.begin();
  while (desc!=list.end() && pDesc==NULL) {
    if ((pConsumer==NULL || (*desc)->GetComponent()==pConsumer)) {
      pDesc=*desc;
    }
    desc++;
  }
  return pDesc;
}

int AliHLTDataBuffer::ResetDataBuffer() 
{
  // see header file for function documentation
  int iResult=0;
  AliHLTRawBuffer* pBuffer=fpBuffer;
  fpBuffer=NULL;

  // cleanup forwarded segment lists
  assert(fForwardedSegments.size()==0);
  fForwardedSegments.clear();
  fForwardedSegmentSources.clear();

  // cleanup consumer states
  AliHLTConsumerDescriptorPList::iterator desc;
//   if (GetNofPendingConsumers()>0) {
//     desc=fConsumers.begin();
//     while (desc!=fConsumers.end()) {
//       AliHLTComponent* pComp=(*desc)->GetComponent();
//       HLTError("internal error: consumer %p (%s %p) did not get data from data buffer %p", *desc, pComp?pComp->GetComponentID():"", pComp, this);
//       desc++;
//     }
//   }
  desc=fReleasedConsumers.begin();
  while (desc!=fReleasedConsumers.end()) {
    AliHLTConsumerDescriptor* pDesc=*desc;
    fReleasedConsumers.erase(desc);
    desc=fReleasedConsumers.begin();
    fConsumers.push_back(pDesc);
  }
  desc=fActiveConsumers.begin();
  while (desc!=fActiveConsumers.end()) {
    AliHLTConsumerDescriptor* pDesc=*desc;
    HLTWarning("consumer %p (%s) was not released", pDesc, pDesc->GetComponent()?pDesc->GetComponent()->GetComponentID():"### invalid component ###");
    fActiveConsumers.erase(desc);
    desc=fActiveConsumers.begin();
    fConsumers.push_back(pDesc);
  }

  // cleanup segments
  AliHLTDataSegmentList::iterator segment=fSegments.begin();
  while (segment!=fSegments.end()) {
    fSegments.erase(segment);
    segment=fSegments.begin();
  }

  // cleanup raw buffer
  if (pBuffer) {
    ReleaseRawBuffer(pBuffer);
  }
  return iResult;
}

int AliHLTDataBuffer::Reset()
{
  // see header file for function documentation
  return ResetDataBuffer();
}

// this is the version which works on lists of components instead of consumer descriptors
// int AliHLTDataBuffer::ChangeConsumerState(AliHLTComponent* pConsumer, AliHLTComponentPList &srcList, AliHLTComponentPList &tgtList)
// {
//   int iResult=0;
//   if (pDesc) {
//     AliHLTComponentPList::iterator desc=srcList.begin();
//     while (desc!=srcList.end()) {
//       if ((*desc)==pConsumer) {
// 	srcList.erase(desc);
// 	tgtList.push_back(pConsumer);
// 	break;
//       }
//      desc++;
//     }
//     if (desc==srcList.end()) {
//       HLTError("can not find consumer component %p in list", pConsumer);
//       iResult=-ENOENT;
//     }
//   } else {
//     HLTError("invalid parameter");
//     iResult=-EINVAL;
//   }
//   return iResult;
// }

int AliHLTDataBuffer::ChangeConsumerState(AliHLTConsumerDescriptor* pDesc, AliHLTConsumerDescriptorPList &srcList, AliHLTConsumerDescriptorPList &tgtList)
{
  // see header file for function documentation
  int iResult=-ENOENT;
  if (pDesc) {
    AliHLTConsumerDescriptorPList::iterator desc=srcList.begin();
    while (desc!=srcList.end()) {
      if ((*desc)==pDesc) {
	srcList.erase(desc);
	tgtList.push_back(pDesc);
	iResult=0;
	break;
      }
      desc++;
    }
    if (iResult<0) {
      HLTError("can not find consumer descriptor %p in list", pDesc);
    }
  } else {
    HLTError("invalid parameter");
    iResult=-EINVAL;
  }
  return iResult;
}

int AliHLTDataBuffer::CleanupConsumerList() 
{
  // see header file for function documentation
  int iResult=0;
  ResetDataBuffer();
  AliHLTConsumerDescriptorPList::iterator desc=fConsumers.begin();
  while (desc!=fConsumers.end()) {
    delete *desc;
    fConsumers.erase(desc);
    desc=fConsumers.begin();
  }
  return iResult;
}

int AliHLTDataBuffer::FindConsumer(const AliHLTComponent* pConsumer, int bAllLists)
{
  // see header file for function documentation
  AliHLTConsumerDescriptorPList::iterator desc=fConsumers.begin();
  while (desc!=fConsumers.end()) {
    if ((*desc)->GetComponent()==pConsumer)
      return 1;
    desc++;
  }
  if (bAllLists==0) return 0;

  desc=fActiveConsumers.begin();
  while (desc!=fActiveConsumers.end()) {
    if ((*desc)->GetComponent()==pConsumer)
      return 1;
    desc++;
  }
  desc=fReleasedConsumers.begin();
  while (desc!=fReleasedConsumers.end()) {
    if ((*desc)->GetComponent()==pConsumer)
      return 1;
    desc++;
  }
  return 0;
}

AliHLTDataBuffer::AliHLTRawBuffer::AliHLTRawBuffer(AliHLTUInt32_t size)
  : fSize(0)
  , fTotalSize(size)
  , fExternalPtr(NULL)
  , fPtr(static_cast<AliHLTUInt8_t*>(malloc(size)))
  , fLastEventCount(0)
{
  // see header file for class documentation
  // or
  // refer to README to build package
  // or
  // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
  if (fPtr==NULL) {
    fSize=0;
    fTotalSize=0;
  }
}

AliHLTDataBuffer::AliHLTRawBuffer::AliHLTRawBuffer(AliHLTUInt32_t size, AliHLTUInt8_t* buffer)
  : fSize(0)
  , fTotalSize(size)
  , fExternalPtr(buffer)
  , fPtr(fExternalPtr)
  , fLastEventCount(0)
{
  // see header file for class documentation
}

AliHLTDataBuffer::AliHLTRawBuffer::~AliHLTRawBuffer()
{
  // see header file for class documentation
  if (fExternalPtr==NULL && fPtr) {
    free(fPtr);
  }
  fPtr=NULL;
  fSize=0;
  fTotalSize=0;
}

int AliHLTDataBuffer::AliHLTRawBuffer::operator==(void* ptr) const
{
  // see header file for function documentation
  return fPtr == static_cast<AliHLTUInt8_t*>(ptr);
}

int AliHLTDataBuffer::AliHLTRawBuffer::operator<(void* ptr) const
{
  // see header file for function documentation
  int iResult=fPtr < static_cast<AliHLTUInt8_t*>(ptr);
  //printf("%p: %p <= %p (%d)\n", this, fPtr, ptr, iResult);
  return iResult;
}

int AliHLTDataBuffer::AliHLTRawBuffer::operator<=(void* ptr) const
{
  // see header file for function documentation
  int iResult=fPtr <= static_cast<AliHLTUInt8_t*>(ptr);
  //printf("%p: %p <= %p (%d)\n", this, fPtr, ptr, iResult);
  return iResult;
}

int AliHLTDataBuffer::AliHLTRawBuffer::operator>(void* ptr) const
{
  // see header file for function documentation
  int iResult=fPtr+fSize > static_cast<AliHLTUInt8_t*>(ptr);
  //printf("%p: %p + %d > %p (%d)\n", this, fPtr, fSize, ptr, iResult);
  return iResult;
}

int AliHLTDataBuffer::AliHLTRawBuffer::operator-(void* ptr) const
{
  // see header file for function documentation
  return static_cast<int>(static_cast<AliHLTUInt8_t*>(ptr)-fPtr);
}

int AliHLTDataBuffer::AliHLTRawBuffer::operator<(const AliHLTRawBuffer& op) const
{
  // see header file for function documentation
  return (fPtr+fSize < op.fPtr);
}

int AliHLTDataBuffer::AliHLTRawBuffer::operator<=(const AliHLTRawBuffer& op) const
{
  // see header file for function documentation
  return (fPtr+fSize <= op.fPtr);
}

int AliHLTDataBuffer::AliHLTRawBuffer::operator>(const AliHLTRawBuffer& op) const
{
  // see header file for function documentation
  return (fPtr >= op.fPtr+op.fSize);
}

AliHLTUInt8_t* AliHLTDataBuffer::AliHLTRawBuffer::UseBuffer(AliHLTUInt32_t size)
{
  // mark a portion of the buffer as used
  if (fTotalSize>=size) {
    fSize=size;
    fLastEventCount=AliHLTDataBuffer::fgEventCount;
    // only return pointer if there is a portion of the buffer used
    if (size>0) return fPtr;
  }
  return NULL;
}

AliHLTDataBuffer::AliHLTRawBuffer* AliHLTDataBuffer::AliHLTRawBuffer::Split(AliHLTUInt32_t size)
{
  // split a buffer at specified size
  // only possible for buffers with external memory
  if (fTotalSize>size && 
      (fSize==0 || fSize<=size) && // used size must fit into the first part
      fExternalPtr!=NULL) {
    AliHLTRawBuffer* part2=new AliHLTRawBuffer(fTotalSize-size, fPtr+size);
    if (part2) {
      fTotalSize=size;
    }
    return part2;
  }
  return NULL;
}

int AliHLTDataBuffer::AliHLTRawBuffer::CheckSize(AliHLTUInt32_t size) const
{
  // see header file for function documentation
  if (fTotalSize<size) return 0;
  unsigned adjust=0;
  if (fLastEventCount+1<AliHLTDataBuffer::fgEventCount) {
    adjust=AliHLTDataBuffer::fgEventCount-fLastEventCount;
  }
  return (adjust>2) || ((fTotalSize-size)<(fgMargin<<adjust));
}

int AliHLTDataBuffer::AliHLTRawBuffer::Reset()
{
  // see header file for function documentation
  fSize=0;
  return 0;
}

int AliHLTDataBuffer::AliHLTRawBuffer::WritePattern(const char* pattern, int size)
{
  // see header file for function documentation
  int iResult=0;
  if (pattern!=NULL && size>0) {
    if (fSize+size<=fTotalSize) {
      memcpy(((char*)fPtr)+fSize, pattern, size);
      iResult=size;
    } else {
      iResult=-ENOSPC;
    }
  }
  return iResult;
}

int AliHLTDataBuffer::AliHLTRawBuffer::CheckPattern(const char* pattern, int size) const
{
  // see header file for function documentation
  int iResult=0;
  if (pattern!=NULL && size>0) {
    if (fSize+size<=fTotalSize) {
      iResult=memcmp(((char*)fPtr)+fSize, pattern, size)!=0;
    } else {
      iResult=-ENOSPC;
    }
  }
  return iResult;
}

int AliHLTDataBuffer::AliHLTRawBuffer::Merge(const AliHLTDataBuffer::AliHLTRawBuffer& neighbor)
{
  // Merge buffer with neighboring buffer.
  // Only possible if the buffers are consecutive with out any gap.

  if (!fExternalPtr || !neighbor.fExternalPtr) return -EPERM;

  if (neighbor.fTotalSize==0 &&
      fPtr < neighbor.fPtr &&
      fPtr+fTotalSize > neighbor.fPtr) {
    // special case for a buffer of zero size embedded into this buffer
    // nothing to do
    return 0;
  }
  if (fTotalSize==0 &&
      neighbor.fPtr < fPtr &&
      neighbor.fPtr+neighbor.fTotalSize > fPtr) {
    // special case for this buffer of size zero embedded into another buffer
    fPtr=neighbor.fPtr;
    fExternalPtr=fPtr;
    fTotalSize+=neighbor.fTotalSize;
    fSize=0;
    return 0;
  }
  if (fPtr+fTotalSize == neighbor.fPtr) {
    fTotalSize+=neighbor.fTotalSize;
    fSize=0;
    return 0;
  }
  if (fPtr == neighbor.fPtr+neighbor.fTotalSize) {
    fPtr=neighbor.fPtr;
    fExternalPtr=fPtr;
    fTotalSize+=neighbor.fTotalSize;
    fSize=0;
    return 0;
  }
  return -EINVAL;
}

void AliHLTDataBuffer::AliHLTRawBuffer::Print(const char* option) const
{
  /// print buffer information
  if (strcmp(option, "min")!=0) {
    cout << "************* AliHLTRawBuffer status ***********" << endl;
  }
  printf("  %p: buffer %p%s size %d used %d\n", this, fPtr, fExternalPtr?" (external)":"", fTotalSize, fSize); fflush(stdout);
}

AliHLTDataBuffer::AliHLTRawPage::AliHLTRawPage(AliHLTUInt32_t pagesize)
  : fSize(pagesize)
  , fPtr(static_cast<AliHLTUInt8_t*>(malloc(pagesize)))
  , fFreeBuffers()
  , fUsedBuffers()
{
  // constructor
  if (fPtr) {
    fFreeBuffers.push_back(new AliHLTRawBuffer(fSize, fPtr));
  } else {
    fSize=0;
  }
}

AliHLTDataBuffer::AliHLTRawPage::~AliHLTRawPage()
{
  // destructor
  if (IsUsed()) {
    // do not free if the resources have not been completely freed
    HLTError("memory mismatch: not all allocated intances have been released");
  } else {
    if (IsFragmented()) {
      HLTWarning("page still fragmented");
    }
    AliHLTRawBufferPList::iterator element=fFreeBuffers.begin();
    while (element!=fFreeBuffers.end()) {
      if (*element) delete *element;
      element=fFreeBuffers.erase(element);
    }
    if (fPtr) {
      free(fPtr);
    }
    fPtr=NULL;
    fSize=0;
  }
}

AliHLTDataBuffer::AliHLTRawBuffer* AliHLTDataBuffer::AliHLTRawPage::Alloc(AliHLTUInt32_t size)
{
  /// alloc a buffer of specified size
  if (fFreeBuffers.size()==0) return NULL;
  
  for (AliHLTRawBufferPList::iterator iter=fFreeBuffers.begin();
       iter!=fFreeBuffers.end();
       iter++) {
    if ((*iter)->GetTotalSize()==size) {
      AliHLTRawBuffer* thisbuffer=*iter;
      fFreeBuffers.erase(iter);
      fUsedBuffers.push_back(thisbuffer);
      return thisbuffer;
    } else if ((*iter)->GetTotalSize()>size) {
      AliHLTRawBuffer* thisbuffer=*iter;
      AliHLTRawBuffer* newbuffer=thisbuffer->Split(size);
      if (newbuffer) {
	*iter=newbuffer;
	fUsedBuffers.push_back(thisbuffer);
	return thisbuffer;
      } else {
	HLTWarning("failed to alloc raw buffer: cannot split raw buffer %p of size %d (used %d) at size %d", *iter, (*iter)->GetTotalSize(), (*iter)->GetUsedSize(), size);
      }
    }
  }
  return NULL;
}

int AliHLTDataBuffer::AliHLTRawPage::Free(AliHLTRawBuffer* pBuffer)
{
  /// free a buffer and merge consecutive free buffers
  int iResult=0;
  for (AliHLTRawBufferPList::iterator iter=fUsedBuffers.begin();
       iter!=fUsedBuffers.end() && iResult>=0;
       iter++) {
    if ((*iter)==pBuffer) {
      fUsedBuffers.erase(iter);
      AliHLTRawBufferPList::iterator prev=fFreeBuffers.begin();
      for (; prev!=fFreeBuffers.end() && iResult>=0; prev++) {
	if ((*pBuffer)<(*(*prev)) ||
	    ((*prev)->GetTotalSize()==0 && pBuffer->GetPointer()<=(*prev)->GetPointer() && (*prev)->GetPointer()<=pBuffer->GetPointer()+pBuffer->GetTotalSize())) {
	  // check consecutive buffers
	  if ((*(*prev)) == (pBuffer->GetPointer()+pBuffer->GetTotalSize()) ||
	      ((*prev)->GetTotalSize()==0 && pBuffer->GetPointer()<=(*prev)->GetPointer() && (*prev)->GetPointer()<=pBuffer->GetPointer()+pBuffer->GetTotalSize())) {
	    // the buffer to be released has a consecutive free buffer -> merge them
	    if ((iResult=pBuffer->Merge(*(*prev)))>=0) {
	      delete *prev;
	      *prev=pBuffer;
	    } else {
	      HLTError("failed to merge consecutive/overlapping buffers %p and %p", pBuffer, (*prev));
	      pBuffer->Print("");
	      (*prev)->Print("");
	    }
	    break;
	  }
	  fFreeBuffers.insert(prev, pBuffer);
	  break;
	}
	if ((*pBuffer)>(*(*prev)) ||
	    (pBuffer->GetTotalSize()==0 && (*prev)->GetPointer()<=pBuffer->GetPointer() && pBuffer->GetPointer()<=(*prev)->GetPointer()+(*prev)->GetTotalSize())) {
	  // check consecutive buffers
	  if ((*pBuffer) == ((*prev)->GetPointer()+(*prev)->GetTotalSize())||
	      (pBuffer->GetTotalSize()==0 && (*prev)->GetPointer()<=pBuffer->GetPointer() && pBuffer->GetPointer()<=(*prev)->GetPointer()+(*prev)->GetTotalSize())) {
	    // the buffer to be released is consecutive to a free buffer -> merge them
	    if ((iResult=pBuffer->Merge(*(*prev)))>=0) {
	      AliHLTRawBufferPList::iterator succ=prev+1;
	      delete *prev;
	      *prev=pBuffer;
	      // check if the buffer and the following one are consecutive
	      if (succ!=fFreeBuffers.end() &&
		  (*(*succ)) == (pBuffer->GetPointer()+pBuffer->GetTotalSize())) {
		if ((iResult=pBuffer->Merge(*(*succ)))>=0) {
		  delete *succ;
		  fFreeBuffers.erase(succ);
		}
	      }
	    }
	    break;
	  }
	}
      }
      if (prev==fFreeBuffers.end()) {
	fFreeBuffers.push_back(pBuffer);
      }

      // merge consecutive free buffers
      prev=fFreeBuffers.begin();
      for (AliHLTRawBufferPList::iterator current=prev+1; current!=fFreeBuffers.end() && iResult>=0; ) {
	// check if the buffer is embedded into the previous one
	if ((*current)->GetTotalSize()==0 && (*prev)->GetPointer()<=(*current)->GetPointer() && (*current)->GetPointer()<(*prev)->GetPointer()+(*prev)->GetTotalSize())  {
	  if ((iResult=(*prev)->Merge(*(*current)))>=0) {
	    current=fFreeBuffers.erase(current);
	    continue;
	  } else {
	    HLTError("failed to merge embedded zero length buffer into preceeding buffer");
	    Print("");
	  }
	}
	// check if the buffer is consecutive to the previous one
	if ((*(*current)) == ((*prev)->GetPointer()+(*prev)->GetTotalSize())) {
	  if ((iResult=(*prev)->Merge(*(*current)))>=0) {
	    current=fFreeBuffers.erase(current);
	    continue;
	  } else {
	    HLTError("failed to merge consecutive free buffers");
	    Print("");
	  }
	}
	prev=current++;
      }

      // buffer was part of this page
      return 0;
    }
  }
  // buffer not found in this page
  return 1;
}

int AliHLTDataBuffer::AliHLTRawPage::SetSize(const AliHLTDataBuffer::AliHLTRawBuffer* pBuffer, AliHLTUInt32_t size)
{
  /// set the size of a raw buffer and release the remaining part
  int iResult=0;
  for (AliHLTRawBufferPList::iterator iter=fUsedBuffers.begin();
       iter!=fUsedBuffers.end() && iResult>=0;
       iter++) {
    if ((*iter)==pBuffer) {      // buffer was part of this page
      if ((*iter)->GetTotalSize()==size) return 0;
      if ((*iter)->GetTotalSize()<size) {
	HLTError("%d exceeds total size of buffer %p (%d used %d)\n", size, *iter, (*iter)->GetTotalSize(), (*iter)->GetUsedSize());
	return -ENOSPC;
      }
      AliHLTDataBuffer::AliHLTRawBuffer* freespace=(*iter)->Split(size);
      if (freespace) {
	fUsedBuffers.push_back(freespace);
	Free(freespace);
      } else {
	HLTWarning("failed to relase unused memory: cannot split raw buffer %p of size %d (used %d) at size %d", *iter, (*iter)->GetTotalSize(), (*iter)->GetUsedSize(), size);
      }
      return 0;
    }
  }
  // buffer not found in this page
  return 1;
}

bool AliHLTDataBuffer::AliHLTRawPage::HasBuffer(const AliHLTDataBuffer::AliHLTRawBuffer* pBuffer)
{
  /// check if the buffer is in this page
  for (AliHLTRawBufferPList::iterator iter=fUsedBuffers.begin();
       iter!=fUsedBuffers.end();
       iter++) {
    if ((*iter)==pBuffer) {      // buffer was part of this page
      return true;
    }
  }
  // buffer not found in this page
  return false;
}

AliHLTUInt32_t AliHLTDataBuffer::AliHLTRawPage::Capacity() const 
{
  /// get max available contiguous buffer
  AliHLTUInt32_t capacity=0;
  for (unsigned i=0; i<fFreeBuffers.size(); i++) {
    if (fFreeBuffers[i]->GetTotalSize()>capacity) 
      capacity=fFreeBuffers[i]->GetTotalSize();
  }
  return capacity;
}

void AliHLTDataBuffer::AliHLTRawPage::Print(const char* option)
{
  /// print page information
  if (strcmp(option, "global")==0) {
    cout << "number of global pages: " << fgGlobalPages.size() << endl;
    for (AliHLTRawPage* rawpage=NextPage(NULL);
	 rawpage!=NULL; 
	 rawpage=NextPage(rawpage)) {
      rawpage->Print("");
    }
    return;
  }
  cout << "************* AliHLTRawPage status ***********" << endl;
  cout << "  instance " << this << endl;
  printf("  buffer %p  size %d", fPtr, fSize);
  cout << "  used buffers: " << fUsedBuffers.size() << endl;
  AliHLTRawBufferPList::iterator iter=fUsedBuffers.begin();
  for (; iter!=fUsedBuffers.end(); iter++) {
    cout << "  "; (*iter)->Print("min");
  }
  cout << "  free buffers: " << fFreeBuffers.size() << endl;
  iter=fFreeBuffers.begin();
  for (; iter!=fFreeBuffers.end(); iter++) {
    cout << "  "; (*iter)->Print("min");
  }
}


vector<AliHLTDataBuffer::AliHLTRawPage*> AliHLTDataBuffer::AliHLTRawPage::fgGlobalPages;

AliHLTUInt32_t AliHLTDataBuffer::AliHLTRawPage::fgGlobalPageSize=30*1024*1024;

AliHLTDataBuffer::AliHLTRawBuffer* AliHLTDataBuffer::AliHLTRawPage::GlobalAlloc(AliHLTUInt32_t size, int verbosity)
{
  // alloc a buffer of specified size from the global pages
  AliHLTDataBuffer::AliHLTRawBuffer* rawbuffer=NULL;
  vector<AliHLTDataBuffer::AliHLTRawPage*>::iterator page=fgGlobalPages.begin();
  AliHLTLogging log;
  for (page=fgGlobalPages.begin();page!=fgGlobalPages.end(); page++) {
    if ((rawbuffer=(*page)->Alloc(size))!=NULL) {
      if (verbosity>1) {
	log.Logging(kHLTLogInfo, "AliHLTDataBuffer::AliHLTRawPage::GlobalAlloc", "data buffer handling", "allocated raw buffer %p from page %p\n", rawbuffer, *page);
	rawbuffer->Print("min");
      }
      break;
    }
  }
  if (!rawbuffer) {
    AliHLTUInt32_t rawPageSize=fgGlobalPageSize;
    if (rawPageSize<size) {
      if (rawPageSize*10<size) {
	log.Logging(kHLTLogError, "AliHLTDataBuffer::AliHLTRawPage::GlobalAlloc", "data buffer handling", "refusing to allocate buffer of size %d", size);
	return NULL;
      }
      rawPageSize=size;
    }
    AliHLTDataBuffer::AliHLTRawPage* rawpage=new AliHLTDataBuffer::AliHLTRawPage(rawPageSize);
    if (!rawpage) {
      log.Logging(kHLTLogError, "AliHLTDataBuffer::AliHLTRawPage::GlobalAlloc", "data buffer handling", "can not create raw page");
      return NULL;
    }

    // check is there is at least one unused page which can be replaced by the newly created one
    for (page=fgGlobalPages.begin(); page!=fgGlobalPages.end(); page++) {
      if ((*page)->IsUsed()) continue;
      delete *page;
      fgGlobalPages.erase(page);
      break; // delete only one page to be replaced by the new page
    }
    fgGlobalPages.push_back(rawpage);
    if ((rawbuffer=rawpage->Alloc(size))!=NULL) {
      if (verbosity>1) {
	log.Logging(kHLTLogInfo, "AliHLTDataBuffer::AliHLTRawPage::GlobalAlloc", "data buffer handling", "allocated raw buffer %p from page %p\n", rawbuffer, rawpage);
	rawbuffer->Print("min");
      }
    }
  }

  return rawbuffer;
}

AliHLTDataBuffer::AliHLTRawPage* AliHLTDataBuffer::AliHLTRawPage::FindPage(AliHLTDataBuffer::AliHLTRawBuffer* buffer)
{
  // find buffer in the global pages
  vector<AliHLTDataBuffer::AliHLTRawPage*>::iterator page=fgGlobalPages.begin();
  for (; page!=fgGlobalPages.end(); page++) {
    if ((*page)->HasBuffer(buffer)) {
      return *page;
    }
  }

  return NULL;
}

int AliHLTDataBuffer::AliHLTRawPage::GlobalClean()
{
  // cleanup the global pages */
  vector<AliHLTDataBuffer::AliHLTRawPage*>::iterator page=fgGlobalPages.begin();
  while (page!=fgGlobalPages.end()) {
    if (!(*page)->IsUsed()) {
      delete *page;
      page=fgGlobalPages.erase(page);
      continue;
    }
    AliHLTLogging log;
    log.Logging(kHLTLogError, "AliHLTDataBuffer::AliHLTRawPage::GlobalClean", "data buffer handling", "HLT memory page still in use, skipping cleanup, potential memory leak");
    
    page++;
  }
  
  return 0;
}

AliHLTDataBuffer::AliHLTRawPage* AliHLTDataBuffer::AliHLTRawPage::NextPage(const AliHLTDataBuffer::AliHLTRawPage* prev)
{
  // get next global page
  vector<AliHLTDataBuffer::AliHLTRawPage*>::iterator page=fgGlobalPages.begin();
  for (; page!=fgGlobalPages.end(); page++) {
    if (prev==NULL) return *page;
    if (*page!=prev) continue;
    if (++page!=fgGlobalPages.end()) return *page;
    break;
  }
  return NULL;
}

void AliHLTDataBuffer::AliHLTDataSegment::Print(const char* /*option*/) const
{
  // print info for data segment
  cout << "AliHLTDataSegment " << this 
       << " " << AliHLTComponent::DataType2Text(fDataType)
       << " " << hex << fSpecification << dec
       << " Ptr " << (void*)fPtr
       << " offset " << fSegmentOffset
       << " size " << fSegmentSize
       << endl;
}

void AliHLTDataBuffer::AliHLTForwardedDataSegment::Print(const char* option) const
{
  // print info for data segment
  cout << "AliHLTForwardeDataSegment " << this << endl;
  cout << "    my    : "; AliHLTDataSegment::Print(option);
  cout << "    parent: "; fParentSegment.Print(option);
  cout << "    task  : "; 
  if (fParentTask) fParentTask->Print("");
  else cout << "nil" << endl;
}

void AliHLTDataBuffer::Print(const char* option) const
{
  // print info for data buffer
  unsigned i=0;
  cout << "AliHLTDataBuffer " << this << endl;
  cout << " raw buffer " << fpBuffer << endl;
  if (fpBuffer) {
    cout << " ";
    fpBuffer->Print(option);
  }

  cout << " total segments: " << GetNofSegments() << endl;
  cout << "   data segments: " << fSegments.size() << endl;
  for (i=0; i<fSegments.size(); i++) {
    cout << "     ";
    fSegments[i].Print(option);
  }

  cout << "   forwarded segments: " << fForwardedSegments.size() << endl;
  for (i=0; i<fForwardedSegments.size(); i++) {
    cout << "     ";
    fForwardedSegments[i].Print(option);
  }

  cout << " consumers: " << GetNofConsumers() << endl;
  for (i=0; i<fConsumers.size(); i++) {
    cout << "   ";
    fConsumers[i]->Print(option);
  }

  cout << " active consumers: " << GetNofActiveConsumers() << endl;
  for (i=0; i<fActiveConsumers.size(); i++) {
    cout << "   ";
    fActiveConsumers[i]->Print(option);
  }

  cout << " released consumers: " << fReleasedConsumers.size() << endl;
  for (i=0; i<fReleasedConsumers.size(); i++) {
    cout << "   ";
    fReleasedConsumers[i]->Print(option);
  }

}
 AliHLTDataBuffer.cxx:1
 AliHLTDataBuffer.cxx:2
 AliHLTDataBuffer.cxx:3
 AliHLTDataBuffer.cxx:4
 AliHLTDataBuffer.cxx:5
 AliHLTDataBuffer.cxx:6
 AliHLTDataBuffer.cxx:7
 AliHLTDataBuffer.cxx:8
 AliHLTDataBuffer.cxx:9
 AliHLTDataBuffer.cxx:10
 AliHLTDataBuffer.cxx:11
 AliHLTDataBuffer.cxx:12
 AliHLTDataBuffer.cxx:13
 AliHLTDataBuffer.cxx:14
 AliHLTDataBuffer.cxx:15
 AliHLTDataBuffer.cxx:16
 AliHLTDataBuffer.cxx:17
 AliHLTDataBuffer.cxx:18
 AliHLTDataBuffer.cxx:19
 AliHLTDataBuffer.cxx:20
 AliHLTDataBuffer.cxx:21
 AliHLTDataBuffer.cxx:22
 AliHLTDataBuffer.cxx:23
 AliHLTDataBuffer.cxx:24
 AliHLTDataBuffer.cxx:25
 AliHLTDataBuffer.cxx:26
 AliHLTDataBuffer.cxx:27
 AliHLTDataBuffer.cxx:28
 AliHLTDataBuffer.cxx:29
 AliHLTDataBuffer.cxx:30
 AliHLTDataBuffer.cxx:31
 AliHLTDataBuffer.cxx:32
 AliHLTDataBuffer.cxx:33
 AliHLTDataBuffer.cxx:34
 AliHLTDataBuffer.cxx:35
 AliHLTDataBuffer.cxx:36
 AliHLTDataBuffer.cxx:37
 AliHLTDataBuffer.cxx:38
 AliHLTDataBuffer.cxx:39
 AliHLTDataBuffer.cxx:40
 AliHLTDataBuffer.cxx:41
 AliHLTDataBuffer.cxx:42
 AliHLTDataBuffer.cxx:43
 AliHLTDataBuffer.cxx:44
 AliHLTDataBuffer.cxx:45
 AliHLTDataBuffer.cxx:46
 AliHLTDataBuffer.cxx:47
 AliHLTDataBuffer.cxx:48
 AliHLTDataBuffer.cxx:49
 AliHLTDataBuffer.cxx:50
 AliHLTDataBuffer.cxx:51
 AliHLTDataBuffer.cxx:52
 AliHLTDataBuffer.cxx:53
 AliHLTDataBuffer.cxx:54
 AliHLTDataBuffer.cxx:55
 AliHLTDataBuffer.cxx:56
 AliHLTDataBuffer.cxx:57
 AliHLTDataBuffer.cxx:58
 AliHLTDataBuffer.cxx:59
 AliHLTDataBuffer.cxx:60
 AliHLTDataBuffer.cxx:61
 AliHLTDataBuffer.cxx:62
 AliHLTDataBuffer.cxx:63
 AliHLTDataBuffer.cxx:64
 AliHLTDataBuffer.cxx:65
 AliHLTDataBuffer.cxx:66
 AliHLTDataBuffer.cxx:67
 AliHLTDataBuffer.cxx:68
 AliHLTDataBuffer.cxx:69
 AliHLTDataBuffer.cxx:70
 AliHLTDataBuffer.cxx:71
 AliHLTDataBuffer.cxx:72
 AliHLTDataBuffer.cxx:73
 AliHLTDataBuffer.cxx:74
 AliHLTDataBuffer.cxx:75
 AliHLTDataBuffer.cxx:76
 AliHLTDataBuffer.cxx:77
 AliHLTDataBuffer.cxx:78
 AliHLTDataBuffer.cxx:79
 AliHLTDataBuffer.cxx:80
 AliHLTDataBuffer.cxx:81
 AliHLTDataBuffer.cxx:82
 AliHLTDataBuffer.cxx:83
 AliHLTDataBuffer.cxx:84
 AliHLTDataBuffer.cxx:85
 AliHLTDataBuffer.cxx:86
 AliHLTDataBuffer.cxx:87
 AliHLTDataBuffer.cxx:88
 AliHLTDataBuffer.cxx:89
 AliHLTDataBuffer.cxx:90
 AliHLTDataBuffer.cxx:91
 AliHLTDataBuffer.cxx:92
 AliHLTDataBuffer.cxx:93
 AliHLTDataBuffer.cxx:94
 AliHLTDataBuffer.cxx:95
 AliHLTDataBuffer.cxx:96
 AliHLTDataBuffer.cxx:97
 AliHLTDataBuffer.cxx:98
 AliHLTDataBuffer.cxx:99
 AliHLTDataBuffer.cxx:100
 AliHLTDataBuffer.cxx:101
 AliHLTDataBuffer.cxx:102
 AliHLTDataBuffer.cxx:103
 AliHLTDataBuffer.cxx:104
 AliHLTDataBuffer.cxx:105
 AliHLTDataBuffer.cxx:106
 AliHLTDataBuffer.cxx:107
 AliHLTDataBuffer.cxx:108
 AliHLTDataBuffer.cxx:109
 AliHLTDataBuffer.cxx:110
 AliHLTDataBuffer.cxx:111
 AliHLTDataBuffer.cxx:112
 AliHLTDataBuffer.cxx:113
 AliHLTDataBuffer.cxx:114
 AliHLTDataBuffer.cxx:115
 AliHLTDataBuffer.cxx:116
 AliHLTDataBuffer.cxx:117
 AliHLTDataBuffer.cxx:118
 AliHLTDataBuffer.cxx:119
 AliHLTDataBuffer.cxx:120
 AliHLTDataBuffer.cxx:121
 AliHLTDataBuffer.cxx:122
 AliHLTDataBuffer.cxx:123
 AliHLTDataBuffer.cxx:124
 AliHLTDataBuffer.cxx:125
 AliHLTDataBuffer.cxx:126
 AliHLTDataBuffer.cxx:127
 AliHLTDataBuffer.cxx:128
 AliHLTDataBuffer.cxx:129
 AliHLTDataBuffer.cxx:130
 AliHLTDataBuffer.cxx:131
 AliHLTDataBuffer.cxx:132
 AliHLTDataBuffer.cxx:133
 AliHLTDataBuffer.cxx:134
 AliHLTDataBuffer.cxx:135
 AliHLTDataBuffer.cxx:136
 AliHLTDataBuffer.cxx:137
 AliHLTDataBuffer.cxx:138
 AliHLTDataBuffer.cxx:139
 AliHLTDataBuffer.cxx:140
 AliHLTDataBuffer.cxx:141
 AliHLTDataBuffer.cxx:142
 AliHLTDataBuffer.cxx:143
 AliHLTDataBuffer.cxx:144
 AliHLTDataBuffer.cxx:145
 AliHLTDataBuffer.cxx:146
 AliHLTDataBuffer.cxx:147
 AliHLTDataBuffer.cxx:148
 AliHLTDataBuffer.cxx:149
 AliHLTDataBuffer.cxx:150
 AliHLTDataBuffer.cxx:151
 AliHLTDataBuffer.cxx:152
 AliHLTDataBuffer.cxx:153
 AliHLTDataBuffer.cxx:154
 AliHLTDataBuffer.cxx:155
 AliHLTDataBuffer.cxx:156
 AliHLTDataBuffer.cxx:157
 AliHLTDataBuffer.cxx:158
 AliHLTDataBuffer.cxx:159
 AliHLTDataBuffer.cxx:160
 AliHLTDataBuffer.cxx:161
 AliHLTDataBuffer.cxx:162
 AliHLTDataBuffer.cxx:163
 AliHLTDataBuffer.cxx:164
 AliHLTDataBuffer.cxx:165
 AliHLTDataBuffer.cxx:166
 AliHLTDataBuffer.cxx:167
 AliHLTDataBuffer.cxx:168
 AliHLTDataBuffer.cxx:169
 AliHLTDataBuffer.cxx:170
 AliHLTDataBuffer.cxx:171
 AliHLTDataBuffer.cxx:172
 AliHLTDataBuffer.cxx:173
 AliHLTDataBuffer.cxx:174
 AliHLTDataBuffer.cxx:175
 AliHLTDataBuffer.cxx:176
 AliHLTDataBuffer.cxx:177
 AliHLTDataBuffer.cxx:178
 AliHLTDataBuffer.cxx:179
 AliHLTDataBuffer.cxx:180
 AliHLTDataBuffer.cxx:181
 AliHLTDataBuffer.cxx:182
 AliHLTDataBuffer.cxx:183
 AliHLTDataBuffer.cxx:184
 AliHLTDataBuffer.cxx:185
 AliHLTDataBuffer.cxx:186
 AliHLTDataBuffer.cxx:187
 AliHLTDataBuffer.cxx:188
 AliHLTDataBuffer.cxx:189
 AliHLTDataBuffer.cxx:190
 AliHLTDataBuffer.cxx:191
 AliHLTDataBuffer.cxx:192
 AliHLTDataBuffer.cxx:193
 AliHLTDataBuffer.cxx:194
 AliHLTDataBuffer.cxx:195
 AliHLTDataBuffer.cxx:196
 AliHLTDataBuffer.cxx:197
 AliHLTDataBuffer.cxx:198
 AliHLTDataBuffer.cxx:199
 AliHLTDataBuffer.cxx:200
 AliHLTDataBuffer.cxx:201
 AliHLTDataBuffer.cxx:202
 AliHLTDataBuffer.cxx:203
 AliHLTDataBuffer.cxx:204
 AliHLTDataBuffer.cxx:205
 AliHLTDataBuffer.cxx:206
 AliHLTDataBuffer.cxx:207
 AliHLTDataBuffer.cxx:208
 AliHLTDataBuffer.cxx:209
 AliHLTDataBuffer.cxx:210
 AliHLTDataBuffer.cxx:211
 AliHLTDataBuffer.cxx:212
 AliHLTDataBuffer.cxx:213
 AliHLTDataBuffer.cxx:214
 AliHLTDataBuffer.cxx:215
 AliHLTDataBuffer.cxx:216
 AliHLTDataBuffer.cxx:217
 AliHLTDataBuffer.cxx:218
 AliHLTDataBuffer.cxx:219
 AliHLTDataBuffer.cxx:220
 AliHLTDataBuffer.cxx:221
 AliHLTDataBuffer.cxx:222
 AliHLTDataBuffer.cxx:223
 AliHLTDataBuffer.cxx:224
 AliHLTDataBuffer.cxx:225
 AliHLTDataBuffer.cxx:226
 AliHLTDataBuffer.cxx:227
 AliHLTDataBuffer.cxx:228
 AliHLTDataBuffer.cxx:229
 AliHLTDataBuffer.cxx:230
 AliHLTDataBuffer.cxx:231
 AliHLTDataBuffer.cxx:232
 AliHLTDataBuffer.cxx:233
 AliHLTDataBuffer.cxx:234
 AliHLTDataBuffer.cxx:235
 AliHLTDataBuffer.cxx:236
 AliHLTDataBuffer.cxx:237
 AliHLTDataBuffer.cxx:238
 AliHLTDataBuffer.cxx:239
 AliHLTDataBuffer.cxx:240
 AliHLTDataBuffer.cxx:241
 AliHLTDataBuffer.cxx:242
 AliHLTDataBuffer.cxx:243
 AliHLTDataBuffer.cxx:244
 AliHLTDataBuffer.cxx:245
 AliHLTDataBuffer.cxx:246
 AliHLTDataBuffer.cxx:247
 AliHLTDataBuffer.cxx:248
 AliHLTDataBuffer.cxx:249
 AliHLTDataBuffer.cxx:250
 AliHLTDataBuffer.cxx:251
 AliHLTDataBuffer.cxx:252
 AliHLTDataBuffer.cxx:253
 AliHLTDataBuffer.cxx:254
 AliHLTDataBuffer.cxx:255
 AliHLTDataBuffer.cxx:256
 AliHLTDataBuffer.cxx:257
 AliHLTDataBuffer.cxx:258
 AliHLTDataBuffer.cxx:259
 AliHLTDataBuffer.cxx:260
 AliHLTDataBuffer.cxx:261
 AliHLTDataBuffer.cxx:262
 AliHLTDataBuffer.cxx:263
 AliHLTDataBuffer.cxx:264
 AliHLTDataBuffer.cxx:265
 AliHLTDataBuffer.cxx:266
 AliHLTDataBuffer.cxx:267
 AliHLTDataBuffer.cxx:268
 AliHLTDataBuffer.cxx:269
 AliHLTDataBuffer.cxx:270
 AliHLTDataBuffer.cxx:271
 AliHLTDataBuffer.cxx:272
 AliHLTDataBuffer.cxx:273
 AliHLTDataBuffer.cxx:274
 AliHLTDataBuffer.cxx:275
 AliHLTDataBuffer.cxx:276
 AliHLTDataBuffer.cxx:277
 AliHLTDataBuffer.cxx:278
 AliHLTDataBuffer.cxx:279
 AliHLTDataBuffer.cxx:280
 AliHLTDataBuffer.cxx:281
 AliHLTDataBuffer.cxx:282
 AliHLTDataBuffer.cxx:283
 AliHLTDataBuffer.cxx:284
 AliHLTDataBuffer.cxx:285
 AliHLTDataBuffer.cxx:286
 AliHLTDataBuffer.cxx:287
 AliHLTDataBuffer.cxx:288
 AliHLTDataBuffer.cxx:289
 AliHLTDataBuffer.cxx:290
 AliHLTDataBuffer.cxx:291
 AliHLTDataBuffer.cxx:292
 AliHLTDataBuffer.cxx:293
 AliHLTDataBuffer.cxx:294
 AliHLTDataBuffer.cxx:295
 AliHLTDataBuffer.cxx:296
 AliHLTDataBuffer.cxx:297
 AliHLTDataBuffer.cxx:298
 AliHLTDataBuffer.cxx:299
 AliHLTDataBuffer.cxx:300
 AliHLTDataBuffer.cxx:301
 AliHLTDataBuffer.cxx:302
 AliHLTDataBuffer.cxx:303
 AliHLTDataBuffer.cxx:304
 AliHLTDataBuffer.cxx:305
 AliHLTDataBuffer.cxx:306
 AliHLTDataBuffer.cxx:307
 AliHLTDataBuffer.cxx:308
 AliHLTDataBuffer.cxx:309
 AliHLTDataBuffer.cxx:310
 AliHLTDataBuffer.cxx:311
 AliHLTDataBuffer.cxx:312
 AliHLTDataBuffer.cxx:313
 AliHLTDataBuffer.cxx:314
 AliHLTDataBuffer.cxx:315
 AliHLTDataBuffer.cxx:316
 AliHLTDataBuffer.cxx:317
 AliHLTDataBuffer.cxx:318
 AliHLTDataBuffer.cxx:319
 AliHLTDataBuffer.cxx:320
 AliHLTDataBuffer.cxx:321
 AliHLTDataBuffer.cxx:322
 AliHLTDataBuffer.cxx:323
 AliHLTDataBuffer.cxx:324
 AliHLTDataBuffer.cxx:325
 AliHLTDataBuffer.cxx:326
 AliHLTDataBuffer.cxx:327
 AliHLTDataBuffer.cxx:328
 AliHLTDataBuffer.cxx:329
 AliHLTDataBuffer.cxx:330
 AliHLTDataBuffer.cxx:331
 AliHLTDataBuffer.cxx:332
 AliHLTDataBuffer.cxx:333
 AliHLTDataBuffer.cxx:334
 AliHLTDataBuffer.cxx:335
 AliHLTDataBuffer.cxx:336
 AliHLTDataBuffer.cxx:337
 AliHLTDataBuffer.cxx:338
 AliHLTDataBuffer.cxx:339
 AliHLTDataBuffer.cxx:340
 AliHLTDataBuffer.cxx:341
 AliHLTDataBuffer.cxx:342
 AliHLTDataBuffer.cxx:343
 AliHLTDataBuffer.cxx:344
 AliHLTDataBuffer.cxx:345
 AliHLTDataBuffer.cxx:346
 AliHLTDataBuffer.cxx:347
 AliHLTDataBuffer.cxx:348
 AliHLTDataBuffer.cxx:349
 AliHLTDataBuffer.cxx:350
 AliHLTDataBuffer.cxx:351
 AliHLTDataBuffer.cxx:352
 AliHLTDataBuffer.cxx:353
 AliHLTDataBuffer.cxx:354
 AliHLTDataBuffer.cxx:355
 AliHLTDataBuffer.cxx:356
 AliHLTDataBuffer.cxx:357
 AliHLTDataBuffer.cxx:358
 AliHLTDataBuffer.cxx:359
 AliHLTDataBuffer.cxx:360
 AliHLTDataBuffer.cxx:361
 AliHLTDataBuffer.cxx:362
 AliHLTDataBuffer.cxx:363
 AliHLTDataBuffer.cxx:364
 AliHLTDataBuffer.cxx:365
 AliHLTDataBuffer.cxx:366
 AliHLTDataBuffer.cxx:367
 AliHLTDataBuffer.cxx:368
 AliHLTDataBuffer.cxx:369
 AliHLTDataBuffer.cxx:370
 AliHLTDataBuffer.cxx:371
 AliHLTDataBuffer.cxx:372
 AliHLTDataBuffer.cxx:373
 AliHLTDataBuffer.cxx:374
 AliHLTDataBuffer.cxx:375
 AliHLTDataBuffer.cxx:376
 AliHLTDataBuffer.cxx:377
 AliHLTDataBuffer.cxx:378
 AliHLTDataBuffer.cxx:379
 AliHLTDataBuffer.cxx:380
 AliHLTDataBuffer.cxx:381
 AliHLTDataBuffer.cxx:382
 AliHLTDataBuffer.cxx:383
 AliHLTDataBuffer.cxx:384
 AliHLTDataBuffer.cxx:385
 AliHLTDataBuffer.cxx:386
 AliHLTDataBuffer.cxx:387
 AliHLTDataBuffer.cxx:388
 AliHLTDataBuffer.cxx:389
 AliHLTDataBuffer.cxx:390
 AliHLTDataBuffer.cxx:391
 AliHLTDataBuffer.cxx:392
 AliHLTDataBuffer.cxx:393
 AliHLTDataBuffer.cxx:394
 AliHLTDataBuffer.cxx:395
 AliHLTDataBuffer.cxx:396
 AliHLTDataBuffer.cxx:397
 AliHLTDataBuffer.cxx:398
 AliHLTDataBuffer.cxx:399
 AliHLTDataBuffer.cxx:400
 AliHLTDataBuffer.cxx:401
 AliHLTDataBuffer.cxx:402
 AliHLTDataBuffer.cxx:403
 AliHLTDataBuffer.cxx:404
 AliHLTDataBuffer.cxx:405
 AliHLTDataBuffer.cxx:406
 AliHLTDataBuffer.cxx:407
 AliHLTDataBuffer.cxx:408
 AliHLTDataBuffer.cxx:409
 AliHLTDataBuffer.cxx:410
 AliHLTDataBuffer.cxx:411
 AliHLTDataBuffer.cxx:412
 AliHLTDataBuffer.cxx:413
 AliHLTDataBuffer.cxx:414
 AliHLTDataBuffer.cxx:415
 AliHLTDataBuffer.cxx:416
 AliHLTDataBuffer.cxx:417
 AliHLTDataBuffer.cxx:418
 AliHLTDataBuffer.cxx:419
 AliHLTDataBuffer.cxx:420
 AliHLTDataBuffer.cxx:421
 AliHLTDataBuffer.cxx:422
 AliHLTDataBuffer.cxx:423
 AliHLTDataBuffer.cxx:424
 AliHLTDataBuffer.cxx:425
 AliHLTDataBuffer.cxx:426
 AliHLTDataBuffer.cxx:427
 AliHLTDataBuffer.cxx:428
 AliHLTDataBuffer.cxx:429
 AliHLTDataBuffer.cxx:430
 AliHLTDataBuffer.cxx:431
 AliHLTDataBuffer.cxx:432
 AliHLTDataBuffer.cxx:433
 AliHLTDataBuffer.cxx:434
 AliHLTDataBuffer.cxx:435
 AliHLTDataBuffer.cxx:436
 AliHLTDataBuffer.cxx:437
 AliHLTDataBuffer.cxx:438
 AliHLTDataBuffer.cxx:439
 AliHLTDataBuffer.cxx:440
 AliHLTDataBuffer.cxx:441
 AliHLTDataBuffer.cxx:442
 AliHLTDataBuffer.cxx:443
 AliHLTDataBuffer.cxx:444
 AliHLTDataBuffer.cxx:445
 AliHLTDataBuffer.cxx:446
 AliHLTDataBuffer.cxx:447
 AliHLTDataBuffer.cxx:448
 AliHLTDataBuffer.cxx:449
 AliHLTDataBuffer.cxx:450
 AliHLTDataBuffer.cxx:451
 AliHLTDataBuffer.cxx:452
 AliHLTDataBuffer.cxx:453
 AliHLTDataBuffer.cxx:454
 AliHLTDataBuffer.cxx:455
 AliHLTDataBuffer.cxx:456
 AliHLTDataBuffer.cxx:457
 AliHLTDataBuffer.cxx:458
 AliHLTDataBuffer.cxx:459
 AliHLTDataBuffer.cxx:460
 AliHLTDataBuffer.cxx:461
 AliHLTDataBuffer.cxx:462
 AliHLTDataBuffer.cxx:463
 AliHLTDataBuffer.cxx:464
 AliHLTDataBuffer.cxx:465
 AliHLTDataBuffer.cxx:466
 AliHLTDataBuffer.cxx:467
 AliHLTDataBuffer.cxx:468
 AliHLTDataBuffer.cxx:469
 AliHLTDataBuffer.cxx:470
 AliHLTDataBuffer.cxx:471
 AliHLTDataBuffer.cxx:472
 AliHLTDataBuffer.cxx:473
 AliHLTDataBuffer.cxx:474
 AliHLTDataBuffer.cxx:475
 AliHLTDataBuffer.cxx:476
 AliHLTDataBuffer.cxx:477
 AliHLTDataBuffer.cxx:478
 AliHLTDataBuffer.cxx:479
 AliHLTDataBuffer.cxx:480
 AliHLTDataBuffer.cxx:481
 AliHLTDataBuffer.cxx:482
 AliHLTDataBuffer.cxx:483
 AliHLTDataBuffer.cxx:484
 AliHLTDataBuffer.cxx:485
 AliHLTDataBuffer.cxx:486
 AliHLTDataBuffer.cxx:487
 AliHLTDataBuffer.cxx:488
 AliHLTDataBuffer.cxx:489
 AliHLTDataBuffer.cxx:490
 AliHLTDataBuffer.cxx:491
 AliHLTDataBuffer.cxx:492
 AliHLTDataBuffer.cxx:493
 AliHLTDataBuffer.cxx:494
 AliHLTDataBuffer.cxx:495
 AliHLTDataBuffer.cxx:496
 AliHLTDataBuffer.cxx:497
 AliHLTDataBuffer.cxx:498
 AliHLTDataBuffer.cxx:499
 AliHLTDataBuffer.cxx:500
 AliHLTDataBuffer.cxx:501
 AliHLTDataBuffer.cxx:502
 AliHLTDataBuffer.cxx:503
 AliHLTDataBuffer.cxx:504
 AliHLTDataBuffer.cxx:505
 AliHLTDataBuffer.cxx:506
 AliHLTDataBuffer.cxx:507
 AliHLTDataBuffer.cxx:508
 AliHLTDataBuffer.cxx:509
 AliHLTDataBuffer.cxx:510
 AliHLTDataBuffer.cxx:511
 AliHLTDataBuffer.cxx:512
 AliHLTDataBuffer.cxx:513
 AliHLTDataBuffer.cxx:514
 AliHLTDataBuffer.cxx:515
 AliHLTDataBuffer.cxx:516
 AliHLTDataBuffer.cxx:517
 AliHLTDataBuffer.cxx:518
 AliHLTDataBuffer.cxx:519
 AliHLTDataBuffer.cxx:520
 AliHLTDataBuffer.cxx:521
 AliHLTDataBuffer.cxx:522
 AliHLTDataBuffer.cxx:523
 AliHLTDataBuffer.cxx:524
 AliHLTDataBuffer.cxx:525
 AliHLTDataBuffer.cxx:526
 AliHLTDataBuffer.cxx:527
 AliHLTDataBuffer.cxx:528
 AliHLTDataBuffer.cxx:529
 AliHLTDataBuffer.cxx:530
 AliHLTDataBuffer.cxx:531
 AliHLTDataBuffer.cxx:532
 AliHLTDataBuffer.cxx:533
 AliHLTDataBuffer.cxx:534
 AliHLTDataBuffer.cxx:535
 AliHLTDataBuffer.cxx:536
 AliHLTDataBuffer.cxx:537
 AliHLTDataBuffer.cxx:538
 AliHLTDataBuffer.cxx:539
 AliHLTDataBuffer.cxx:540
 AliHLTDataBuffer.cxx:541
 AliHLTDataBuffer.cxx:542
 AliHLTDataBuffer.cxx:543
 AliHLTDataBuffer.cxx:544
 AliHLTDataBuffer.cxx:545
 AliHLTDataBuffer.cxx:546
 AliHLTDataBuffer.cxx:547
 AliHLTDataBuffer.cxx:548
 AliHLTDataBuffer.cxx:549
 AliHLTDataBuffer.cxx:550
 AliHLTDataBuffer.cxx:551
 AliHLTDataBuffer.cxx:552
 AliHLTDataBuffer.cxx:553
 AliHLTDataBuffer.cxx:554
 AliHLTDataBuffer.cxx:555
 AliHLTDataBuffer.cxx:556
 AliHLTDataBuffer.cxx:557
 AliHLTDataBuffer.cxx:558
 AliHLTDataBuffer.cxx:559
 AliHLTDataBuffer.cxx:560
 AliHLTDataBuffer.cxx:561
 AliHLTDataBuffer.cxx:562
 AliHLTDataBuffer.cxx:563
 AliHLTDataBuffer.cxx:564
 AliHLTDataBuffer.cxx:565
 AliHLTDataBuffer.cxx:566
 AliHLTDataBuffer.cxx:567
 AliHLTDataBuffer.cxx:568
 AliHLTDataBuffer.cxx:569
 AliHLTDataBuffer.cxx:570
 AliHLTDataBuffer.cxx:571
 AliHLTDataBuffer.cxx:572
 AliHLTDataBuffer.cxx:573
 AliHLTDataBuffer.cxx:574
 AliHLTDataBuffer.cxx:575
 AliHLTDataBuffer.cxx:576
 AliHLTDataBuffer.cxx:577
 AliHLTDataBuffer.cxx:578
 AliHLTDataBuffer.cxx:579
 AliHLTDataBuffer.cxx:580
 AliHLTDataBuffer.cxx:581
 AliHLTDataBuffer.cxx:582
 AliHLTDataBuffer.cxx:583
 AliHLTDataBuffer.cxx:584
 AliHLTDataBuffer.cxx:585
 AliHLTDataBuffer.cxx:586
 AliHLTDataBuffer.cxx:587
 AliHLTDataBuffer.cxx:588
 AliHLTDataBuffer.cxx:589
 AliHLTDataBuffer.cxx:590
 AliHLTDataBuffer.cxx:591
 AliHLTDataBuffer.cxx:592
 AliHLTDataBuffer.cxx:593
 AliHLTDataBuffer.cxx:594
 AliHLTDataBuffer.cxx:595
 AliHLTDataBuffer.cxx:596
 AliHLTDataBuffer.cxx:597
 AliHLTDataBuffer.cxx:598
 AliHLTDataBuffer.cxx:599
 AliHLTDataBuffer.cxx:600
 AliHLTDataBuffer.cxx:601
 AliHLTDataBuffer.cxx:602
 AliHLTDataBuffer.cxx:603
 AliHLTDataBuffer.cxx:604
 AliHLTDataBuffer.cxx:605
 AliHLTDataBuffer.cxx:606
 AliHLTDataBuffer.cxx:607
 AliHLTDataBuffer.cxx:608
 AliHLTDataBuffer.cxx:609
 AliHLTDataBuffer.cxx:610
 AliHLTDataBuffer.cxx:611
 AliHLTDataBuffer.cxx:612
 AliHLTDataBuffer.cxx:613
 AliHLTDataBuffer.cxx:614
 AliHLTDataBuffer.cxx:615
 AliHLTDataBuffer.cxx:616
 AliHLTDataBuffer.cxx:617
 AliHLTDataBuffer.cxx:618
 AliHLTDataBuffer.cxx:619
 AliHLTDataBuffer.cxx:620
 AliHLTDataBuffer.cxx:621
 AliHLTDataBuffer.cxx:622
 AliHLTDataBuffer.cxx:623
 AliHLTDataBuffer.cxx:624
 AliHLTDataBuffer.cxx:625
 AliHLTDataBuffer.cxx:626
 AliHLTDataBuffer.cxx:627
 AliHLTDataBuffer.cxx:628
 AliHLTDataBuffer.cxx:629
 AliHLTDataBuffer.cxx:630
 AliHLTDataBuffer.cxx:631
 AliHLTDataBuffer.cxx:632
 AliHLTDataBuffer.cxx:633
 AliHLTDataBuffer.cxx:634
 AliHLTDataBuffer.cxx:635
 AliHLTDataBuffer.cxx:636
 AliHLTDataBuffer.cxx:637
 AliHLTDataBuffer.cxx:638
 AliHLTDataBuffer.cxx:639
 AliHLTDataBuffer.cxx:640
 AliHLTDataBuffer.cxx:641
 AliHLTDataBuffer.cxx:642
 AliHLTDataBuffer.cxx:643
 AliHLTDataBuffer.cxx:644
 AliHLTDataBuffer.cxx:645
 AliHLTDataBuffer.cxx:646
 AliHLTDataBuffer.cxx:647
 AliHLTDataBuffer.cxx:648
 AliHLTDataBuffer.cxx:649
 AliHLTDataBuffer.cxx:650
 AliHLTDataBuffer.cxx:651
 AliHLTDataBuffer.cxx:652
 AliHLTDataBuffer.cxx:653
 AliHLTDataBuffer.cxx:654
 AliHLTDataBuffer.cxx:655
 AliHLTDataBuffer.cxx:656
 AliHLTDataBuffer.cxx:657
 AliHLTDataBuffer.cxx:658
 AliHLTDataBuffer.cxx:659
 AliHLTDataBuffer.cxx:660
 AliHLTDataBuffer.cxx:661
 AliHLTDataBuffer.cxx:662
 AliHLTDataBuffer.cxx:663
 AliHLTDataBuffer.cxx:664
 AliHLTDataBuffer.cxx:665
 AliHLTDataBuffer.cxx:666
 AliHLTDataBuffer.cxx:667
 AliHLTDataBuffer.cxx:668
 AliHLTDataBuffer.cxx:669
 AliHLTDataBuffer.cxx:670
 AliHLTDataBuffer.cxx:671
 AliHLTDataBuffer.cxx:672
 AliHLTDataBuffer.cxx:673
 AliHLTDataBuffer.cxx:674
 AliHLTDataBuffer.cxx:675
 AliHLTDataBuffer.cxx:676
 AliHLTDataBuffer.cxx:677
 AliHLTDataBuffer.cxx:678
 AliHLTDataBuffer.cxx:679
 AliHLTDataBuffer.cxx:680
 AliHLTDataBuffer.cxx:681
 AliHLTDataBuffer.cxx:682
 AliHLTDataBuffer.cxx:683
 AliHLTDataBuffer.cxx:684
 AliHLTDataBuffer.cxx:685
 AliHLTDataBuffer.cxx:686
 AliHLTDataBuffer.cxx:687
 AliHLTDataBuffer.cxx:688
 AliHLTDataBuffer.cxx:689
 AliHLTDataBuffer.cxx:690
 AliHLTDataBuffer.cxx:691
 AliHLTDataBuffer.cxx:692
 AliHLTDataBuffer.cxx:693
 AliHLTDataBuffer.cxx:694
 AliHLTDataBuffer.cxx:695
 AliHLTDataBuffer.cxx:696
 AliHLTDataBuffer.cxx:697
 AliHLTDataBuffer.cxx:698
 AliHLTDataBuffer.cxx:699
 AliHLTDataBuffer.cxx:700
 AliHLTDataBuffer.cxx:701
 AliHLTDataBuffer.cxx:702
 AliHLTDataBuffer.cxx:703
 AliHLTDataBuffer.cxx:704
 AliHLTDataBuffer.cxx:705
 AliHLTDataBuffer.cxx:706
 AliHLTDataBuffer.cxx:707
 AliHLTDataBuffer.cxx:708
 AliHLTDataBuffer.cxx:709
 AliHLTDataBuffer.cxx:710
 AliHLTDataBuffer.cxx:711
 AliHLTDataBuffer.cxx:712
 AliHLTDataBuffer.cxx:713
 AliHLTDataBuffer.cxx:714
 AliHLTDataBuffer.cxx:715
 AliHLTDataBuffer.cxx:716
 AliHLTDataBuffer.cxx:717
 AliHLTDataBuffer.cxx:718
 AliHLTDataBuffer.cxx:719
 AliHLTDataBuffer.cxx:720
 AliHLTDataBuffer.cxx:721
 AliHLTDataBuffer.cxx:722
 AliHLTDataBuffer.cxx:723
 AliHLTDataBuffer.cxx:724
 AliHLTDataBuffer.cxx:725
 AliHLTDataBuffer.cxx:726
 AliHLTDataBuffer.cxx:727
 AliHLTDataBuffer.cxx:728
 AliHLTDataBuffer.cxx:729
 AliHLTDataBuffer.cxx:730
 AliHLTDataBuffer.cxx:731
 AliHLTDataBuffer.cxx:732
 AliHLTDataBuffer.cxx:733
 AliHLTDataBuffer.cxx:734
 AliHLTDataBuffer.cxx:735
 AliHLTDataBuffer.cxx:736
 AliHLTDataBuffer.cxx:737
 AliHLTDataBuffer.cxx:738
 AliHLTDataBuffer.cxx:739
 AliHLTDataBuffer.cxx:740
 AliHLTDataBuffer.cxx:741
 AliHLTDataBuffer.cxx:742
 AliHLTDataBuffer.cxx:743
 AliHLTDataBuffer.cxx:744
 AliHLTDataBuffer.cxx:745
 AliHLTDataBuffer.cxx:746
 AliHLTDataBuffer.cxx:747
 AliHLTDataBuffer.cxx:748
 AliHLTDataBuffer.cxx:749
 AliHLTDataBuffer.cxx:750
 AliHLTDataBuffer.cxx:751
 AliHLTDataBuffer.cxx:752
 AliHLTDataBuffer.cxx:753
 AliHLTDataBuffer.cxx:754
 AliHLTDataBuffer.cxx:755
 AliHLTDataBuffer.cxx:756
 AliHLTDataBuffer.cxx:757
 AliHLTDataBuffer.cxx:758
 AliHLTDataBuffer.cxx:759
 AliHLTDataBuffer.cxx:760
 AliHLTDataBuffer.cxx:761
 AliHLTDataBuffer.cxx:762
 AliHLTDataBuffer.cxx:763
 AliHLTDataBuffer.cxx:764
 AliHLTDataBuffer.cxx:765
 AliHLTDataBuffer.cxx:766
 AliHLTDataBuffer.cxx:767
 AliHLTDataBuffer.cxx:768
 AliHLTDataBuffer.cxx:769
 AliHLTDataBuffer.cxx:770
 AliHLTDataBuffer.cxx:771
 AliHLTDataBuffer.cxx:772
 AliHLTDataBuffer.cxx:773
 AliHLTDataBuffer.cxx:774
 AliHLTDataBuffer.cxx:775
 AliHLTDataBuffer.cxx:776
 AliHLTDataBuffer.cxx:777
 AliHLTDataBuffer.cxx:778
 AliHLTDataBuffer.cxx:779
 AliHLTDataBuffer.cxx:780
 AliHLTDataBuffer.cxx:781
 AliHLTDataBuffer.cxx:782
 AliHLTDataBuffer.cxx:783
 AliHLTDataBuffer.cxx:784
 AliHLTDataBuffer.cxx:785
 AliHLTDataBuffer.cxx:786
 AliHLTDataBuffer.cxx:787
 AliHLTDataBuffer.cxx:788
 AliHLTDataBuffer.cxx:789
 AliHLTDataBuffer.cxx:790
 AliHLTDataBuffer.cxx:791
 AliHLTDataBuffer.cxx:792
 AliHLTDataBuffer.cxx:793
 AliHLTDataBuffer.cxx:794
 AliHLTDataBuffer.cxx:795
 AliHLTDataBuffer.cxx:796
 AliHLTDataBuffer.cxx:797
 AliHLTDataBuffer.cxx:798
 AliHLTDataBuffer.cxx:799
 AliHLTDataBuffer.cxx:800
 AliHLTDataBuffer.cxx:801
 AliHLTDataBuffer.cxx:802
 AliHLTDataBuffer.cxx:803
 AliHLTDataBuffer.cxx:804
 AliHLTDataBuffer.cxx:805
 AliHLTDataBuffer.cxx:806
 AliHLTDataBuffer.cxx:807
 AliHLTDataBuffer.cxx:808
 AliHLTDataBuffer.cxx:809
 AliHLTDataBuffer.cxx:810
 AliHLTDataBuffer.cxx:811
 AliHLTDataBuffer.cxx:812
 AliHLTDataBuffer.cxx:813
 AliHLTDataBuffer.cxx:814
 AliHLTDataBuffer.cxx:815
 AliHLTDataBuffer.cxx:816
 AliHLTDataBuffer.cxx:817
 AliHLTDataBuffer.cxx:818
 AliHLTDataBuffer.cxx:819
 AliHLTDataBuffer.cxx:820
 AliHLTDataBuffer.cxx:821
 AliHLTDataBuffer.cxx:822
 AliHLTDataBuffer.cxx:823
 AliHLTDataBuffer.cxx:824
 AliHLTDataBuffer.cxx:825
 AliHLTDataBuffer.cxx:826
 AliHLTDataBuffer.cxx:827
 AliHLTDataBuffer.cxx:828
 AliHLTDataBuffer.cxx:829
 AliHLTDataBuffer.cxx:830
 AliHLTDataBuffer.cxx:831
 AliHLTDataBuffer.cxx:832
 AliHLTDataBuffer.cxx:833
 AliHLTDataBuffer.cxx:834
 AliHLTDataBuffer.cxx:835
 AliHLTDataBuffer.cxx:836
 AliHLTDataBuffer.cxx:837
 AliHLTDataBuffer.cxx:838
 AliHLTDataBuffer.cxx:839
 AliHLTDataBuffer.cxx:840
 AliHLTDataBuffer.cxx:841
 AliHLTDataBuffer.cxx:842
 AliHLTDataBuffer.cxx:843
 AliHLTDataBuffer.cxx:844
 AliHLTDataBuffer.cxx:845
 AliHLTDataBuffer.cxx:846
 AliHLTDataBuffer.cxx:847
 AliHLTDataBuffer.cxx:848
 AliHLTDataBuffer.cxx:849
 AliHLTDataBuffer.cxx:850
 AliHLTDataBuffer.cxx:851
 AliHLTDataBuffer.cxx:852
 AliHLTDataBuffer.cxx:853
 AliHLTDataBuffer.cxx:854
 AliHLTDataBuffer.cxx:855
 AliHLTDataBuffer.cxx:856
 AliHLTDataBuffer.cxx:857
 AliHLTDataBuffer.cxx:858
 AliHLTDataBuffer.cxx:859
 AliHLTDataBuffer.cxx:860
 AliHLTDataBuffer.cxx:861
 AliHLTDataBuffer.cxx:862
 AliHLTDataBuffer.cxx:863
 AliHLTDataBuffer.cxx:864
 AliHLTDataBuffer.cxx:865
 AliHLTDataBuffer.cxx:866
 AliHLTDataBuffer.cxx:867
 AliHLTDataBuffer.cxx:868
 AliHLTDataBuffer.cxx:869
 AliHLTDataBuffer.cxx:870
 AliHLTDataBuffer.cxx:871
 AliHLTDataBuffer.cxx:872
 AliHLTDataBuffer.cxx:873
 AliHLTDataBuffer.cxx:874
 AliHLTDataBuffer.cxx:875
 AliHLTDataBuffer.cxx:876
 AliHLTDataBuffer.cxx:877
 AliHLTDataBuffer.cxx:878
 AliHLTDataBuffer.cxx:879
 AliHLTDataBuffer.cxx:880
 AliHLTDataBuffer.cxx:881
 AliHLTDataBuffer.cxx:882
 AliHLTDataBuffer.cxx:883
 AliHLTDataBuffer.cxx:884
 AliHLTDataBuffer.cxx:885
 AliHLTDataBuffer.cxx:886
 AliHLTDataBuffer.cxx:887
 AliHLTDataBuffer.cxx:888
 AliHLTDataBuffer.cxx:889
 AliHLTDataBuffer.cxx:890
 AliHLTDataBuffer.cxx:891
 AliHLTDataBuffer.cxx:892
 AliHLTDataBuffer.cxx:893
 AliHLTDataBuffer.cxx:894
 AliHLTDataBuffer.cxx:895
 AliHLTDataBuffer.cxx:896
 AliHLTDataBuffer.cxx:897
 AliHLTDataBuffer.cxx:898
 AliHLTDataBuffer.cxx:899
 AliHLTDataBuffer.cxx:900
 AliHLTDataBuffer.cxx:901
 AliHLTDataBuffer.cxx:902
 AliHLTDataBuffer.cxx:903
 AliHLTDataBuffer.cxx:904
 AliHLTDataBuffer.cxx:905
 AliHLTDataBuffer.cxx:906
 AliHLTDataBuffer.cxx:907
 AliHLTDataBuffer.cxx:908
 AliHLTDataBuffer.cxx:909
 AliHLTDataBuffer.cxx:910
 AliHLTDataBuffer.cxx:911
 AliHLTDataBuffer.cxx:912
 AliHLTDataBuffer.cxx:913
 AliHLTDataBuffer.cxx:914
 AliHLTDataBuffer.cxx:915
 AliHLTDataBuffer.cxx:916
 AliHLTDataBuffer.cxx:917
 AliHLTDataBuffer.cxx:918
 AliHLTDataBuffer.cxx:919
 AliHLTDataBuffer.cxx:920
 AliHLTDataBuffer.cxx:921
 AliHLTDataBuffer.cxx:922
 AliHLTDataBuffer.cxx:923
 AliHLTDataBuffer.cxx:924
 AliHLTDataBuffer.cxx:925
 AliHLTDataBuffer.cxx:926
 AliHLTDataBuffer.cxx:927
 AliHLTDataBuffer.cxx:928
 AliHLTDataBuffer.cxx:929
 AliHLTDataBuffer.cxx:930
 AliHLTDataBuffer.cxx:931
 AliHLTDataBuffer.cxx:932
 AliHLTDataBuffer.cxx:933
 AliHLTDataBuffer.cxx:934
 AliHLTDataBuffer.cxx:935
 AliHLTDataBuffer.cxx:936
 AliHLTDataBuffer.cxx:937
 AliHLTDataBuffer.cxx:938
 AliHLTDataBuffer.cxx:939
 AliHLTDataBuffer.cxx:940
 AliHLTDataBuffer.cxx:941
 AliHLTDataBuffer.cxx:942
 AliHLTDataBuffer.cxx:943
 AliHLTDataBuffer.cxx:944
 AliHLTDataBuffer.cxx:945
 AliHLTDataBuffer.cxx:946
 AliHLTDataBuffer.cxx:947
 AliHLTDataBuffer.cxx:948
 AliHLTDataBuffer.cxx:949
 AliHLTDataBuffer.cxx:950
 AliHLTDataBuffer.cxx:951
 AliHLTDataBuffer.cxx:952
 AliHLTDataBuffer.cxx:953
 AliHLTDataBuffer.cxx:954
 AliHLTDataBuffer.cxx:955
 AliHLTDataBuffer.cxx:956
 AliHLTDataBuffer.cxx:957
 AliHLTDataBuffer.cxx:958
 AliHLTDataBuffer.cxx:959
 AliHLTDataBuffer.cxx:960
 AliHLTDataBuffer.cxx:961
 AliHLTDataBuffer.cxx:962
 AliHLTDataBuffer.cxx:963
 AliHLTDataBuffer.cxx:964
 AliHLTDataBuffer.cxx:965
 AliHLTDataBuffer.cxx:966
 AliHLTDataBuffer.cxx:967
 AliHLTDataBuffer.cxx:968
 AliHLTDataBuffer.cxx:969
 AliHLTDataBuffer.cxx:970
 AliHLTDataBuffer.cxx:971
 AliHLTDataBuffer.cxx:972
 AliHLTDataBuffer.cxx:973
 AliHLTDataBuffer.cxx:974
 AliHLTDataBuffer.cxx:975
 AliHLTDataBuffer.cxx:976
 AliHLTDataBuffer.cxx:977
 AliHLTDataBuffer.cxx:978
 AliHLTDataBuffer.cxx:979
 AliHLTDataBuffer.cxx:980
 AliHLTDataBuffer.cxx:981
 AliHLTDataBuffer.cxx:982
 AliHLTDataBuffer.cxx:983
 AliHLTDataBuffer.cxx:984
 AliHLTDataBuffer.cxx:985
 AliHLTDataBuffer.cxx:986
 AliHLTDataBuffer.cxx:987
 AliHLTDataBuffer.cxx:988
 AliHLTDataBuffer.cxx:989
 AliHLTDataBuffer.cxx:990
 AliHLTDataBuffer.cxx:991
 AliHLTDataBuffer.cxx:992
 AliHLTDataBuffer.cxx:993
 AliHLTDataBuffer.cxx:994
 AliHLTDataBuffer.cxx:995
 AliHLTDataBuffer.cxx:996
 AliHLTDataBuffer.cxx:997
 AliHLTDataBuffer.cxx:998
 AliHLTDataBuffer.cxx:999
 AliHLTDataBuffer.cxx:1000
 AliHLTDataBuffer.cxx:1001
 AliHLTDataBuffer.cxx:1002
 AliHLTDataBuffer.cxx:1003
 AliHLTDataBuffer.cxx:1004
 AliHLTDataBuffer.cxx:1005
 AliHLTDataBuffer.cxx:1006
 AliHLTDataBuffer.cxx:1007
 AliHLTDataBuffer.cxx:1008
 AliHLTDataBuffer.cxx:1009
 AliHLTDataBuffer.cxx:1010
 AliHLTDataBuffer.cxx:1011
 AliHLTDataBuffer.cxx:1012
 AliHLTDataBuffer.cxx:1013
 AliHLTDataBuffer.cxx:1014
 AliHLTDataBuffer.cxx:1015
 AliHLTDataBuffer.cxx:1016
 AliHLTDataBuffer.cxx:1017
 AliHLTDataBuffer.cxx:1018
 AliHLTDataBuffer.cxx:1019
 AliHLTDataBuffer.cxx:1020
 AliHLTDataBuffer.cxx:1021
 AliHLTDataBuffer.cxx:1022
 AliHLTDataBuffer.cxx:1023
 AliHLTDataBuffer.cxx:1024
 AliHLTDataBuffer.cxx:1025
 AliHLTDataBuffer.cxx:1026
 AliHLTDataBuffer.cxx:1027
 AliHLTDataBuffer.cxx:1028
 AliHLTDataBuffer.cxx:1029
 AliHLTDataBuffer.cxx:1030
 AliHLTDataBuffer.cxx:1031
 AliHLTDataBuffer.cxx:1032
 AliHLTDataBuffer.cxx:1033
 AliHLTDataBuffer.cxx:1034
 AliHLTDataBuffer.cxx:1035
 AliHLTDataBuffer.cxx:1036
 AliHLTDataBuffer.cxx:1037
 AliHLTDataBuffer.cxx:1038
 AliHLTDataBuffer.cxx:1039
 AliHLTDataBuffer.cxx:1040
 AliHLTDataBuffer.cxx:1041
 AliHLTDataBuffer.cxx:1042
 AliHLTDataBuffer.cxx:1043
 AliHLTDataBuffer.cxx:1044
 AliHLTDataBuffer.cxx:1045
 AliHLTDataBuffer.cxx:1046
 AliHLTDataBuffer.cxx:1047
 AliHLTDataBuffer.cxx:1048
 AliHLTDataBuffer.cxx:1049
 AliHLTDataBuffer.cxx:1050
 AliHLTDataBuffer.cxx:1051
 AliHLTDataBuffer.cxx:1052
 AliHLTDataBuffer.cxx:1053
 AliHLTDataBuffer.cxx:1054
 AliHLTDataBuffer.cxx:1055
 AliHLTDataBuffer.cxx:1056
 AliHLTDataBuffer.cxx:1057
 AliHLTDataBuffer.cxx:1058
 AliHLTDataBuffer.cxx:1059
 AliHLTDataBuffer.cxx:1060
 AliHLTDataBuffer.cxx:1061
 AliHLTDataBuffer.cxx:1062
 AliHLTDataBuffer.cxx:1063
 AliHLTDataBuffer.cxx:1064
 AliHLTDataBuffer.cxx:1065
 AliHLTDataBuffer.cxx:1066
 AliHLTDataBuffer.cxx:1067
 AliHLTDataBuffer.cxx:1068
 AliHLTDataBuffer.cxx:1069
 AliHLTDataBuffer.cxx:1070
 AliHLTDataBuffer.cxx:1071
 AliHLTDataBuffer.cxx:1072
 AliHLTDataBuffer.cxx:1073
 AliHLTDataBuffer.cxx:1074
 AliHLTDataBuffer.cxx:1075
 AliHLTDataBuffer.cxx:1076
 AliHLTDataBuffer.cxx:1077
 AliHLTDataBuffer.cxx:1078
 AliHLTDataBuffer.cxx:1079
 AliHLTDataBuffer.cxx:1080
 AliHLTDataBuffer.cxx:1081
 AliHLTDataBuffer.cxx:1082
 AliHLTDataBuffer.cxx:1083
 AliHLTDataBuffer.cxx:1084
 AliHLTDataBuffer.cxx:1085
 AliHLTDataBuffer.cxx:1086
 AliHLTDataBuffer.cxx:1087
 AliHLTDataBuffer.cxx:1088
 AliHLTDataBuffer.cxx:1089
 AliHLTDataBuffer.cxx:1090
 AliHLTDataBuffer.cxx:1091
 AliHLTDataBuffer.cxx:1092
 AliHLTDataBuffer.cxx:1093
 AliHLTDataBuffer.cxx:1094
 AliHLTDataBuffer.cxx:1095
 AliHLTDataBuffer.cxx:1096
 AliHLTDataBuffer.cxx:1097
 AliHLTDataBuffer.cxx:1098
 AliHLTDataBuffer.cxx:1099
 AliHLTDataBuffer.cxx:1100
 AliHLTDataBuffer.cxx:1101
 AliHLTDataBuffer.cxx:1102
 AliHLTDataBuffer.cxx:1103
 AliHLTDataBuffer.cxx:1104
 AliHLTDataBuffer.cxx:1105
 AliHLTDataBuffer.cxx:1106
 AliHLTDataBuffer.cxx:1107
 AliHLTDataBuffer.cxx:1108
 AliHLTDataBuffer.cxx:1109
 AliHLTDataBuffer.cxx:1110
 AliHLTDataBuffer.cxx:1111
 AliHLTDataBuffer.cxx:1112
 AliHLTDataBuffer.cxx:1113
 AliHLTDataBuffer.cxx:1114
 AliHLTDataBuffer.cxx:1115
 AliHLTDataBuffer.cxx:1116
 AliHLTDataBuffer.cxx:1117
 AliHLTDataBuffer.cxx:1118
 AliHLTDataBuffer.cxx:1119
 AliHLTDataBuffer.cxx:1120
 AliHLTDataBuffer.cxx:1121
 AliHLTDataBuffer.cxx:1122
 AliHLTDataBuffer.cxx:1123
 AliHLTDataBuffer.cxx:1124
 AliHLTDataBuffer.cxx:1125
 AliHLTDataBuffer.cxx:1126
 AliHLTDataBuffer.cxx:1127
 AliHLTDataBuffer.cxx:1128
 AliHLTDataBuffer.cxx:1129
 AliHLTDataBuffer.cxx:1130
 AliHLTDataBuffer.cxx:1131
 AliHLTDataBuffer.cxx:1132
 AliHLTDataBuffer.cxx:1133
 AliHLTDataBuffer.cxx:1134
 AliHLTDataBuffer.cxx:1135
 AliHLTDataBuffer.cxx:1136
 AliHLTDataBuffer.cxx:1137
 AliHLTDataBuffer.cxx:1138
 AliHLTDataBuffer.cxx:1139
 AliHLTDataBuffer.cxx:1140
 AliHLTDataBuffer.cxx:1141
 AliHLTDataBuffer.cxx:1142
 AliHLTDataBuffer.cxx:1143
 AliHLTDataBuffer.cxx:1144
 AliHLTDataBuffer.cxx:1145
 AliHLTDataBuffer.cxx:1146
 AliHLTDataBuffer.cxx:1147
 AliHLTDataBuffer.cxx:1148
 AliHLTDataBuffer.cxx:1149
 AliHLTDataBuffer.cxx:1150
 AliHLTDataBuffer.cxx:1151
 AliHLTDataBuffer.cxx:1152
 AliHLTDataBuffer.cxx:1153
 AliHLTDataBuffer.cxx:1154
 AliHLTDataBuffer.cxx:1155
 AliHLTDataBuffer.cxx:1156
 AliHLTDataBuffer.cxx:1157
 AliHLTDataBuffer.cxx:1158
 AliHLTDataBuffer.cxx:1159
 AliHLTDataBuffer.cxx:1160
 AliHLTDataBuffer.cxx:1161
 AliHLTDataBuffer.cxx:1162
 AliHLTDataBuffer.cxx:1163
 AliHLTDataBuffer.cxx:1164
 AliHLTDataBuffer.cxx:1165
 AliHLTDataBuffer.cxx:1166
 AliHLTDataBuffer.cxx:1167
 AliHLTDataBuffer.cxx:1168
 AliHLTDataBuffer.cxx:1169
 AliHLTDataBuffer.cxx:1170
 AliHLTDataBuffer.cxx:1171
 AliHLTDataBuffer.cxx:1172
 AliHLTDataBuffer.cxx:1173
 AliHLTDataBuffer.cxx:1174
 AliHLTDataBuffer.cxx:1175
 AliHLTDataBuffer.cxx:1176
 AliHLTDataBuffer.cxx:1177
 AliHLTDataBuffer.cxx:1178
 AliHLTDataBuffer.cxx:1179
 AliHLTDataBuffer.cxx:1180
 AliHLTDataBuffer.cxx:1181
 AliHLTDataBuffer.cxx:1182
 AliHLTDataBuffer.cxx:1183
 AliHLTDataBuffer.cxx:1184
 AliHLTDataBuffer.cxx:1185
 AliHLTDataBuffer.cxx:1186
 AliHLTDataBuffer.cxx:1187
 AliHLTDataBuffer.cxx:1188
 AliHLTDataBuffer.cxx:1189
 AliHLTDataBuffer.cxx:1190
 AliHLTDataBuffer.cxx:1191
 AliHLTDataBuffer.cxx:1192
 AliHLTDataBuffer.cxx:1193
 AliHLTDataBuffer.cxx:1194
 AliHLTDataBuffer.cxx:1195
 AliHLTDataBuffer.cxx:1196
 AliHLTDataBuffer.cxx:1197
 AliHLTDataBuffer.cxx:1198
 AliHLTDataBuffer.cxx:1199
 AliHLTDataBuffer.cxx:1200
 AliHLTDataBuffer.cxx:1201
 AliHLTDataBuffer.cxx:1202
 AliHLTDataBuffer.cxx:1203
 AliHLTDataBuffer.cxx:1204
 AliHLTDataBuffer.cxx:1205
 AliHLTDataBuffer.cxx:1206
 AliHLTDataBuffer.cxx:1207
 AliHLTDataBuffer.cxx:1208
 AliHLTDataBuffer.cxx:1209
 AliHLTDataBuffer.cxx:1210
 AliHLTDataBuffer.cxx:1211
 AliHLTDataBuffer.cxx:1212
 AliHLTDataBuffer.cxx:1213
 AliHLTDataBuffer.cxx:1214
 AliHLTDataBuffer.cxx:1215
 AliHLTDataBuffer.cxx:1216
 AliHLTDataBuffer.cxx:1217
 AliHLTDataBuffer.cxx:1218
 AliHLTDataBuffer.cxx:1219
 AliHLTDataBuffer.cxx:1220
 AliHLTDataBuffer.cxx:1221
 AliHLTDataBuffer.cxx:1222
 AliHLTDataBuffer.cxx:1223
 AliHLTDataBuffer.cxx:1224
 AliHLTDataBuffer.cxx:1225
 AliHLTDataBuffer.cxx:1226
 AliHLTDataBuffer.cxx:1227
 AliHLTDataBuffer.cxx:1228
 AliHLTDataBuffer.cxx:1229
 AliHLTDataBuffer.cxx:1230
 AliHLTDataBuffer.cxx:1231
 AliHLTDataBuffer.cxx:1232
 AliHLTDataBuffer.cxx:1233
 AliHLTDataBuffer.cxx:1234
 AliHLTDataBuffer.cxx:1235
 AliHLTDataBuffer.cxx:1236
 AliHLTDataBuffer.cxx:1237
 AliHLTDataBuffer.cxx:1238
 AliHLTDataBuffer.cxx:1239
 AliHLTDataBuffer.cxx:1240
 AliHLTDataBuffer.cxx:1241
 AliHLTDataBuffer.cxx:1242
 AliHLTDataBuffer.cxx:1243
 AliHLTDataBuffer.cxx:1244
 AliHLTDataBuffer.cxx:1245
 AliHLTDataBuffer.cxx:1246
 AliHLTDataBuffer.cxx:1247
 AliHLTDataBuffer.cxx:1248
 AliHLTDataBuffer.cxx:1249
 AliHLTDataBuffer.cxx:1250
 AliHLTDataBuffer.cxx:1251
 AliHLTDataBuffer.cxx:1252
 AliHLTDataBuffer.cxx:1253
 AliHLTDataBuffer.cxx:1254
 AliHLTDataBuffer.cxx:1255
 AliHLTDataBuffer.cxx:1256
 AliHLTDataBuffer.cxx:1257
 AliHLTDataBuffer.cxx:1258
 AliHLTDataBuffer.cxx:1259
 AliHLTDataBuffer.cxx:1260
 AliHLTDataBuffer.cxx:1261
 AliHLTDataBuffer.cxx:1262
 AliHLTDataBuffer.cxx:1263
 AliHLTDataBuffer.cxx:1264
 AliHLTDataBuffer.cxx:1265
 AliHLTDataBuffer.cxx:1266
 AliHLTDataBuffer.cxx:1267
 AliHLTDataBuffer.cxx:1268
 AliHLTDataBuffer.cxx:1269
 AliHLTDataBuffer.cxx:1270
 AliHLTDataBuffer.cxx:1271
 AliHLTDataBuffer.cxx:1272
 AliHLTDataBuffer.cxx:1273
 AliHLTDataBuffer.cxx:1274
 AliHLTDataBuffer.cxx:1275
 AliHLTDataBuffer.cxx:1276
 AliHLTDataBuffer.cxx:1277
 AliHLTDataBuffer.cxx:1278
 AliHLTDataBuffer.cxx:1279
 AliHLTDataBuffer.cxx:1280
 AliHLTDataBuffer.cxx:1281
 AliHLTDataBuffer.cxx:1282
 AliHLTDataBuffer.cxx:1283
 AliHLTDataBuffer.cxx:1284
 AliHLTDataBuffer.cxx:1285
 AliHLTDataBuffer.cxx:1286
 AliHLTDataBuffer.cxx:1287
 AliHLTDataBuffer.cxx:1288
 AliHLTDataBuffer.cxx:1289
 AliHLTDataBuffer.cxx:1290
 AliHLTDataBuffer.cxx:1291
 AliHLTDataBuffer.cxx:1292
 AliHLTDataBuffer.cxx:1293
 AliHLTDataBuffer.cxx:1294
 AliHLTDataBuffer.cxx:1295
 AliHLTDataBuffer.cxx:1296
 AliHLTDataBuffer.cxx:1297
 AliHLTDataBuffer.cxx:1298
 AliHLTDataBuffer.cxx:1299
 AliHLTDataBuffer.cxx:1300
 AliHLTDataBuffer.cxx:1301
 AliHLTDataBuffer.cxx:1302
 AliHLTDataBuffer.cxx:1303
 AliHLTDataBuffer.cxx:1304
 AliHLTDataBuffer.cxx:1305
 AliHLTDataBuffer.cxx:1306
 AliHLTDataBuffer.cxx:1307
 AliHLTDataBuffer.cxx:1308
 AliHLTDataBuffer.cxx:1309
 AliHLTDataBuffer.cxx:1310
 AliHLTDataBuffer.cxx:1311
 AliHLTDataBuffer.cxx:1312
 AliHLTDataBuffer.cxx:1313
 AliHLTDataBuffer.cxx:1314
 AliHLTDataBuffer.cxx:1315
 AliHLTDataBuffer.cxx:1316
 AliHLTDataBuffer.cxx:1317
 AliHLTDataBuffer.cxx:1318
 AliHLTDataBuffer.cxx:1319
 AliHLTDataBuffer.cxx:1320
 AliHLTDataBuffer.cxx:1321
 AliHLTDataBuffer.cxx:1322
 AliHLTDataBuffer.cxx:1323
 AliHLTDataBuffer.cxx:1324
 AliHLTDataBuffer.cxx:1325
 AliHLTDataBuffer.cxx:1326
 AliHLTDataBuffer.cxx:1327
 AliHLTDataBuffer.cxx:1328
 AliHLTDataBuffer.cxx:1329
 AliHLTDataBuffer.cxx:1330
 AliHLTDataBuffer.cxx:1331
 AliHLTDataBuffer.cxx:1332
 AliHLTDataBuffer.cxx:1333
 AliHLTDataBuffer.cxx:1334
 AliHLTDataBuffer.cxx:1335
 AliHLTDataBuffer.cxx:1336