Rev 4 | Blame | Compare with Previous | Last modification | View Log | RSS feed
/*****************************************************************************LiteralHuffTree---------------Class for generating/emitting Huffman trees on a byte base.Could be used for adaptive and non-adaptive Huffman tree models.by yodaWWW: y0da.cjb.netE-mail: LordPE@gmx.netYou are allowed to use this class in your own projects if you keep thistrademark.*****************************************************************************/#pragma once#include <windows.h>#include "ByteReader.h"//// constants//#define HT_LEFT 0#define HT_RIGHT 1//// structures//typedef struct _LHT_ITEM{WORD id; // a unique valueBOOL bLinked; // already linked in the tree ?DWORD dwDadId; // 0 == root itemDWORD dwLeftId;DWORD dwRightId;DWORD dwcOccurr;// float probability; // how often the character appears in the input blockDWORD dwSequence; // bit signature for the characterBYTE bySequLen; // length of the bit signature} LHT_ITEM, *PLHT_ITEM;//// LiteralHuffTree class//class LiteralHuffTree{public:LiteralHuffTree(void);~LiteralHuffTree(void);DWORD m_dwOccurr[256];BOOL Generate( PBYTE buff, DWORD cb );BOOL GenerateWithOccurrences();BOOL GenerateAdaptiveModel();DWORD QueryLiteralByBitSequence( PByteReader reader );PLHT_ITEM operator[]( UINT index ) { return &m_tree[index]; };private:LHT_ITEM m_tree[(256 * 2) - 1];UINT m_ucTreeItems;void GetByteOccurrences( PBYTE pby, DWORD cb );void BuildInternalTree();void LinkTreeElements();bool GenerateBitSequences();DWORD GetBitCountForOccurrence();};typedef LiteralHuffTree *PLiteralHuffTree;