LCOV - code coverage report
Current view: top level - HLT/BASE - AliHLTDataDeflaterSimple.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1 22 4.5 %
Date: 2016-06-14 17:26:59 Functions: 1 21 4.8 %

          Line data    Source code
       1             : //-*- Mode: C++ -*-
       2             : // $Id$
       3             : #ifndef ALIHLTDATADEFLATERSIMPLE_H
       4             : #define ALIHLTDATADEFLATERSIMPLE_H
       5             : //* This file is property of and copyright by the ALICE HLT Project        * 
       6             : //* ALICE Experiment at CERN, All rights reserved.                         *
       7             : //* See cxx source for full Copyright notice                               *
       8             : 
       9             : /// @file   AliHLTDataDeflaterSimple.h
      10             : /// @author Matthias Richter
      11             : /// @date   2011-08-10
      12             : /// @brief  Data deflater class storing only necessary bits
      13             : /// @note   Code original from AliHLTTPCCompModelDeflater
      14             : 
      15             : #include "AliHLTDataDeflater.h"
      16             : #include <vector>
      17             : #include <string>
      18             : 
      19             : /**
      20             :  * @class AliHLTDataDeflaterSimple
      21             :  * Simple deflater implementation storing frequent values below a
      22             :  * maximum value with a reduced bit number and others with the full
      23             :  * number of bits. The reduced value is indicated by a preceeding '0'
      24             :  * and the full bit by '1'. The algorithm can be applied to data with an
      25             :  * occurrence distribution peaking close to zero and having less frequent
      26             :  * occurrence at higher values.
      27             :  *
      28             :  * @ingroup alihlt_base
      29             :  */
      30             : class AliHLTDataDeflaterSimple : public AliHLTDataDeflater
      31             : {
      32             : public:
      33             :   /// standard constructor
      34             :   AliHLTDataDeflaterSimple();
      35             :   /// destructor
      36             :   ~AliHLTDataDeflaterSimple();
      37             : 
      38             :   /// @class AliHLTDataDeflaterParameter 
      39             :   //  definition of parameters
      40             :   class AliHLTDataDeflaterParameter {
      41             :   public:
      42             :     AliHLTDataDeflaterParameter()
      43             :       : fName(), fFullBitLength(0), fReducedBitLength(0)
      44             :       , fMax(0), fMaxReduced(0)
      45             :       , fMask(0), fMaskReduced(0)
      46             :       , fValueCount(0), fBitCount(0) {}
      47             : 
      48             :     AliHLTDataDeflaterParameter(const char* name, int length, int reduced)
      49           0 :       : fName(name), fFullBitLength(length), fReducedBitLength(reduced)
      50           0 :       , fMax((((AliHLTUInt64_t)0x1)<<length)-1), fMaxReduced((((AliHLTUInt64_t)0x1)<<reduced)-1)
      51           0 :       , fMask(fMax), fMaskReduced(fMaxReduced) 
      52           0 :       , fValueCount(0), fBitCount(0) {}
      53             : 
      54             :     AliHLTDataDeflaterParameter(const AliHLTDataDeflaterParameter& src)
      55           0 :       : fName(src.fName), fFullBitLength(src.fFullBitLength), fReducedBitLength(src.fReducedBitLength)
      56           0 :       , fMax(src.fMax), fMaxReduced(src.fMaxReduced)
      57           0 :       , fMask(src.fMask), fMaskReduced(src.fMaskReduced) 
      58           0 :       , fValueCount(0), fBitCount(0) {}
      59             : 
      60             :     AliHLTDataDeflaterParameter& operator=(const AliHLTDataDeflaterParameter& src) {
      61             :       if (this==&src) return *this;
      62             :       fName=src.fName; fFullBitLength=src.fFullBitLength; fReducedBitLength=src.fReducedBitLength;
      63             :       fMax=src.fMax; fMaxReduced=src.fMaxReduced;
      64             :       fMask=src.fMask; fMaskReduced=src.fMaskReduced;
      65             :       fValueCount=src.fValueCount; fBitCount=src.fBitCount;
      66             :       return *this;
      67             :     }
      68             : 
      69           0 :     ~AliHLTDataDeflaterParameter() {}
      70             : 
      71             :     const char* GetName() const {return fName.c_str();}
      72             :     AliHLTUInt64_t Value(const AliHLTUInt64_t& value) const {
      73           0 :       return value>fMax?fMax:value;
      74             :     }
      75             :     AliHLTUInt32_t ValueLength(const AliHLTUInt64_t& value) const{
      76           0 :       return value>fMaxReduced?fFullBitLength:fReducedBitLength;
      77             :     }
      78             :     AliHLTUInt32_t SwitchBit(const AliHLTUInt64_t& value) const {
      79           0 :       return value>fMaxReduced;
      80             :     }
      81           0 :     const int& GetBitLength() const {return fFullBitLength;}
      82           0 :     const int& GetReducedBitLength() const {return fReducedBitLength;}
      83             :     const AliHLTUInt64_t& GetMax() const {return fMax;}
      84             :     const AliHLTUInt64_t& GetMaxReduced() const {return fMaxReduced;}
      85             :     const AliHLTUInt64_t& GetMask() const {return fMask;}
      86             :     const AliHLTUInt64_t& GetReducedMask() const {return fMaskReduced;}
      87             : 
      88           0 :     const AliHLTUInt32_t& GetBitCount() const {return fBitCount;}
      89           0 :     const AliHLTUInt32_t& GetValueCount() const {return fValueCount;}
      90             :     void IncrementBitCount(const AliHLTUInt64_t& value) {
      91           0 :       fBitCount+=(value>fMaxReduced?fFullBitLength:fReducedBitLength)+1;
      92           0 :       fValueCount++;
      93           0 :     }
      94           0 :     void ResetBitCount() {fValueCount=0; fBitCount=0;}
      95             :     void Print(const char* option="") const;
      96             : 
      97             :   private:
      98             :     std::string fName; //!
      99             :     int fFullBitLength; //!
     100             :     int fReducedBitLength; //!
     101             :     AliHLTUInt64_t fMax; //!
     102             :     AliHLTUInt64_t fMaxReduced; //!
     103             :     AliHLTUInt64_t fMask; //!
     104             :     AliHLTUInt64_t fMaskReduced; //!
     105             :     AliHLTUInt32_t fValueCount; //!
     106             :     AliHLTUInt32_t fBitCount; //!
     107             :   };
     108             : 
     109             :   /// add a parameter definition to the configuration, return reference id
     110             :   int AddParameterDefinition(const char* name, int bitLength, int reducedBitLength);
     111             : 
     112             :   /// inherited from AliHLTDataDeflater: write bit pattern according to configuration
     113             :   virtual bool OutputParameterBits( int parameterId, AliHLTUInt64_t const & value );
     114             : 
     115             :   /// clear the object and reset pointer references
     116             :   virtual void Clear(Option_t * /*option*/ ="");
     117             : 
     118             :   /// print info
     119             :   virtual void Print(Option_t *option="") const;
     120             : 
     121             :   /// print info
     122             :   virtual void Print(ostream& out, Option_t *option="") const;
     123             : 
     124             :   /// DataDeflaterSimple has deflater version 1
     125           0 :   virtual int GetDeflaterVersion() const {return 1;}
     126             : 
     127             :  protected:
     128             :  private:
     129             :   /// copy constructor prohibited
     130             :   AliHLTDataDeflaterSimple(const AliHLTDataDeflaterSimple&);
     131             :   /// assignment operator prohibited
     132             :   AliHLTDataDeflaterSimple& operator=(const AliHLTDataDeflaterSimple&);
     133             : 
     134             :   vector<AliHLTDataDeflaterParameter> fParameterDefinitions; //!
     135             : 
     136         126 :   ClassDef(AliHLTDataDeflaterSimple, 0)
     137             : };
     138             : 
     139             : ostream& operator<<(ostream &out, const AliHLTDataDeflaterSimple& me);
     140             : 
     141             : #endif

Generated by: LCOV version 1.11