//-*- Mode: C++ -*-
// $Id$
#ifndef ALIHLTDATASOURCE_H
#define ALIHLTDATASOURCE_H
///* This file is property of and copyright by the *
///* ALICE Experiment at CERN, All rights reserved. *
///* See cxx source for full Copyright notice *
/// @file AliHLTDataSource.h
/// @author Matthias Richter
/// @date
/// @brief Base class declaration for HLT data source components.
/// @note The class is used in Offline (AliRoot) context
///
#include "AliHLTComponent.h"
/**
* @class AliHLTDataSource
* Base class of HLT data source components.
* The class provides a common interface for the implementation of HLT data
* source components. The child class must implement the functions:
* - @ref DoInit (optional)
* - @ref DoDeinit (optional)
* - @ref GetEvent
* - @ref GetComponentID
* - @ref GetOutputDataType
* - @ref GetOutputDataSize
* - @ref Spawn
*
* @ingroup alihlt_component
*/
class AliHLTDataSource : public AliHLTComponent {
public:
/** standard constructor */
AliHLTDataSource();
/** standard destructor */
virtual ~AliHLTDataSource();
/**
* Event processing function.
* The method is called by the framework to process one event. After
* preparation of data structures. The call is redirected to GetEvent.
* @return neg. error code if failed
* -ENOSPC output buffer too small
*/
int DoProcessing( const AliHLTComponentEventData& evtData,
const AliHLTComponentBlockData* blocks,
AliHLTComponentTriggerData& trigData,
AliHLTUInt8_t* outputPtr,
AliHLTUInt32_t& size,
AliHLTComponentBlockDataList& outputBlocks,
AliHLTComponentEventDoneData*& edd );
// Information member functions for registration.
/**
* Return @ref AliHLTComponent::kSource type as component type.
* @return component type id
*/
TComponentType GetComponentType() { return AliHLTComponent::kSource;}
/**
* Default implementation for all data sources.
* There are no input data types.
*/
void GetInputDataTypes( AliHLTComponentDataTypeList& list);
protected:
/**
* The low-level data processing method for the component.
* This is the custom processing method and can be overloaded by
* the component.
* @param [in] evtData event data structure
* @param [in] trigData trigger data structure
* @param [in] outputPtr pointer to target buffer
* @param [in,out] size input: size of target buffer
* output:size of produced data
* @param [in] outputBlocks list to receive output block descriptors
* @return neg. error code if failed
*/
virtual int GetEvent( const AliHLTComponentEventData& evtData,
AliHLTComponentTriggerData& trigData,
AliHLTUInt8_t* outputPtr,
AliHLTUInt32_t& size,
AliHLTComponentBlockDataList& outputBlocks );
/**
* The high-level data processing method.
* This is the default processing method; the method is called
* if no low level @ref GetEvent method is overloaded by the component.
* @param evtData event data structure
* @param trigData trigger data structure
* @return neg. error code if failed
*/
virtual int GetEvent( const AliHLTComponentEventData& evtData, AliHLTComponentTriggerData& trigData);
private:
ClassDef(AliHLTDataSource, 3)
};
#endif