ROOT logo
//-*- Mode: C++ -*-
// $Id$

#ifndef ALIHLTOUTHANDLER_H
#define ALIHLTOUTHANDLER_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   AliHLTOUTHandler.h
/// @author Matthias Richter
/// @date   
/// @brief  Base class declaration of HLTOUT handlers

#include "AliHLTLogging.h"

class AliHLTOUT;

/**
 * @class AliHLTOUTHandler
 * Base class declaration of HLT output handlers.
 * The library implementation of the AliHLTModuleAgent allows to generate
 * handlers for data blocks of the HLT output. This can be the output of
 * the real HLT coming from the HLTOUT nodes, or simulated HLT output.   <br>
 * \em Note: The created instance of AliHLTOUTHandler is
 * deleted by the framework.
 */
class AliHLTOUTHandler : public AliHLTLogging {
 public:
  /** standard constructor */
  AliHLTOUTHandler();
  /** standard destructor */
  virtual ~AliHLTOUTHandler();

  /**
   * Process the data.
   * The data blocks can be selected by AliHLTOUT::SelectFirstDataBlock() and
   * AliHLTOUT::SelectNextDataBlock()
   *
   * Properties of the current data block can be retrieved by the following member
   * functions of AliHLTOUT:
   * - AliHLTOUT::GetDataBlockDescription(AliHLTComponentDataType& dt, AliHLTUInt32_t& spec)
   * - AliHLTOUT::GetDataBlockIndex()
   * - AliHLTOUT::GetDataBuffer(const AliHLTUInt8_t* &pBuffer, AliHLTUInt32_t& size)
   * - AliHLTOUT::ReleaseDataBuffer(const AliHLTUInt8_t* pBuffer)
   *
   * The handler might decode the data block and produce new data as a
   * replacement, see GetProcessedData()
   * @param pData     instance of the AliHLTOUT data
   * @return depending on the overloaded function, neg. error code if failed
   */
  virtual int ProcessData(AliHLTOUT* pData) = 0;

  /**
   * Get the output data, if available.
   * Some of the handlers might produce data to replace the original data
   * block. The handler must ensure the internal storage of the buffer and
   * is also responsible for cleaning the buffer. The buffer must be valid
   * until the next call of ProcessData() or ReleaseProcessedData().
   *
   * The default implementation just returns a NULL pointer to indicate
   * 'no data'.
   * @param pData     target to receive data pointer
   * @return size of the buffer
   */
  virtual int GetProcessedData(const AliHLTUInt8_t* &pData);

  /**
   * Release the buffer of processed data.
   * The handler implementation can do cleanup here.
   * @param pData     pointer to buffer
   * @param size      size of the buffer
   * @return neg. error code if failed
   */
  virtual int ReleaseProcessedData(const AliHLTUInt8_t* pData, int size);

  /**
   * Cleanup the current event processing.
   */
  virtual int FinishEvent();

  enum {
    kHandlerUndefined = 0,
    kHandlerOK    = 0,
    kHandlerError = 0x1000
  };

  /**
   * Check state flag of the handler.
   * @return true if flag matches
   */
  bool CheckStatus(unsigned int flag) const {
    return (fState&flag)!=0;
  }

  /**
   * Reset the state flag.
   */
  void ResetState() {
    fState=kHandlerOK;
  }

 protected:
  void SetStatusFlag(unsigned int flag) {
    fState|=flag;
  }

  void ClearStatusFlag(unsigned int flag) {
    fState&=~flag;
  }

 private:
  /** copy constructor prohibited */
  AliHLTOUTHandler(const AliHLTOUTHandler&);
  /** assignment operator prohibited */
  AliHLTOUTHandler& operator=(const AliHLTOUTHandler&);

  /** internal state of the handler */
  int fState; //!transient

  ClassDef(AliHLTOUTHandler, 0)
};
#endif
 AliHLTOUTHandler.h:1
 AliHLTOUTHandler.h:2
 AliHLTOUTHandler.h:3
 AliHLTOUTHandler.h:4
 AliHLTOUTHandler.h:5
 AliHLTOUTHandler.h:6
 AliHLTOUTHandler.h:7
 AliHLTOUTHandler.h:8
 AliHLTOUTHandler.h:9
 AliHLTOUTHandler.h:10
 AliHLTOUTHandler.h:11
 AliHLTOUTHandler.h:12
 AliHLTOUTHandler.h:13
 AliHLTOUTHandler.h:14
 AliHLTOUTHandler.h:15
 AliHLTOUTHandler.h:16
 AliHLTOUTHandler.h:17
 AliHLTOUTHandler.h:18
 AliHLTOUTHandler.h:19
 AliHLTOUTHandler.h:20
 AliHLTOUTHandler.h:21
 AliHLTOUTHandler.h:22
 AliHLTOUTHandler.h:23
 AliHLTOUTHandler.h:24
 AliHLTOUTHandler.h:25
 AliHLTOUTHandler.h:26
 AliHLTOUTHandler.h:27
 AliHLTOUTHandler.h:28
 AliHLTOUTHandler.h:29
 AliHLTOUTHandler.h:30
 AliHLTOUTHandler.h:31
 AliHLTOUTHandler.h:32
 AliHLTOUTHandler.h:33
 AliHLTOUTHandler.h:34
 AliHLTOUTHandler.h:35
 AliHLTOUTHandler.h:36
 AliHLTOUTHandler.h:37
 AliHLTOUTHandler.h:38
 AliHLTOUTHandler.h:39
 AliHLTOUTHandler.h:40
 AliHLTOUTHandler.h:41
 AliHLTOUTHandler.h:42
 AliHLTOUTHandler.h:43
 AliHLTOUTHandler.h:44
 AliHLTOUTHandler.h:45
 AliHLTOUTHandler.h:46
 AliHLTOUTHandler.h:47
 AliHLTOUTHandler.h:48
 AliHLTOUTHandler.h:49
 AliHLTOUTHandler.h:50
 AliHLTOUTHandler.h:51
 AliHLTOUTHandler.h:52
 AliHLTOUTHandler.h:53
 AliHLTOUTHandler.h:54
 AliHLTOUTHandler.h:55
 AliHLTOUTHandler.h:56
 AliHLTOUTHandler.h:57
 AliHLTOUTHandler.h:58
 AliHLTOUTHandler.h:59
 AliHLTOUTHandler.h:60
 AliHLTOUTHandler.h:61
 AliHLTOUTHandler.h:62
 AliHLTOUTHandler.h:63
 AliHLTOUTHandler.h:64
 AliHLTOUTHandler.h:65
 AliHLTOUTHandler.h:66
 AliHLTOUTHandler.h:67
 AliHLTOUTHandler.h:68
 AliHLTOUTHandler.h:69
 AliHLTOUTHandler.h:70
 AliHLTOUTHandler.h:71
 AliHLTOUTHandler.h:72
 AliHLTOUTHandler.h:73
 AliHLTOUTHandler.h:74
 AliHLTOUTHandler.h:75
 AliHLTOUTHandler.h:76
 AliHLTOUTHandler.h:77
 AliHLTOUTHandler.h:78
 AliHLTOUTHandler.h:79
 AliHLTOUTHandler.h:80
 AliHLTOUTHandler.h:81
 AliHLTOUTHandler.h:82
 AliHLTOUTHandler.h:83
 AliHLTOUTHandler.h:84
 AliHLTOUTHandler.h:85
 AliHLTOUTHandler.h:86
 AliHLTOUTHandler.h:87
 AliHLTOUTHandler.h:88
 AliHLTOUTHandler.h:89
 AliHLTOUTHandler.h:90
 AliHLTOUTHandler.h:91
 AliHLTOUTHandler.h:92
 AliHLTOUTHandler.h:93
 AliHLTOUTHandler.h:94
 AliHLTOUTHandler.h:95
 AliHLTOUTHandler.h:96
 AliHLTOUTHandler.h:97
 AliHLTOUTHandler.h:98
 AliHLTOUTHandler.h:99
 AliHLTOUTHandler.h:100
 AliHLTOUTHandler.h:101
 AliHLTOUTHandler.h:102
 AliHLTOUTHandler.h:103
 AliHLTOUTHandler.h:104
 AliHLTOUTHandler.h:105
 AliHLTOUTHandler.h:106
 AliHLTOUTHandler.h:107
 AliHLTOUTHandler.h:108
 AliHLTOUTHandler.h:109
 AliHLTOUTHandler.h:110
 AliHLTOUTHandler.h:111
 AliHLTOUTHandler.h:112
 AliHLTOUTHandler.h:113
 AliHLTOUTHandler.h:114
 AliHLTOUTHandler.h:115
 AliHLTOUTHandler.h:116
 AliHLTOUTHandler.h:117
 AliHLTOUTHandler.h:118
 AliHLTOUTHandler.h:119
 AliHLTOUTHandler.h:120
 AliHLTOUTHandler.h:121
 AliHLTOUTHandler.h:122
 AliHLTOUTHandler.h:123