当前位置: 首页>>代码示例>>C#>>正文


C# Index.remove方法代码示例

本文整理汇总了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
				{ //マッチしなかった。書き込みはまとめてやるので、今は進める。
					//辞書更新。消して、足す。
//.........这里部分代码省略.........
开发者ID:OsamaRazaAnsari,项目名称:2DDressUpGame,代码行数:101,代码来源:Compression.cs


注:本文中的Index.remove方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。