Esempio n. 1
0
		void FindNextCore(OurFindOptions options, HexBufferPoint? startingPosition, bool isIncrementalSearch) {
			CancelFindAsyncSearcher();
			if (startingPosition == null)
				return;

			var searchOptions = new SearchOptions(wpfHexView.BufferLines.BufferSpan, startingPosition.Value, DataKind, SearchString, options, IsBigEndian);
			IAsyncSearcher findAsyncSearcherTmp = null;
			findAsyncSearcherTmp = FindAsync(searchOptions, (result, foundSpan) => {
				if (findAsyncSearcher != findAsyncSearcherTmp)
					return;
				CancelFindAsyncSearcher();
				if (foundSpan != null) {
					try {
						isIncrementalSearchCaretMove = isIncrementalSearch;
						ShowSearchResult(foundSpan.Value);
					}
					finally {
						isIncrementalSearchCaretMove = false;
					}
				}
			});
			findAsyncSearcher = findAsyncSearcherTmp;
		}
Esempio n. 2
0
		HexBufferPoint? GetStartingPosition(OurFindOptions options, bool restart) {
			if (wpfHexView.Selection.IsEmpty)
				return wpfHexView.Caret.Position.Position.ActivePosition.BufferPosition;
			if (restart) {
				if ((options & OurFindOptions.SearchReverse) == 0)
					return wpfHexView.Selection.Start;
				return wpfHexView.Selection.End;
			}
			var validSpan = wpfHexView.BufferLines.BufferSpan;
			if ((options & OurFindOptions.SearchReverse) != 0) {
				if (wpfHexView.Selection.End.Position >= validSpan.Start.Position + 2)
					return wpfHexView.Selection.End - 2;
				if ((options & OurFindOptions.Wrap) != 0)
					return validSpan.End;
				return null;
			}
			if (wpfHexView.Selection.Start < validSpan.End)
				return wpfHexView.Selection.Start + 1;
			if ((options & OurFindOptions.Wrap) != 0)
				return validSpan.Start;
			return null;
		}
Esempio n. 3
0
		static HexFindOptions ToHexFindOptions(OurFindOptions options) {
			var res = HexFindOptions.None;
			if ((options & OurFindOptions.SearchReverse) != 0)
				res |= HexFindOptions.SearchReverse;
			if ((options & OurFindOptions.Wrap) != 0)
				res |= HexFindOptions.Wrap;
			if ((options & OurFindOptions.NoOverlaps) != 0)
				res |= HexFindOptions.NoOverlaps;
			return res;
		}
Esempio n. 4
0
		HexBufferPoint? GetStartingPosition(SearchKind searchKind, OurFindOptions options, bool restart) {
			Debug.Assert(searchKind != SearchKind.None);
			switch (searchKind) {
			case SearchKind.Find:
			case SearchKind.Replace:
				return GetStartingPosition(options, restart);

			case SearchKind.IncrementalSearchBackward:
			case SearchKind.IncrementalSearchForward:
				return incrementalStartPosition;

			default:
				throw new ArgumentOutOfRangeException(nameof(searchKind));
			}
		}
Esempio n. 5
0
			public SearchOptions(HexBufferSpan searchRange, HexBufferPoint startingPosition, HexDataKind dataKind, string searchString, OurFindOptions findOptions, bool isBigEndian) {
				SearchRange = searchRange;
				StartingPosition = startingPosition;
				DataKind = dataKind;
				SearchString = searchString;
				FindOptions = findOptions;
				IsBigEndian = isBigEndian;
			}