ROOT logo
//-*- Mode: C++ -*-
// @(#) $Id$

#ifndef ALIHLTOUTHOMERBUFFER_H
#define ALIHLTOUTHOMERBUFFER_H
//* This file is property of and copyright by the ALICE HLT Project        * 
//* ALICE Experiment at CERN, All rights reserved.                         *
//* See cxx source for full Copyright notice                               *

/** @file   AliHLTOUTHomerBuffer.h
    @author Matthias Richter
    @date   
    @brief  HLTOUT data wrapper for a data buffer.
*/

#include "AliHLTOUT.h"
#include "AliHLTLogging.h"

class AliHLTHOMERReader;
class AliHLTMonitoringReader;
class AliHLTHOMERLibManager;

/**
 * @class AliHLTOUTHomerBuffer
 * Handler of HLTOUT data for buffer input.
 *
 * The class supports the AliHLTOUT interface in order to access the
 * individual data blocks of a HOMER data collection. An AliHOMERReader
 * is created to interpret the data. The class can serve as base for
 * other HLTOUT implementations supporting different kinds of input like
 * the AliHLTOUTHomerCollection and its childs AliHLTOUTRawReader and
 * AliHLTOUTDigitReader.
 *
 * @note The buffer is expected to contain the HOMER data block only, no
 * CDH and HLT headers.
 */
class AliHLTOUTHomerBuffer : public AliHLTOUT, public AliHLTLogging {
 public:
  /** constructor */
  AliHLTOUTHomerBuffer(const AliHLTUInt8_t* pBuffer, int size);
  /** destructor */
  virtual ~AliHLTOUTHomerBuffer();

 protected:
  /**
   * Step trough data blocks of a HOMER reader and generate index.
   */
  int ScanReader(AliHLTMonitoringReader* pReader, AliHLTUInt32_t majorIndex=0);

  /** dynamic loader manager for HOMER library */
  AliHLTHOMERLibManager* fpManager; //!transient

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

  /**
   * Generate the index of the HLTOUT data from the data buffer.
   */
  virtual int GenerateIndex();

  /**
   * Get the data buffer
   * @param [in]  index   index of the block
   * @param [out] pBuffer buffer of the selected data block
   * @param [out] size    size of the selected data block
   */
  virtual int GetDataBuffer(AliHLTUInt32_t index, const AliHLTUInt8_t* &pBuffer, 
			    AliHLTUInt32_t& size);

  /**
   * Check byte order of data block
   */
  virtual AliHLTOUTByteOrder CheckBlockByteOrder(AliHLTUInt32_t index);

  /**
   * Check alignment of data block
   */
  virtual int CheckBlockAlignment(AliHLTUInt32_t index, AliHLTOUT::AliHLTOUTDataType type);

  /** data buffer */
  const AliHLTUInt8_t* fpBuffer; //! transient

  /** size of data buffer */
  int fSize; //! transient

  /** instance of the HOMER reader */
  AliHLTHOMERReader* fpReader;  //!transient

  ClassDef(AliHLTOUTHomerBuffer, 0)
};
#endif
 AliHLTOUTHomerBuffer.h:1
 AliHLTOUTHomerBuffer.h:2
 AliHLTOUTHomerBuffer.h:3
 AliHLTOUTHomerBuffer.h:4
 AliHLTOUTHomerBuffer.h:5
 AliHLTOUTHomerBuffer.h:6
 AliHLTOUTHomerBuffer.h:7
 AliHLTOUTHomerBuffer.h:8
 AliHLTOUTHomerBuffer.h:9
 AliHLTOUTHomerBuffer.h:10
 AliHLTOUTHomerBuffer.h:11
 AliHLTOUTHomerBuffer.h:12
 AliHLTOUTHomerBuffer.h:13
 AliHLTOUTHomerBuffer.h:14
 AliHLTOUTHomerBuffer.h:15
 AliHLTOUTHomerBuffer.h:16
 AliHLTOUTHomerBuffer.h:17
 AliHLTOUTHomerBuffer.h:18
 AliHLTOUTHomerBuffer.h:19
 AliHLTOUTHomerBuffer.h:20
 AliHLTOUTHomerBuffer.h:21
 AliHLTOUTHomerBuffer.h:22
 AliHLTOUTHomerBuffer.h:23
 AliHLTOUTHomerBuffer.h:24
 AliHLTOUTHomerBuffer.h:25
 AliHLTOUTHomerBuffer.h:26
 AliHLTOUTHomerBuffer.h:27
 AliHLTOUTHomerBuffer.h:28
 AliHLTOUTHomerBuffer.h:29
 AliHLTOUTHomerBuffer.h:30
 AliHLTOUTHomerBuffer.h:31
 AliHLTOUTHomerBuffer.h:32
 AliHLTOUTHomerBuffer.h:33
 AliHLTOUTHomerBuffer.h:34
 AliHLTOUTHomerBuffer.h:35
 AliHLTOUTHomerBuffer.h:36
 AliHLTOUTHomerBuffer.h:37
 AliHLTOUTHomerBuffer.h:38
 AliHLTOUTHomerBuffer.h:39
 AliHLTOUTHomerBuffer.h:40
 AliHLTOUTHomerBuffer.h:41
 AliHLTOUTHomerBuffer.h:42
 AliHLTOUTHomerBuffer.h:43
 AliHLTOUTHomerBuffer.h:44
 AliHLTOUTHomerBuffer.h:45
 AliHLTOUTHomerBuffer.h:46
 AliHLTOUTHomerBuffer.h:47
 AliHLTOUTHomerBuffer.h:48
 AliHLTOUTHomerBuffer.h:49
 AliHLTOUTHomerBuffer.h:50
 AliHLTOUTHomerBuffer.h:51
 AliHLTOUTHomerBuffer.h:52
 AliHLTOUTHomerBuffer.h:53
 AliHLTOUTHomerBuffer.h:54
 AliHLTOUTHomerBuffer.h:55
 AliHLTOUTHomerBuffer.h:56
 AliHLTOUTHomerBuffer.h:57
 AliHLTOUTHomerBuffer.h:58
 AliHLTOUTHomerBuffer.h:59
 AliHLTOUTHomerBuffer.h:60
 AliHLTOUTHomerBuffer.h:61
 AliHLTOUTHomerBuffer.h:62
 AliHLTOUTHomerBuffer.h:63
 AliHLTOUTHomerBuffer.h:64
 AliHLTOUTHomerBuffer.h:65
 AliHLTOUTHomerBuffer.h:66
 AliHLTOUTHomerBuffer.h:67
 AliHLTOUTHomerBuffer.h:68
 AliHLTOUTHomerBuffer.h:69
 AliHLTOUTHomerBuffer.h:70
 AliHLTOUTHomerBuffer.h:71
 AliHLTOUTHomerBuffer.h:72
 AliHLTOUTHomerBuffer.h:73
 AliHLTOUTHomerBuffer.h:74
 AliHLTOUTHomerBuffer.h:75
 AliHLTOUTHomerBuffer.h:76
 AliHLTOUTHomerBuffer.h:77
 AliHLTOUTHomerBuffer.h:78
 AliHLTOUTHomerBuffer.h:79
 AliHLTOUTHomerBuffer.h:80
 AliHLTOUTHomerBuffer.h:81
 AliHLTOUTHomerBuffer.h:82
 AliHLTOUTHomerBuffer.h:83
 AliHLTOUTHomerBuffer.h:84
 AliHLTOUTHomerBuffer.h:85
 AliHLTOUTHomerBuffer.h:86
 AliHLTOUTHomerBuffer.h:87
 AliHLTOUTHomerBuffer.h:88
 AliHLTOUTHomerBuffer.h:89
 AliHLTOUTHomerBuffer.h:90
 AliHLTOUTHomerBuffer.h:91
 AliHLTOUTHomerBuffer.h:92
 AliHLTOUTHomerBuffer.h:93
 AliHLTOUTHomerBuffer.h:94
 AliHLTOUTHomerBuffer.h:95
 AliHLTOUTHomerBuffer.h:96