Exemplo n.º 1
0
		public virtual bool Find(FindBinaryDialog.Result currentFind, long index, out long start, out long end, bool forward = true)
		{
			start = end = -1;
			if (!forward)
				return false;

			++index;
			if ((index < 0) || (index >= Length))
				return false;

			var min = index;
			var findLen = currentFind.Searcher.MaxLen;

			while (index < Length)
			{
				var nonSparse = GetNonSparse(index);
				if (nonSparse != index)
				{
					index = nonSparse;
					continue;
				}

				index = Math.Max(min, index - findLen - 1);
				var block = Read(index, Math.Min(65536, Length - index));
				var result = currentFind.Searcher.Find(block, 0, block.Length, true);
				if (result.Count != 0)
				{
					start = result[0].Item1 + index;
					end = start + result[0].Item2;
					return true;
				}

				index += block.Length;
			}

			return false;
		}
Exemplo n.º 2
0
		public override bool Find(FindBinaryDialog.Result currentFind, long index, out long start, out long end, bool forward = true)
		{
			using (Suspend())
			using (Open())
				return base.Find(currentFind, index, out start, out end, forward);
		}
Exemplo n.º 3
0
		public static Result Run(Window parent)
		{
			var find = new FindBinaryDialog { Owner = parent };
			if (!find.ShowDialog())
				return null;
			return find.result;
		}