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; }
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); }
public static Result Run(Window parent) { var find = new FindBinaryDialog { Owner = parent }; if (!find.ShowDialog()) return null; return find.result; }