components return -ENOSPC if output buffer too small, second trial by the AliRoot...
[u/mrichter/AliRoot.git] / HLT / BASE / AliHLTDataSource.h
1 //-*- Mode: C++ -*-
2 // @(#) $Id$
3
4 #ifndef ALIHLTDATASOURCE_H
5 #define ALIHLTDATASOURCE_H
6 /* This file is property of and copyright by the ALICE HLT Project        * 
7  * ALICE Experiment at CERN, All rights reserved.                         *
8  * See cxx source for full Copyright notice                               */
9
10 /** @file   AliHLTDataSource.h
11     @author Matthias Richter
12     @date   
13     @brief  Base class declaration for HLT data source components.
14     @note   The class is used in Offline (AliRoot) context
15 */
16
17 // see below for class documentation
18 // or
19 // refer to README to build package
20 // or
21 // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt   
22
23 #include "AliHLTComponent.h"
24
25 /**
26  * @class AliHLTDataSource
27  * Base class of HLT data source components.
28  * The class provides a common interface for the implementation of HLT data
29  * source components. The child class must implement the functions:
30  * - @ref DoInit (optional)
31  * - @ref DoDeinit (optional)
32  * - @ref GetEvent
33  * - @ref GetComponentID
34  * - @ref GetOutputDataType
35  * - @ref GetOutputDataSize
36  * - @ref Spawn
37  *
38  * @ingroup alihlt_component
39  */
40 class AliHLTDataSource : public AliHLTComponent {
41  public:
42   /** standard constructor */
43   AliHLTDataSource();
44   /** standard destructor */
45   virtual ~AliHLTDataSource();
46
47   /**
48    * Event processing function.
49    * The method is called by the framework to process one event. After 
50    * preparation of data structures. The call is redirected to GetEvent.
51    * @return neg. error code if failed                                <br>
52    *         -ENOSPC      output buffer too small
53    */
54   int DoProcessing( const AliHLTComponentEventData& evtData,
55                     const AliHLTComponentBlockData* blocks, 
56                     AliHLTComponentTriggerData& trigData,
57                     AliHLTUInt8_t* outputPtr, 
58                     AliHLTUInt32_t& size,
59                     vector<AliHLTComponentBlockData>& outputBlocks,
60                     AliHLTComponentEventDoneData*& edd );
61
62   // Information member functions for registration.
63
64   /**
65    * Return @ref AliHLTComponent::kSource type as component type.
66    * @return component type id
67    */
68   TComponentType GetComponentType() { return AliHLTComponent::kSource;}
69
70   /**
71    * Default implementation for all data sources.
72    * There are no input data types.
73    */
74   void GetInputDataTypes( vector<AliHLTComponentDataType>& list);
75
76  private:
77
78   /**
79    * The low-level data processing method for the component.
80    * This is the custom processing method and can be overloaded by 
81    * the component.
82    * @param evtData       event data structure
83    * @param trigData      trigger data structure
84    * @param outputPtr     pointer to target buffer
85    * @param size          <i>input</i>: size of target buffer
86    *                      <i>output</i>:size of produced data
87    * @param outputBlocks  list to receive output block descriptors
88    * @return neg. error code if failed
89    */
90   virtual int GetEvent( const AliHLTComponentEventData& evtData,
91                 AliHLTComponentTriggerData& trigData,
92                 AliHLTUInt8_t* outputPtr, 
93                 AliHLTUInt32_t& size,
94                 vector<AliHLTComponentBlockData>& outputBlocks );
95
96   /**
97    * The high-level data processing method.
98    * This is the default processing method; the method is called
99    * if no low level @ref GetEvent method is overloaded by the component.
100    * @param evtData       event data structure
101    * @param trigData      trigger data structure
102    * @return neg. error code if failed
103    */
104   virtual int GetEvent( const AliHLTComponentEventData& evtData, AliHLTComponentTriggerData& trigData);
105
106   ClassDef(AliHLTDataSource, 1)
107 };
108 #endif