ROOT logo
// $Id$

//**************************************************************************
//* This file is property of and copyright by the ALICE HLT Project        * 
//* ALICE Experiment at CERN, All rights reserved.                         *
//*                                                                        *
//* Primary Authors: Thorsten Kollegger <kollegge@ikf.uni-frankfurt.de>    *
//*                  for The ALICE HLT Project.                            *
//*                                                                        *
//* Permission to use, copy, modify and distribute this software and its   *
//* documentation strictly for non-commercial purposes is hereby granted   *
//* without fee, provided that the above copyright notice appears in all   *
//* copies and that both the copyright notice and this permission notice   *
//* appear in the supporting documentation. The authors make no claims     *
//* about the suitability of this software for any purpose. It is          *
//* provided "as is" without express or implied warranty.                  *
//**************************************************************************

/// @file   AliHLTDataDeflaterHuffman.cxx
/// @author Thorsten Kollegger, Matthias Richter
/// @date   2011-08-10
/// @brief  Deflater implementation using huffman code

#include "AliHLTDataDeflaterHuffman.h"
#include "AliHLTHuffman.h"
#include "TObjArray.h"
#include "TList.h"
#include "TString.h"
#include "TFile.h"
#include <memory>
#include <algorithm>
#include <iostream>

/** ROOT macro for the implementation of ROOT specific class methods */
ClassImp(AliHLTDataDeflaterHuffman)

AliHLTDataDeflaterHuffman::AliHLTDataDeflaterHuffman(bool bTrainingMode)
  : AliHLTDataDeflater()
  , fReferenceLength()
  , fHuffmanCoders()
  , fHuffmanCoderList(NULL)
  , fTrainingMode(bTrainingMode)
{
  // see header file for class documentation
  // or
  // refer to README to build package
  // or
  // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
  if (bTrainingMode) {
    HLTInfo("using DataDeflaterHuffman in training mode");
  }
}

AliHLTDataDeflaterHuffman::~AliHLTDataDeflaterHuffman()
{
  // destructor
  if (fHuffmanCoderList) delete fHuffmanCoderList;
  fHuffmanCoderList=NULL;

  Clear();
}

int AliHLTDataDeflaterHuffman::AddParameterDefinition(const char* name, unsigned bitLength, unsigned refLength)
{
  /// search a parameter definition in the decoder configuration, and set the index
  /// array, return reference id
  if (IsTrainingMode())
    return AddTrainingParameter(name, bitLength);

  if (!name) return -EINVAL;
  if (!fHuffmanCoderList) return -ENODEV;
  TObject* pObj=fHuffmanCoderList->FindObject(name);
  if (!pObj) {
    HLTError("can not find decoder of id '%s'", name);
    return -ENOENT;
  }
  AliHLTHuffman* pHuffman=dynamic_cast<AliHLTHuffman*>(pObj);
  if (!pHuffman) {
    HLTError("object %s has wrong type, expected AliHLTHuffman", name);
    return -EBADF;
  }
  if (pHuffman->GetMaxBits()!=bitLength) {
    HLTError("mismatch in bitlengt: can not use decoder %s of length %d for encoding of %d bits", pHuffman->GetName(), pHuffman->GetMaxBits(), bitLength);
    return -EPERM;
  }

  fReferenceLength.push_back(refLength);
  fHuffmanCoders.push_back(pHuffman);

  int memberId=fHuffmanCoders.size()-1;
  if (DoStatistics()) {
    AddHistogram(memberId, name, bitLength);
  }

  return memberId;
}

int AliHLTDataDeflaterHuffman::InitDecoders(TList* decoderlist)
{
  /// init list of decoders
  /// expects to be an external pointer, valid throughout the livetime of
  /// the instance
  if (!decoderlist) return -EINVAL;
  if (!fHuffmanCoderList) {
    fHuffmanCoderList=new TList;
  } else {
    if (fHuffmanCoderList->GetEntries()>0 && fHuffmanCoderList->IsOwner()) {
      HLTWarning("list of decoders owns already %d object(s), but disabling ownership now because of new external pointers");
    }
  }
  if (!fHuffmanCoderList) return -ENOMEM;
  fHuffmanCoderList->SetOwner(kFALSE);
  TIter next(decoderlist);
  TObject* pObj=NULL;
  while ((pObj=next())!=NULL) {
    if (dynamic_cast<AliHLTHuffman*>(pObj)==NULL) continue;
    if (fHuffmanCoderList->FindObject(pObj->GetName())) {
      HLTError("duplicate entry of name '%s'", pObj->GetName());
      return -EEXIST;
    }
    fHuffmanCoderList->Add(pObj);
  }

  return fHuffmanCoderList->GetEntries();
}

bool AliHLTDataDeflaterHuffman::OutputParameterBits( int memberId, AliHLTUInt64_t const & value )
{
  // write huffman encoded bit pattern of a member to the current byte and position
  if (IsTrainingMode())
    return AddTrainingValue(memberId, value);

  if (memberId>=(int)fHuffmanCoders.size()) {
    return false;
  }

  AliHLTUInt64_t length = 0;
  const std::bitset<64>& v=fHuffmanCoders[memberId]->Encode((value>fHuffmanCoders[memberId]->GetMaxValue())?fHuffmanCoders[memberId]->GetMaxValue():value, length);
  //cout << fHuffmanCoders[memberId]->GetName() << " value " << value << ": code lenght " << length << " " << v << endl;
  if (DoStatistics()) {
    float weight=0.0;
    unsigned parameterLength=fHuffmanCoders[memberId]->GetMaxBits();
    if (memberId<(int)fReferenceLength.size() && fReferenceLength[memberId]>0)
      parameterLength=fReferenceLength[memberId];
    if (parameterLength>0) {
      weight=length;
      weight/=parameterLength;
    }
    FillStatistics(memberId, value, length, weight);
  }

  if (length>0) {
    return OutputBits(v, length);
  }

  return false;
}

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

  /// returns index in the array
  if (!fHuffmanCoderList) {
    fHuffmanCoderList=new TList;
    if (!fHuffmanCoderList) return -ENOMEM;
    // always set ownership for the new list since it is supposed to
    // contain only internal pointers
    fHuffmanCoderList->SetOwner();
  } else if (!fHuffmanCoderList->IsOwner()) {
    // not sure about the pointers which are already in the list
    if (fHuffmanCoderList->GetEntries()>0) {
      HLTWarning("skip setting ownership because list contains already %d object(s), possible memory leak at cleanup");
    } else {
      fHuffmanCoderList->SetOwner();
    }
  }
  AliHLTHuffman* pHuffman=new AliHLTHuffman(name, bitLength);
  if (!pHuffman) return -ENOMEM;
  fHuffmanCoderList->Add(pHuffman);

  fHuffmanCoders.push_back(pHuffman);
  return fHuffmanCoders.size()-1;
}

bool AliHLTDataDeflaterHuffman::AddTrainingValue( int memberId, AliHLTUInt64_t const & value )
{
  /// add a training value for the specified parameter
  if (memberId>=(int)fHuffmanCoders.size()) {
    return false;
  }
  return fHuffmanCoders[memberId]->AddTrainingValue(value);
}

const TList* AliHLTDataDeflaterHuffman::GenerateHuffmanTree()
{
  /// generate the huffman tree
  for (unsigned i=0; i<fHuffmanCoders.size(); i++) {
    if (!fHuffmanCoders[i]->GenerateHuffmanTree()) {
      HLTError("failed to generate huffman tree for parameter %s", fHuffmanCoders[i]->GetName());
    }
  }
  return fHuffmanCoderList;
}

void AliHLTDataDeflaterHuffman::Clear(Option_t * option)
{
  // internal cleanup

  AliHLTDataDeflater::Clear(option);
}

void AliHLTDataDeflaterHuffman::Print(Option_t *option) const
{
  // print info
  Print(cout, option);
}

void AliHLTDataDeflaterHuffman::Print(ostream& out, Option_t * /*option*/) const
{
  // print to stream
  out << "AliHLTDataDeflaterHuffman:" << endl;
  for (vector<AliHLTHuffman*>::const_iterator it=fHuffmanCoders.begin();
       it!=fHuffmanCoders.end(); it++) {
    (*it)->Print("short"); cout << endl;
  }
  if (fHuffmanCoders.size()==0 && fHuffmanCoderList && fHuffmanCoderList->GetEntries()>0) {
    TIter next(fHuffmanCoderList);
    TObject* pObj=NULL;
    while ((pObj=next())) {
      pObj->Print("short"); cout << endl;
    }
  }
}

TObject *AliHLTDataDeflaterHuffman::FindObject(const char *name) const
{
  /// find object: 'DeflaterConfiguration'
  if (strcmp(name, "DeflaterConfiguration")==0) {
    for (unsigned i=0; i<fHuffmanCoders.size(); i++) {
      if (!fHuffmanCoders[i]->GenerateHuffmanTree()) {
	HLTError("generation of huffman tree for parameter '%s' failed", fHuffmanCoders[i]->GetName());
	return NULL;
      }
      if (!fHuffmanCoders[i]->CheckConsistency()) {
	HLTError("consistency check of huffman tree for parameter '%s' failed", fHuffmanCoders[i]->GetName());
      }
    }
    
    return fHuffmanCoderList;
  }

  return NULL;
}

void AliHLTDataDeflaterHuffman::SaveAs(const char *filename, Option_t *option) const
{
  /// save data according to option
  TString remainingOptions;
  bool bWriteHuffmanConf=false; // write the huffman configuration
  TString strOption(option);
  std::auto_ptr<TObjArray> tokens(strOption.Tokenize(" "));
  if (tokens.get()) {
    for (int i=0; i<tokens->GetEntriesFast(); i++) {
      if (!tokens->At(i)) continue;
      const char* key="";
      TString arg=tokens->At(i)->GetName();

      key="huffmanconf";
      if (arg.BeginsWith(key)) {
	bWriteHuffmanConf=true;
	continue;
      }

      if (!remainingOptions.IsNull()) remainingOptions+=" ";
      remainingOptions+=arg;
    }
  }

  if (bWriteHuffmanConf) {
    std::auto_ptr<TFile> output(TFile::Open(filename, "RECREATE"));
    if (!output.get() || output->IsZombie()) {
      HLTError("can not open file %s from writing", filename);
      return;
    }

    if (!fHuffmanCoderList || fHuffmanCoderList->GetEntries()==0) {
      HLTError("no huffman instances available for writing");
      return;
    }

    for (unsigned i=0; i<fHuffmanCoders.size(); i++) {
      if (!fHuffmanCoders[i]->GenerateHuffmanTree()) {
	HLTError("generation of huffman tree for parameter '%s' failed", fHuffmanCoders[i]->GetName());
      }
    }

    output->cd();
    fHuffmanCoderList->Write("DeflaterConfiguration", TObject::kSingleKey);
    output->Close();
    return;
  }

  return AliHLTDataDeflater::SaveAs(filename, remainingOptions);
}

ostream& operator<<(ostream &out, const AliHLTDataDeflaterHuffman& me)
{
  me.Print(out);
  return out;
}

 AliHLTDataDeflaterHuffman.cxx:1
 AliHLTDataDeflaterHuffman.cxx:2
 AliHLTDataDeflaterHuffman.cxx:3
 AliHLTDataDeflaterHuffman.cxx:4
 AliHLTDataDeflaterHuffman.cxx:5
 AliHLTDataDeflaterHuffman.cxx:6
 AliHLTDataDeflaterHuffman.cxx:7
 AliHLTDataDeflaterHuffman.cxx:8
 AliHLTDataDeflaterHuffman.cxx:9
 AliHLTDataDeflaterHuffman.cxx:10
 AliHLTDataDeflaterHuffman.cxx:11
 AliHLTDataDeflaterHuffman.cxx:12
 AliHLTDataDeflaterHuffman.cxx:13
 AliHLTDataDeflaterHuffman.cxx:14
 AliHLTDataDeflaterHuffman.cxx:15
 AliHLTDataDeflaterHuffman.cxx:16
 AliHLTDataDeflaterHuffman.cxx:17
 AliHLTDataDeflaterHuffman.cxx:18
 AliHLTDataDeflaterHuffman.cxx:19
 AliHLTDataDeflaterHuffman.cxx:20
 AliHLTDataDeflaterHuffman.cxx:21
 AliHLTDataDeflaterHuffman.cxx:22
 AliHLTDataDeflaterHuffman.cxx:23
 AliHLTDataDeflaterHuffman.cxx:24
 AliHLTDataDeflaterHuffman.cxx:25
 AliHLTDataDeflaterHuffman.cxx:26
 AliHLTDataDeflaterHuffman.cxx:27
 AliHLTDataDeflaterHuffman.cxx:28
 AliHLTDataDeflaterHuffman.cxx:29
 AliHLTDataDeflaterHuffman.cxx:30
 AliHLTDataDeflaterHuffman.cxx:31
 AliHLTDataDeflaterHuffman.cxx:32
 AliHLTDataDeflaterHuffman.cxx:33
 AliHLTDataDeflaterHuffman.cxx:34
 AliHLTDataDeflaterHuffman.cxx:35
 AliHLTDataDeflaterHuffman.cxx:36
 AliHLTDataDeflaterHuffman.cxx:37
 AliHLTDataDeflaterHuffman.cxx:38
 AliHLTDataDeflaterHuffman.cxx:39
 AliHLTDataDeflaterHuffman.cxx:40
 AliHLTDataDeflaterHuffman.cxx:41
 AliHLTDataDeflaterHuffman.cxx:42
 AliHLTDataDeflaterHuffman.cxx:43
 AliHLTDataDeflaterHuffman.cxx:44
 AliHLTDataDeflaterHuffman.cxx:45
 AliHLTDataDeflaterHuffman.cxx:46
 AliHLTDataDeflaterHuffman.cxx:47
 AliHLTDataDeflaterHuffman.cxx:48
 AliHLTDataDeflaterHuffman.cxx:49
 AliHLTDataDeflaterHuffman.cxx:50
 AliHLTDataDeflaterHuffman.cxx:51
 AliHLTDataDeflaterHuffman.cxx:52
 AliHLTDataDeflaterHuffman.cxx:53
 AliHLTDataDeflaterHuffman.cxx:54
 AliHLTDataDeflaterHuffman.cxx:55
 AliHLTDataDeflaterHuffman.cxx:56
 AliHLTDataDeflaterHuffman.cxx:57
 AliHLTDataDeflaterHuffman.cxx:58
 AliHLTDataDeflaterHuffman.cxx:59
 AliHLTDataDeflaterHuffman.cxx:60
 AliHLTDataDeflaterHuffman.cxx:61
 AliHLTDataDeflaterHuffman.cxx:62
 AliHLTDataDeflaterHuffman.cxx:63
 AliHLTDataDeflaterHuffman.cxx:64
 AliHLTDataDeflaterHuffman.cxx:65
 AliHLTDataDeflaterHuffman.cxx:66
 AliHLTDataDeflaterHuffman.cxx:67
 AliHLTDataDeflaterHuffman.cxx:68
 AliHLTDataDeflaterHuffman.cxx:69
 AliHLTDataDeflaterHuffman.cxx:70
 AliHLTDataDeflaterHuffman.cxx:71
 AliHLTDataDeflaterHuffman.cxx:72
 AliHLTDataDeflaterHuffman.cxx:73
 AliHLTDataDeflaterHuffman.cxx:74
 AliHLTDataDeflaterHuffman.cxx:75
 AliHLTDataDeflaterHuffman.cxx:76
 AliHLTDataDeflaterHuffman.cxx:77
 AliHLTDataDeflaterHuffman.cxx:78
 AliHLTDataDeflaterHuffman.cxx:79
 AliHLTDataDeflaterHuffman.cxx:80
 AliHLTDataDeflaterHuffman.cxx:81
 AliHLTDataDeflaterHuffman.cxx:82
 AliHLTDataDeflaterHuffman.cxx:83
 AliHLTDataDeflaterHuffman.cxx:84
 AliHLTDataDeflaterHuffman.cxx:85
 AliHLTDataDeflaterHuffman.cxx:86
 AliHLTDataDeflaterHuffman.cxx:87
 AliHLTDataDeflaterHuffman.cxx:88
 AliHLTDataDeflaterHuffman.cxx:89
 AliHLTDataDeflaterHuffman.cxx:90
 AliHLTDataDeflaterHuffman.cxx:91
 AliHLTDataDeflaterHuffman.cxx:92
 AliHLTDataDeflaterHuffman.cxx:93
 AliHLTDataDeflaterHuffman.cxx:94
 AliHLTDataDeflaterHuffman.cxx:95
 AliHLTDataDeflaterHuffman.cxx:96
 AliHLTDataDeflaterHuffman.cxx:97
 AliHLTDataDeflaterHuffman.cxx:98
 AliHLTDataDeflaterHuffman.cxx:99
 AliHLTDataDeflaterHuffman.cxx:100
 AliHLTDataDeflaterHuffman.cxx:101
 AliHLTDataDeflaterHuffman.cxx:102
 AliHLTDataDeflaterHuffman.cxx:103
 AliHLTDataDeflaterHuffman.cxx:104
 AliHLTDataDeflaterHuffman.cxx:105
 AliHLTDataDeflaterHuffman.cxx:106
 AliHLTDataDeflaterHuffman.cxx:107
 AliHLTDataDeflaterHuffman.cxx:108
 AliHLTDataDeflaterHuffman.cxx:109
 AliHLTDataDeflaterHuffman.cxx:110
 AliHLTDataDeflaterHuffman.cxx:111
 AliHLTDataDeflaterHuffman.cxx:112
 AliHLTDataDeflaterHuffman.cxx:113
 AliHLTDataDeflaterHuffman.cxx:114
 AliHLTDataDeflaterHuffman.cxx:115
 AliHLTDataDeflaterHuffman.cxx:116
 AliHLTDataDeflaterHuffman.cxx:117
 AliHLTDataDeflaterHuffman.cxx:118
 AliHLTDataDeflaterHuffman.cxx:119
 AliHLTDataDeflaterHuffman.cxx:120
 AliHLTDataDeflaterHuffman.cxx:121
 AliHLTDataDeflaterHuffman.cxx:122
 AliHLTDataDeflaterHuffman.cxx:123
 AliHLTDataDeflaterHuffman.cxx:124
 AliHLTDataDeflaterHuffman.cxx:125
 AliHLTDataDeflaterHuffman.cxx:126
 AliHLTDataDeflaterHuffman.cxx:127
 AliHLTDataDeflaterHuffman.cxx:128
 AliHLTDataDeflaterHuffman.cxx:129
 AliHLTDataDeflaterHuffman.cxx:130
 AliHLTDataDeflaterHuffman.cxx:131
 AliHLTDataDeflaterHuffman.cxx:132
 AliHLTDataDeflaterHuffman.cxx:133
 AliHLTDataDeflaterHuffman.cxx:134
 AliHLTDataDeflaterHuffman.cxx:135
 AliHLTDataDeflaterHuffman.cxx:136
 AliHLTDataDeflaterHuffman.cxx:137
 AliHLTDataDeflaterHuffman.cxx:138
 AliHLTDataDeflaterHuffman.cxx:139
 AliHLTDataDeflaterHuffman.cxx:140
 AliHLTDataDeflaterHuffman.cxx:141
 AliHLTDataDeflaterHuffman.cxx:142
 AliHLTDataDeflaterHuffman.cxx:143
 AliHLTDataDeflaterHuffman.cxx:144
 AliHLTDataDeflaterHuffman.cxx:145
 AliHLTDataDeflaterHuffman.cxx:146
 AliHLTDataDeflaterHuffman.cxx:147
 AliHLTDataDeflaterHuffman.cxx:148
 AliHLTDataDeflaterHuffman.cxx:149
 AliHLTDataDeflaterHuffman.cxx:150
 AliHLTDataDeflaterHuffman.cxx:151
 AliHLTDataDeflaterHuffman.cxx:152
 AliHLTDataDeflaterHuffman.cxx:153
 AliHLTDataDeflaterHuffman.cxx:154
 AliHLTDataDeflaterHuffman.cxx:155
 AliHLTDataDeflaterHuffman.cxx:156
 AliHLTDataDeflaterHuffman.cxx:157
 AliHLTDataDeflaterHuffman.cxx:158
 AliHLTDataDeflaterHuffman.cxx:159
 AliHLTDataDeflaterHuffman.cxx:160
 AliHLTDataDeflaterHuffman.cxx:161
 AliHLTDataDeflaterHuffman.cxx:162
 AliHLTDataDeflaterHuffman.cxx:163
 AliHLTDataDeflaterHuffman.cxx:164
 AliHLTDataDeflaterHuffman.cxx:165
 AliHLTDataDeflaterHuffman.cxx:166
 AliHLTDataDeflaterHuffman.cxx:167
 AliHLTDataDeflaterHuffman.cxx:168
 AliHLTDataDeflaterHuffman.cxx:169
 AliHLTDataDeflaterHuffman.cxx:170
 AliHLTDataDeflaterHuffman.cxx:171
 AliHLTDataDeflaterHuffman.cxx:172
 AliHLTDataDeflaterHuffman.cxx:173
 AliHLTDataDeflaterHuffman.cxx:174
 AliHLTDataDeflaterHuffman.cxx:175
 AliHLTDataDeflaterHuffman.cxx:176
 AliHLTDataDeflaterHuffman.cxx:177
 AliHLTDataDeflaterHuffman.cxx:178
 AliHLTDataDeflaterHuffman.cxx:179
 AliHLTDataDeflaterHuffman.cxx:180
 AliHLTDataDeflaterHuffman.cxx:181
 AliHLTDataDeflaterHuffman.cxx:182
 AliHLTDataDeflaterHuffman.cxx:183
 AliHLTDataDeflaterHuffman.cxx:184
 AliHLTDataDeflaterHuffman.cxx:185
 AliHLTDataDeflaterHuffman.cxx:186
 AliHLTDataDeflaterHuffman.cxx:187
 AliHLTDataDeflaterHuffman.cxx:188
 AliHLTDataDeflaterHuffman.cxx:189
 AliHLTDataDeflaterHuffman.cxx:190
 AliHLTDataDeflaterHuffman.cxx:191
 AliHLTDataDeflaterHuffman.cxx:192
 AliHLTDataDeflaterHuffman.cxx:193
 AliHLTDataDeflaterHuffman.cxx:194
 AliHLTDataDeflaterHuffman.cxx:195
 AliHLTDataDeflaterHuffman.cxx:196
 AliHLTDataDeflaterHuffman.cxx:197
 AliHLTDataDeflaterHuffman.cxx:198
 AliHLTDataDeflaterHuffman.cxx:199
 AliHLTDataDeflaterHuffman.cxx:200
 AliHLTDataDeflaterHuffman.cxx:201
 AliHLTDataDeflaterHuffman.cxx:202
 AliHLTDataDeflaterHuffman.cxx:203
 AliHLTDataDeflaterHuffman.cxx:204
 AliHLTDataDeflaterHuffman.cxx:205
 AliHLTDataDeflaterHuffman.cxx:206
 AliHLTDataDeflaterHuffman.cxx:207
 AliHLTDataDeflaterHuffman.cxx:208
 AliHLTDataDeflaterHuffman.cxx:209
 AliHLTDataDeflaterHuffman.cxx:210
 AliHLTDataDeflaterHuffman.cxx:211
 AliHLTDataDeflaterHuffman.cxx:212
 AliHLTDataDeflaterHuffman.cxx:213
 AliHLTDataDeflaterHuffman.cxx:214
 AliHLTDataDeflaterHuffman.cxx:215
 AliHLTDataDeflaterHuffman.cxx:216
 AliHLTDataDeflaterHuffman.cxx:217
 AliHLTDataDeflaterHuffman.cxx:218
 AliHLTDataDeflaterHuffman.cxx:219
 AliHLTDataDeflaterHuffman.cxx:220
 AliHLTDataDeflaterHuffman.cxx:221
 AliHLTDataDeflaterHuffman.cxx:222
 AliHLTDataDeflaterHuffman.cxx:223
 AliHLTDataDeflaterHuffman.cxx:224
 AliHLTDataDeflaterHuffman.cxx:225
 AliHLTDataDeflaterHuffman.cxx:226
 AliHLTDataDeflaterHuffman.cxx:227
 AliHLTDataDeflaterHuffman.cxx:228
 AliHLTDataDeflaterHuffman.cxx:229
 AliHLTDataDeflaterHuffman.cxx:230
 AliHLTDataDeflaterHuffman.cxx:231
 AliHLTDataDeflaterHuffman.cxx:232
 AliHLTDataDeflaterHuffman.cxx:233
 AliHLTDataDeflaterHuffman.cxx:234
 AliHLTDataDeflaterHuffman.cxx:235
 AliHLTDataDeflaterHuffman.cxx:236
 AliHLTDataDeflaterHuffman.cxx:237
 AliHLTDataDeflaterHuffman.cxx:238
 AliHLTDataDeflaterHuffman.cxx:239
 AliHLTDataDeflaterHuffman.cxx:240
 AliHLTDataDeflaterHuffman.cxx:241
 AliHLTDataDeflaterHuffman.cxx:242
 AliHLTDataDeflaterHuffman.cxx:243
 AliHLTDataDeflaterHuffman.cxx:244
 AliHLTDataDeflaterHuffman.cxx:245
 AliHLTDataDeflaterHuffman.cxx:246
 AliHLTDataDeflaterHuffman.cxx:247
 AliHLTDataDeflaterHuffman.cxx:248
 AliHLTDataDeflaterHuffman.cxx:249
 AliHLTDataDeflaterHuffman.cxx:250
 AliHLTDataDeflaterHuffman.cxx:251
 AliHLTDataDeflaterHuffman.cxx:252
 AliHLTDataDeflaterHuffman.cxx:253
 AliHLTDataDeflaterHuffman.cxx:254
 AliHLTDataDeflaterHuffman.cxx:255
 AliHLTDataDeflaterHuffman.cxx:256
 AliHLTDataDeflaterHuffman.cxx:257
 AliHLTDataDeflaterHuffman.cxx:258
 AliHLTDataDeflaterHuffman.cxx:259
 AliHLTDataDeflaterHuffman.cxx:260
 AliHLTDataDeflaterHuffman.cxx:261
 AliHLTDataDeflaterHuffman.cxx:262
 AliHLTDataDeflaterHuffman.cxx:263
 AliHLTDataDeflaterHuffman.cxx:264
 AliHLTDataDeflaterHuffman.cxx:265
 AliHLTDataDeflaterHuffman.cxx:266
 AliHLTDataDeflaterHuffman.cxx:267
 AliHLTDataDeflaterHuffman.cxx:268
 AliHLTDataDeflaterHuffman.cxx:269
 AliHLTDataDeflaterHuffman.cxx:270
 AliHLTDataDeflaterHuffman.cxx:271
 AliHLTDataDeflaterHuffman.cxx:272
 AliHLTDataDeflaterHuffman.cxx:273
 AliHLTDataDeflaterHuffman.cxx:274
 AliHLTDataDeflaterHuffman.cxx:275
 AliHLTDataDeflaterHuffman.cxx:276
 AliHLTDataDeflaterHuffman.cxx:277
 AliHLTDataDeflaterHuffman.cxx:278
 AliHLTDataDeflaterHuffman.cxx:279
 AliHLTDataDeflaterHuffman.cxx:280
 AliHLTDataDeflaterHuffman.cxx:281
 AliHLTDataDeflaterHuffman.cxx:282
 AliHLTDataDeflaterHuffman.cxx:283
 AliHLTDataDeflaterHuffman.cxx:284
 AliHLTDataDeflaterHuffman.cxx:285
 AliHLTDataDeflaterHuffman.cxx:286
 AliHLTDataDeflaterHuffman.cxx:287
 AliHLTDataDeflaterHuffman.cxx:288
 AliHLTDataDeflaterHuffman.cxx:289
 AliHLTDataDeflaterHuffman.cxx:290
 AliHLTDataDeflaterHuffman.cxx:291
 AliHLTDataDeflaterHuffman.cxx:292
 AliHLTDataDeflaterHuffman.cxx:293
 AliHLTDataDeflaterHuffman.cxx:294
 AliHLTDataDeflaterHuffman.cxx:295
 AliHLTDataDeflaterHuffman.cxx:296
 AliHLTDataDeflaterHuffman.cxx:297
 AliHLTDataDeflaterHuffman.cxx:298
 AliHLTDataDeflaterHuffman.cxx:299
 AliHLTDataDeflaterHuffman.cxx:300
 AliHLTDataDeflaterHuffman.cxx:301
 AliHLTDataDeflaterHuffman.cxx:302
 AliHLTDataDeflaterHuffman.cxx:303
 AliHLTDataDeflaterHuffman.cxx:304
 AliHLTDataDeflaterHuffman.cxx:305
 AliHLTDataDeflaterHuffman.cxx:306
 AliHLTDataDeflaterHuffman.cxx:307
 AliHLTDataDeflaterHuffman.cxx:308
 AliHLTDataDeflaterHuffman.cxx:309
 AliHLTDataDeflaterHuffman.cxx:310
 AliHLTDataDeflaterHuffman.cxx:311
 AliHLTDataDeflaterHuffman.cxx:312