ROOT logo
//-*- Mode: C++ -*-
// $Id$
#ifndef ALIHLTDATAINFLATERHUFFMAN_H
#define ALIHLTDATAINFLATERHUFFMAN_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   AliHLTDataInflaterHuffman.h
/// @author Matthias Richter
/// @date   2011-09-01
/// @brief  Data inflater implementation for huffman encoded data
/// @note   

#include "AliHLTDataInflater.h"

class AliHLTHuffman;
class TList;

class AliHLTDataInflaterHuffman : public AliHLTDataInflater
{
public:
  /// standard constructor
  AliHLTDataInflaterHuffman();
  /// destructor
  ~AliHLTDataInflaterHuffman();

  /// add a parameter definition to the configuration, return reference id
  int AddParameterDefinition(const char* name, unsigned bitLength);

  /// init list of decoders
  int InitDecoders(TList* decoderlist);

  /// overloaded from AliHLTDataInflater
  virtual bool NextValue(AliHLTUInt64_t& value, AliHLTUInt32_t& length);
  /// switch to next parameter
  virtual int NextParameter() {
    if (fHuffmanCoders.size()==0) return -1;
    if (fLegacyMode>0) return fCurrentParameter;
    fLegacyMode=0;
    if ((++fCurrentParameter)>=(int)fHuffmanCoders.size()) fCurrentParameter=0;
    return fCurrentParameter;
  }

  /// Print info
  void Print(Option_t* option = "") const;
  /// clear the object and reset pointer references
  virtual void Clear(Option_t * option ="");

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

  /// index of the decoders in the decoder list
  vector<AliHLTHuffman*> fHuffmanCoders; //! index of decoders

  /// list of huffman coders identified by parameter name
  TList* fHuffmanCoderList; //! list of huffman coders

  /// current parameter during reading
  int fCurrentParameter; //!
  /// legacy mode to handle code not using NextParameter()
  int fLegacyMode;
  /// buffered input
  AliHLTUInt64_t fInput; //!
  /// valid MSBs in the buffered input
  AliHLTUInt32_t fInputLength; //!

  ClassDef(AliHLTDataInflaterHuffman, 0)
};

#endif //ALIHLTDATAINFLATERHUFFMAN_H
 AliHLTDataInflaterHuffman.h:1
 AliHLTDataInflaterHuffman.h:2
 AliHLTDataInflaterHuffman.h:3
 AliHLTDataInflaterHuffman.h:4
 AliHLTDataInflaterHuffman.h:5
 AliHLTDataInflaterHuffman.h:6
 AliHLTDataInflaterHuffman.h:7
 AliHLTDataInflaterHuffman.h:8
 AliHLTDataInflaterHuffman.h:9
 AliHLTDataInflaterHuffman.h:10
 AliHLTDataInflaterHuffman.h:11
 AliHLTDataInflaterHuffman.h:12
 AliHLTDataInflaterHuffman.h:13
 AliHLTDataInflaterHuffman.h:14
 AliHLTDataInflaterHuffman.h:15
 AliHLTDataInflaterHuffman.h:16
 AliHLTDataInflaterHuffman.h:17
 AliHLTDataInflaterHuffman.h:18
 AliHLTDataInflaterHuffman.h:19
 AliHLTDataInflaterHuffman.h:20
 AliHLTDataInflaterHuffman.h:21
 AliHLTDataInflaterHuffman.h:22
 AliHLTDataInflaterHuffman.h:23
 AliHLTDataInflaterHuffman.h:24
 AliHLTDataInflaterHuffman.h:25
 AliHLTDataInflaterHuffman.h:26
 AliHLTDataInflaterHuffman.h:27
 AliHLTDataInflaterHuffman.h:28
 AliHLTDataInflaterHuffman.h:29
 AliHLTDataInflaterHuffman.h:30
 AliHLTDataInflaterHuffman.h:31
 AliHLTDataInflaterHuffman.h:32
 AliHLTDataInflaterHuffman.h:33
 AliHLTDataInflaterHuffman.h:34
 AliHLTDataInflaterHuffman.h:35
 AliHLTDataInflaterHuffman.h:36
 AliHLTDataInflaterHuffman.h:37
 AliHLTDataInflaterHuffman.h:38
 AliHLTDataInflaterHuffman.h:39
 AliHLTDataInflaterHuffman.h:40
 AliHLTDataInflaterHuffman.h:41
 AliHLTDataInflaterHuffman.h:42
 AliHLTDataInflaterHuffman.h:43
 AliHLTDataInflaterHuffman.h:44
 AliHLTDataInflaterHuffman.h:45
 AliHLTDataInflaterHuffman.h:46
 AliHLTDataInflaterHuffman.h:47
 AliHLTDataInflaterHuffman.h:48
 AliHLTDataInflaterHuffman.h:49
 AliHLTDataInflaterHuffman.h:50
 AliHLTDataInflaterHuffman.h:51
 AliHLTDataInflaterHuffman.h:52
 AliHLTDataInflaterHuffman.h:53
 AliHLTDataInflaterHuffman.h:54
 AliHLTDataInflaterHuffman.h:55
 AliHLTDataInflaterHuffman.h:56
 AliHLTDataInflaterHuffman.h:57
 AliHLTDataInflaterHuffman.h:58
 AliHLTDataInflaterHuffman.h:59
 AliHLTDataInflaterHuffman.h:60
 AliHLTDataInflaterHuffman.h:61
 AliHLTDataInflaterHuffman.h:62
 AliHLTDataInflaterHuffman.h:63
 AliHLTDataInflaterHuffman.h:64
 AliHLTDataInflaterHuffman.h:65
 AliHLTDataInflaterHuffman.h:66
 AliHLTDataInflaterHuffman.h:67
 AliHLTDataInflaterHuffman.h:68
 AliHLTDataInflaterHuffman.h:69
 AliHLTDataInflaterHuffman.h:70
 AliHLTDataInflaterHuffman.h:71
 AliHLTDataInflaterHuffman.h:72
 AliHLTDataInflaterHuffman.h:73
 AliHLTDataInflaterHuffman.h:74
 AliHLTDataInflaterHuffman.h:75