📄 winzip.h
字号:
#pragma once
#include "afx.h"
//#include"WinRARDlg.h"
#ifndef WINZIP
#define WINZIP
class CStake
{
byte member;
int MaxSize;
public:
int size;
CStake(){MaxSize=8;member=0;size=0;}
int Lenth(){return size;}
void Add(int mem){member=member<<1|mem;size++;}
void Delete(int mem){member>>=1;size--;}
bool Empty(){return (size==0?1:0);}
bool Full(){return (size==MaxSize)?1:0;}
byte Copy();
//~CStake(){size=0;member=0;MaxSize=8;}
};
class Huffman
{
public:
Huffman(){count=INT_MAX;code=0;left=NULL;right=NULL;}
Huffman(int t,int ch)
{
count=t;
left=NULL;
right=NULL;
code=ch;
}
Huffman(int t,int ch,Huffman* l,Huffman* r)
{
count=t;
left=l;
right=r;
code=ch;
}
~Huffman(){left=NULL;right=NULL;count=0;code=0;}
Huffman* left;
Huffman* right;
int count;
int code;
operator int() const {return count;}
};
class CWinZip
{
public:
CWinZip(void);
bool GetPath(const bool& in,CString& path,CString&n);
void GetProgCtrl(CProgressCtrl *ProgCtrl){m_ProgCtrl=ProgCtrl;}
bool Zip();
bool ReZip();
public:
~CWinZip(void);
private:
Huffman *x;
CString m_Path;
CString m_dePath;
private:
//CFile *m_file;
CStake *sk;
bool CountWeight(const UINT& size,unsigned char*pbuf);
unsigned char* m_CountedCode;//频率不为零的元素
int* m_AllCode; //256大小的ascii编码在频率不为零的元素的数组中的位置
int* m_CountedMem;//256大小的统计频率的数组
int* m_huffmanCodeWide;//频率不为零的元素的huffamn编码的长度
int* m_MemSign;//被编码元素的编码数组标号
//建huffman树时一个字符是否是一个字节
byte * m_AllCodeArrary;//huffman编码数组
Huffman * Min(Huffman *huff,int num,bool *reached,bool& Empty);
void Insert(const Huffman &mem,Huffman *huff,int num,bool*reached);
bool PreOrder(Huffman *root,int& CodeNo,int& ArrayNo,const int & huffArraysize);
int Translate(unsigned char* from,byte*to,int& SourceSize,unsigned long & ArraySize);
CProgressCtrl *m_ProgCtrl;
bool BuildTree(int& CodeSize,int& AsciiSize,Huffman *&x);
int reversion(byte* Code,unsigned char*& Ascii,unsigned long & num,UINT size,Huffman *&temp);
int EndSigned;
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -