⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unpack.hpp

📁 7Zip软件实现: 七种编码格式的压缩与解压缩功能。
💻 HPP
字号:
#ifndef _RAR_UNPACK_#define _RAR_UNPACK_enum BLOCK_TYPES {BLOCK_LZ,BLOCK_PPM};struct Decode{  unsigned int MaxNum;  unsigned int DecodeLen[16];  unsigned int DecodePos[16];  unsigned int DecodeNum[2];};struct LitDecode{  unsigned int MaxNum;  unsigned int DecodeLen[16];  unsigned int DecodePos[16];  unsigned int DecodeNum[NC];};struct DistDecode{  unsigned int MaxNum;  unsigned int DecodeLen[16];  unsigned int DecodePos[16];  unsigned int DecodeNum[DC];};struct LowDistDecode{  unsigned int MaxNum;  unsigned int DecodeLen[16];  unsigned int DecodePos[16];  unsigned int DecodeNum[LDC];};struct RepDecode{  unsigned int MaxNum;  unsigned int DecodeLen[16];  unsigned int DecodePos[16];  unsigned int DecodeNum[RC];};struct BitDecode{  unsigned int MaxNum;  unsigned int DecodeLen[16];  unsigned int DecodePos[16];  unsigned int DecodeNum[BC];};struct UnpackFilter{  unsigned int BlockStart;  unsigned int BlockLength;  unsigned int ExecCount;  bool NextWindow;  VM_PreparedProgram Prg;};/***************************** Unpack v 2.0 *********************************/struct MultDecode{  unsigned int MaxNum;  unsigned int DecodeLen[16];  unsigned int DecodePos[16];  unsigned int DecodeNum[MC20];};struct AudioVariables{  int K1,K2,K3,K4,K5;  int D1,D2,D3,D4;  int LastDelta;  unsigned int Dif[11];  unsigned int ByteCount;  int LastChar;};/***************************** Unpack v 2.0 *********************************/class Unpack:private BitInput{  private:    friend class Pack;    void Unpack29(bool Solid);    bool UnpReadBuf();    void UnpWriteBuf();    void ExecuteCode(VM_PreparedProgram *Prg);    void UnpWriteArea(unsigned int StartPtr,unsigned int EndPtr);    void UnpWriteData(byte *Data,int Size);    bool ReadTables();    void MakeDecodeTables(unsigned char *LenTab,struct Decode *Dec,int Size);    int DecodeNumber(struct Decode *Dec);    void CopyString();    inline void InsertOldDist(unsigned int Distance);    inline void InsertLastMatch(unsigned int Length,unsigned int Distance);    void UnpInitData(int Solid);    void CopyString(unsigned int Length,unsigned int Distance);    bool ReadEndOfBlock();    bool ReadVMCode();    bool ReadVMCodePPM();    bool AddVMCode(unsigned int FirstByte,byte *Code,int CodeSize);    void InitFilters();    ComprDataIO *UnpIO;    ModelPPM PPM;    int PPMEscChar;    RarVM VM;    Array<UnpackFilter*> Filters;    Array<UnpackFilter*> PrgStack;    Array<int> OldFilterLengths;    int LastFilter;    bool TablesRead;    struct LitDecode LD;    struct DistDecode DD;    struct LowDistDecode LDD;    struct RepDecode RD;    struct BitDecode BD;    unsigned int OldDist[4],OldDistPtr;    unsigned int LastDist,LastLength;    unsigned int UnpPtr,WrPtr;        int ReadTop;    int ReadBorder;    unsigned char UnpOldTable[HUFF_TABLE_SIZE];    int UnpBlockType;    byte *Window;    bool ExternalWindow;    Int64 DestUnpSize;    bool Suspended;    bool UnpAllBuf;    bool UnpSomeRead;    Int64 WrittenFileSize;    bool FileExtracted;    bool PPMError;    int PrevLowDist,LowDistRepCount;/***************************** Unpack v 1.5 *********************************/    void Unpack15(bool Solid);    void ShortLZ();    void LongLZ();    void HuffDecode();    void GetFlagsBuf();    void OldUnpInitData(int Solid);    void InitHuff();    void CorrHuff(unsigned int *CharSet,unsigned int *NumToPlace);    void OldCopyString(unsigned int Distance,unsigned int Length);    unsigned int DecodeNum(int Num,unsigned int StartPos,      unsigned int *DecTab,unsigned int *PosTab);    void OldUnpWriteBuf();    unsigned int ChSet[256],ChSetA[256],ChSetB[256],ChSetC[256];    unsigned int Place[256],PlaceA[256],PlaceB[256],PlaceC[256];    unsigned int NToPl[256],NToPlB[256],NToPlC[256];    unsigned int FlagBuf,AvrPlc,AvrPlcB,AvrLn1,AvrLn2,AvrLn3;    int Buf60,NumHuf,StMode,LCount,FlagsCnt;    unsigned int Nhfb,Nlzb,MaxDist3;/***************************** Unpack v 1.5 *********************************//***************************** Unpack v 2.0 *********************************/    void Unpack20(bool Solid);    struct MultDecode MD[4];    unsigned char UnpOldTable20[MC20*4];    int UnpAudioBlock,UnpChannels,UnpCurChannel,UnpChannelDelta;    void CopyString20(unsigned int Length,unsigned int Distance);    bool ReadTables20();    void UnpInitData20(int Solid);    void ReadLastTables();    byte DecodeAudio(int Delta);    struct AudioVariables AudV[4];/***************************** Unpack v 2.0 *********************************/  public:    Unpack(ComprDataIO *DataIO);    ~Unpack();    void Init(byte *Window=NULL);    void DoUnpack(int Method,bool Solid);    bool IsFileExtracted() {return(FileExtracted);}    void SetDestSize(Int64 DestSize) {DestUnpSize=DestSize;FileExtracted=false;}    void SetSuspended(bool Suspended) {Unpack::Suspended=Suspended;}    unsigned int GetChar()    {      if (InAddr>BitInput::MAX_SIZE-30)        UnpReadBuf();      return(InBuf[InAddr++]);    }};#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -