#include "AliHLTControlTask.h"
#include "AliHLTComponentHandler.h"
#include <cassert>
ClassImp(AliHLTControlTask)
AliHLTControlTask::AliHLTControlTask()
: AliHLTTask()
, fBlocks()
, fpData(NULL)
, fSize(0)
{
}
AliHLTControlTask::~AliHLTControlTask()
{
ResetBlocks();
}
int AliHLTControlTask::CreateComponent(AliHLTConfiguration* , AliHLTComponentHandler* pCH, AliHLTComponent*& pComponent) const
{
int iResult=0;
if ((pComponent=new AliHLTControlEventComponent(this))) {
const AliHLTAnalysisEnvironment* pEnv=pCH->GetEnvironment();
const char* argv[]={
"-disable-component-stat"
};
int argc=sizeof(argv)/sizeof(const char*);
if ((iResult=pComponent->Init(pEnv, NULL, argc, argv))>=0) {
} else {
HLTError("Initialization of component \"%s\" failed with error %d", pComponent->GetComponentID(), iResult);
}
return iResult;
}
return -ENOMEM;
}
void AliHLTControlTask::SetBlocks(const AliHLTComponentBlockDataList& list)
{
fBlocks.assign(list.begin(), list.end());
AliHLTComponentBlockDataList::iterator element=fBlocks.begin();
for (;element!=fBlocks.end(); element++) fSize+=element->fSize;
fpData=new AliHLTUInt8_t[fSize];
AliHLTUInt8_t offset=0;
for (element=fBlocks.begin();element!=fBlocks.end(); element++) {
memcpy(fpData+offset, element->fPtr, element->fSize);
element->fPtr=fpData+offset;
offset+=element->fSize;
}
}
void AliHLTControlTask::ResetBlocks()
{
fBlocks.clear();
if (fpData) delete [] fpData;
fpData=NULL;
fSize=0;
}
AliHLTControlTask::AliHLTControlEventComponent::AliHLTControlEventComponent(const AliHLTControlTask* pParent)
:
fpParent(pParent)
{
assert(pParent);
}
AliHLTControlTask::AliHLTControlEventComponent::~AliHLTControlEventComponent()
{
}
AliHLTComponentDataType AliHLTControlTask::AliHLTControlEventComponent::GetOutputDataType()
{
return kAliHLTMultipleDataType;
}
int AliHLTControlTask::AliHLTControlEventComponent::GetOutputDataTypes(AliHLTComponentDataTypeList& tgtList)
{
tgtList.clear();
tgtList.push_back(kAliHLTDataTypeSOR);
tgtList.push_back(kAliHLTDataTypeEOR);
return tgtList.size();
}
void AliHLTControlTask::AliHLTControlEventComponent::GetOutputDataSize( unsigned long& constBase, double& inputMultiplier )
{
if (fpParent && fpParent->fSize>0) constBase=fpParent->fSize;
else constBase=0;
inputMultiplier=0;
}
int AliHLTControlTask::AliHLTControlEventComponent::GetEvent(const AliHLTComponentEventData& ,
AliHLTComponentTriggerData& ,
AliHLTUInt8_t* outputPtr,
AliHLTUInt32_t& size,
vector<AliHLTComponentBlockData>& outputBlocks )
{
if (!fpParent) return -ENODEV;
const AliHLTControlTask* pParent=fpParent;
AliHLTUInt32_t capacity=size;
size=0;
if (capacity<pParent->fSize) {
return -ENOSPC;
}
if (pParent->fpData==NULL ||
pParent->fBlocks.size()==0) {
return 0;
}
for (unsigned int i=0; i<pParent->fBlocks.size(); i++) {
HLTDebug("publishing control block %s", DataType2Text(pParent->fBlocks[i].fDataType).c_str());
memcpy(outputPtr+size, pParent->fBlocks[i].fPtr, pParent->fBlocks[i].fSize);
AliHLTComponentBlockData bd;
FillBlockData(bd);
bd.fOffset=size;
bd.fSize=pParent->fBlocks[i].fSize;
bd.fDataType=pParent->fBlocks[i].fDataType;
bd.fSpecification=pParent->fBlocks[i].fSpecification;
outputBlocks.push_back( bd );
size+=bd.fSize;
}
return size;
}
AliHLTControlTask.cxx:100 AliHLTControlTask.cxx:101 AliHLTControlTask.cxx:102 AliHLTControlTask.cxx:103 AliHLTControlTask.cxx:104 AliHLTControlTask.cxx:105 AliHLTControlTask.cxx:106 AliHLTControlTask.cxx:107 AliHLTControlTask.cxx:108 AliHLTControlTask.cxx:109 AliHLTControlTask.cxx:110 AliHLTControlTask.cxx:111 AliHLTControlTask.cxx:112 AliHLTControlTask.cxx:113 AliHLTControlTask.cxx:114 AliHLTControlTask.cxx:115 AliHLTControlTask.cxx:116 AliHLTControlTask.cxx:117 AliHLTControlTask.cxx:118 AliHLTControlTask.cxx:119 AliHLTControlTask.cxx:120 AliHLTControlTask.cxx:121 AliHLTControlTask.cxx:122 AliHLTControlTask.cxx:123 AliHLTControlTask.cxx:124 AliHLTControlTask.cxx:125 AliHLTControlTask.cxx:126 AliHLTControlTask.cxx:127 AliHLTControlTask.cxx:128 AliHLTControlTask.cxx:129 AliHLTControlTask.cxx:130 AliHLTControlTask.cxx:131 AliHLTControlTask.cxx:132 AliHLTControlTask.cxx:133 AliHLTControlTask.cxx:134 AliHLTControlTask.cxx:135 AliHLTControlTask.cxx:136 AliHLTControlTask.cxx:137 AliHLTControlTask.cxx:138 AliHLTControlTask.cxx:139 AliHLTControlTask.cxx:140 AliHLTControlTask.cxx:141 AliHLTControlTask.cxx:142 AliHLTControlTask.cxx:143 AliHLTControlTask.cxx:144 AliHLTControlTask.cxx:145 AliHLTControlTask.cxx:146 AliHLTControlTask.cxx:147 AliHLTControlTask.cxx:148 AliHLTControlTask.cxx:149 AliHLTControlTask.cxx:150 AliHLTControlTask.cxx:151 AliHLTControlTask.cxx:152 AliHLTControlTask.cxx:153 AliHLTControlTask.cxx:154 AliHLTControlTask.cxx:155 AliHLTControlTask.cxx:156 AliHLTControlTask.cxx:157 AliHLTControlTask.cxx:158 AliHLTControlTask.cxx:159 AliHLTControlTask.cxx:160 AliHLTControlTask.cxx:161 AliHLTControlTask.cxx:162 AliHLTControlTask.cxx:163 AliHLTControlTask.cxx:164 AliHLTControlTask.cxx:165 AliHLTControlTask.cxx:166 AliHLTControlTask.cxx:167 AliHLTControlTask.cxx:168 AliHLTControlTask.cxx:169 AliHLTControlTask.cxx:170 AliHLTControlTask.cxx:171 AliHLTControlTask.cxx:172