本文整理汇总了C#中Index.remove方法的典型用法代码示例。如果您正苦于以下问题:C# Index.remove方法的具体用法?C# Index.remove怎么用?C# Index.remove使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Index
的用法示例。
在下文中一共展示了Index.remove方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Compress
/*
辞書圧縮。LZ77。
圧縮領域は2バイトで、位置と長さに分配してある。
1バイト目 : 0x80+サイズ+位置の上位ビット、
2バイト目 : 位置の下位8bit。
非圧縮領域は、非圧縮領域サイズ、非圧縮文字列(1から128)文字
圧縮領域は、位置、長さ共に-3した数を格納してある。
展開時は取り出してから3を足す。
非圧縮領域は長さを-1してあり、取り出す時には+1する。
*/
static void Compress(
byte[] oData,
out int oSize,
byte[] iData)
{
int iSize = iData.Length;
int oPos = 0; //書き込み側の書き込む位置
int i = 0;
int unmatchBegin = 0; //非一致領域の開始位置
Index index = new Index();
while (i < iSize)
{
//辞書から検索
int matchLength = 0;
int matchPos = 0;
//辞書の先頭から探していく。jはiを越えない。
//最大検索長
int maxL = min(MAX_LENGTH, iSize - i); //ファイル末尾より後は検索できないので、maxLを制限する。
//検索開始 一文字目を探す
int idx = index.getFirst(iData[i]);
while (!index.isEnd(idx))
{
Node n = index.getNode(idx);
int p = n.mPos;
//一致長を調べる
int l = 1; //1文字一致状態から始める。
while (l < maxL)
{
//次の文字がマッチしなければ終わる
if (iData[p + l] != iData[i + l])
{
break;
}
++l; //1文字成長
}
//前より長く一致したなら記録。いろんなマッチの仕方があるはずだから、最大のものを記録する。
if (matchLength < l)
{
matchPos = p;
matchLength = l;
if (matchLength == maxL)
{ //一致長が最大になったらそこで終わる。
break;
}
}
idx = n.mNext;
}
//さて、一致が3文字以上あれば圧縮モードで記録する。
if (matchLength >= 3)
{
//辞書更新。消して、足す。進んだ文字数だけ削除して、進んだ文字数だけ足す。
for (int j = 0; j < matchLength; ++j)
{
int delPos = i + j - DIC_SIZE;
if (delPos >= 0)
{
index.remove(iData[delPos], delPos);
}
index.add(iData[i + j], i + j);
}
//非圧縮ヘッダ書き込み
if (unmatchBegin < i)
{
oData[oPos] = (byte)(i - unmatchBegin - 1); //最低1なので1引いて保存
++oPos;
for (int j = unmatchBegin; j < i; ++j)
{
oData[oPos] = iData[j];
++oPos;
}
}
//圧縮部分を記録
int wl = matchLength - 3; //3引いて格納
int wp = i - matchPos - 1; //1引いて格納
int tmp = 0x80 | wl; //長さに圧縮フラグを追加
tmp |= (wp & DIC_MASK_HIGH) >> (8 - LENGTH_BITS); //maskと&し、これをサイズに使っているビットの分だけずらす。
oData[oPos + 0] = (byte)(tmp);
oData[oPos + 1] = (byte)(wp & 0xff);
oPos += 2;
i += matchLength;
unmatchBegin = i; //非一致位置は次から
}
else
{ //マッチしなかった。書き込みはまとめてやるので、今は進める。
//辞書更新。消して、足す。
//.........这里部分代码省略.........