📄 symbolcoding.cs
字号:
using System;
using System.Collections.Generic;
using System.Text;
namespace QiHe.CodeLib.Compress
{
public struct SymbolCode
{
public int Code;
public int Base;
public int Offset;
public int ExtraBits;
}
public class SymbolCoding
{
int StartCode;
int[] BaseValues;
int[] ExtraBits;
Dictionary<int, SymbolCode> SymbolCodes;
public SymbolCoding(int startCode, int[] baseValues, int[] extraBits)
{
StartCode = startCode;
BaseValues = baseValues;
ExtraBits = extraBits;
SymbolCodes = new Dictionary<int, SymbolCode>();
}
public SymbolCode this[int symbol]
{
get
{
if (!SymbolCodes.ContainsKey(symbol))
{
SymbolCodes[symbol] = CreateSymbolCode(symbol);
//TraceTool.Debug.Send(SymbolCodes.Count.ToString());
}
return SymbolCodes[symbol];
}
}
SymbolCode CreateSymbolCode(int symbol)
{
SymbolCode symbolCode = new SymbolCode();
int code = GetCode(symbol);
symbolCode.Base = BaseValues[code];
symbolCode.ExtraBits = ExtraBits[code];
symbolCode.Offset = symbol - symbolCode.Base;
symbolCode.Code = StartCode + code;
return symbolCode;
}
private int GetCode(int symbol)
{
int code = -1;
for (int index = 0; index < BaseValues.Length; index++)
{
if (symbol >= BaseValues[index])
{
code = index;
}
else
{
break;
}
}
if (code == -1)
{
throw new Exception("symbol too small.");
}
else
{
return code;
}
}
public int GetSymbolBase(int code)
{
return BaseValues[code - StartCode];
}
public int GetSymbolExtrabits(int code)
{
return ExtraBits[code - StartCode];
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -