ROOT logo
//-*- Mode: C++ -*-
// $Id$
#ifndef ALIHLTDATADEFLATERHUFFMAN_H
#define ALIHLTDATADEFLATERHUFFMAN_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   AliHLTDataDeflaterHuffman.h
/// @author Thorsten Kollegger, Matthias Richter
/// @date   2011-08-10
/// @brief  Data deflater class using huffman coding

#include "AliHLTDataDeflater.h"
#include "AliHLTHuffman.h"
#include <vector>
#include <string>
#include <sstream>

/**
 * @class AliHLTDataDeflaterHuffman
 * Deflater implementation using standard huffman code.
 *
 * @ingroup alihlt_base
 */
class AliHLTDataDeflaterHuffman : public AliHLTDataDeflater
{
public:
  /// standard constructor
  AliHLTDataDeflaterHuffman(bool bTrainingMode=false);
  /// destructor
  ~AliHLTDataDeflaterHuffman();

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

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

  /// inherited from AliHLTDataDeflater: write bit pattern according to configuration
  virtual bool OutputParameterBits( int parameterId, AliHLTUInt64_t const & value );

  /// add a parameter definition for huffman training
  int AddTrainingParameter(const char* name, unsigned bitLength);

  /// add a training value for the specified parameter
  bool AddTrainingValue( int memberId, AliHLTUInt64_t const & value );

  /// generate huffman trees for all parameters and return list
  const TList* GenerateHuffmanTree();

  const TList* GetList() const {return fHuffmanCoderList;}

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

  /// print info
  virtual void Print(Option_t *option="") const;

  /// print info
  virtual void Print(ostream& out, Option_t *option="") const;

  /// find object: 'DeflaterConfiguration'
  virtual TObject *FindObject(const char *name) const;

  /// save data according to option
  virtual void SaveAs(const char *filename="",Option_t *option="") const;

  /// DataDeflaterHuffman version (ID) is 2
  virtual int GetDeflaterVersion() const {return 2;}

  /// check if in training mode
  bool IsTrainingMode() const {return fTrainingMode;}

protected:
private:
  /// copy constructor prohibited
  AliHLTDataDeflaterHuffman(const AliHLTDataDeflaterHuffman&);
  /// assigment operator prohibited
  AliHLTDataDeflaterHuffman& operator=(const AliHLTDataDeflaterHuffman&);

  /// parameter length reference for calculation of ratio
  vector<unsigned> fReferenceLength;
  /// 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

  bool fTrainingMode; //! indicate training mode

  ClassDef(AliHLTDataDeflaterHuffman, 0)
};

ostream& operator<<(ostream &out, const AliHLTDataDeflaterHuffman& me);

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