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

📄 mtf8.h

📁 由7-zip提供的压缩、解压缩程序
💻 H
字号:
// Mtf8.h#ifndef __MTF8_H#define __MTF8_H#include "Common/Types.h"namespace NCompress {class CMtf8Encoder{public:  Byte Buffer[256];  int FindAndMove(Byte v)  {    int pos;    for (pos = 0; Buffer[pos] != v; pos++);    int resPos = pos;    for (; pos >= 8; pos -= 8)    {      Buffer[pos] = Buffer[pos - 1];      Buffer[pos - 1] = Buffer[pos - 2];      Buffer[pos - 2] = Buffer[pos - 3];      Buffer[pos - 3] = Buffer[pos - 4];      Buffer[pos - 4] = Buffer[pos - 5];      Buffer[pos - 5] = Buffer[pos - 6];      Buffer[pos - 6] = Buffer[pos - 7];      Buffer[pos - 7] = Buffer[pos - 8];    }    for (; pos > 0; pos--)      Buffer[pos] = Buffer[pos - 1];    Buffer[0] = v;    return resPos;  }};class CMtf8Decoder{public:  Byte Buffer[256];  void Init(int size) {};  Byte GetHead() const { return Buffer[0]; }  Byte GetAndMove(int pos)  {    Byte res = Buffer[pos];    for (; pos >= 8; pos -= 8)    {      Buffer[pos] = Buffer[pos - 1];      Buffer[pos - 1] = Buffer[pos - 2];      Buffer[pos - 2] = Buffer[pos - 3];      Buffer[pos - 3] = Buffer[pos - 4];      Buffer[pos - 4] = Buffer[pos - 5];      Buffer[pos - 5] = Buffer[pos - 6];      Buffer[pos - 6] = Buffer[pos - 7];      Buffer[pos - 7] = Buffer[pos - 8];    }    for (; pos > 0; pos--)      Buffer[pos] = Buffer[pos - 1];    Buffer[0] = res;    return res;  }};/*const int kSmallSize = 64;class CMtf8Decoder{  Byte SmallBuffer[kSmallSize];  int SmallSize;  Byte Counts[16];  int Size;public:  Byte Buffer[256];  Byte GetHead() const   {     if (SmallSize > 0)      return SmallBuffer[kSmallSize - SmallSize];    return Buffer[0];  }  void Init(int size)   {     Size = size;     SmallSize = 0;     for (int i = 0; i < 16; i++)    {      Counts[i] = ((size >= 16) ? 16 : size);      size -= Counts[i];    }  }  Byte GetAndMove(int pos)  {    if (pos < SmallSize)    {      Byte *p = SmallBuffer + kSmallSize - SmallSize;      Byte res = p[pos];      for (; pos > 0; pos--)        p[pos] = p[pos - 1];      SmallBuffer[kSmallSize - SmallSize] = res;      return res;    }    if (SmallSize == kSmallSize)    {      int i = Size - 1;      int g = 16;      do      {        g--;        int offset = (g << 4);        for (int t = Counts[g] - 1; t >= 0; t--, i--)          Buffer[i] = Buffer[offset + t];      }      while(g != 0);            for (i = kSmallSize - 1; i >= 0; i--)        Buffer[i] = SmallBuffer[i];      Init(Size);    }    pos -= SmallSize;    int g;    for (g = 0; pos >= Counts[g]; g++)      pos -= Counts[g];    int offset = (g << 4);    Byte res = Buffer[offset + pos];    for (pos; pos < 16 - 1; pos++)      Buffer[offset + pos] = Buffer[offset + pos + 1];        SmallSize++;    SmallBuffer[kSmallSize - SmallSize] = res;    Counts[g]--;    return res;  }};*/}#endif

⌨️ 快捷键说明

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