?? huffmancoder.h.bak
字號:
// HuffmanCoder.h: interface for the HuffmanCoder class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_HUFFMANCODER_H__863AA455_C764_4D14_ACFE_B38020E94836__INCLUDED_)
#define AFX_HUFFMANCODER_H__863AA455_C764_4D14_ACFE_B38020E94836__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "ProgressListener.h"
#include "WinLog.h"
#include <list>
#include "SLinkTree.h"
#define HUFFY_LITTLEENDIAN 1
class HuffmanCoder
{
public:
HuffmanCoder();
virtual ~HuffmanCoder();
void SetUIHelpers(ProgressListener *NewListener, WinLog *NewLogTarget);
void SetInFile(const char *NewInFN);
void SetOutFile(const char *NewOutFN);
unsigned int Encode();
unsigned int Decode();
static unsigned int ThreadEncoder(void *CoderPtr);
static unsigned int ThreadDecoder(void *CoderPtr);
private:
ProgressListener *MyListener;
WinLog *MyLog;
char *InFileName,*OutFileName;
struct HNode
{
unsigned int Weight;
unsigned char Symbol;
};
struct HTEntry
{
unsigned int Code;
unsigned char CodeLen;
HTEntry() { Code=0; CodeLen=0; }
};
struct TTEntry
{
unsigned char OutSymbolCount;
unsigned char *OutSymbolA;
unsigned char NextNodeName;
TTEntry() { OutSymbolCount=0; OutSymbolA=NULL; }
};
//Decoder helpers
void ReadHTable(FILE *SourceFile, HTEntry *OutTable);
void WriteDecodedFile(FILE *InFile, FILE *OutFile, TTEntry *TransTable);
unsigned char BuildHuffTree(HTEntry *SourceTable, HNode *TargetRoot);
unsigned char BuildHuffTreeInternal(unsigned char CurrName, unsigned char CurrSymbol, HTEntry *SourceEntry, HNode *TargetNode);
void BuildTTable(HNode *SourceNode, unsigned char NameCount, TTEntry *OutTable);
void FillTTEntry(HNode *RootNode, HNode *StartNode, unsigned char EncodedByte, TTEntry *OutEntry);
HNode * LookupInternalNode(HNode *RootNode, unsigned char NodeName);
//Encoder helpers
void WriteHTable(FILE *OutFile, HTEntry *CodeTable);
void WriteCodedFile(FILE *InFile, unsigned int StreamLen, FILE *OutFile, HTEntry *CodeTable);
void PrintTableStats(HTEntry *SourceTable, HNode *FreqA, WinLog *OutLog);
void FillFreqA(FILE *InFile, unsigned int *FreqA);
SLinkTree<HNode>::iterator BuildHuffTree(unsigned int *FreqA, SLinkTree<HNode> **OutTree);
/*OutTable is a full-length(MaxSymbolCount), direct
access lookup table.*/
void BuildHuffTable(HNode *HTreeRoot, HTEntry *OutTable);
void BuildTableInternal(HNode *HTreeRoot, unsigned int CurrCode, unsigned char CurrCodeLen, HTEntry *OutTable);
void OrderedInsert(std::list<HNode *> &TargetList, HNode *NewNode);
//General helpers
FILE *Loggedfopen(const char *FName, const char *Mode);
};
#endif // !defined(AFX_HUFFMANCODER_H__863AA455_C764_4D14_ACFE_B38020E94836__INCLUDED_)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -