public Searcher(SearchTarget target, int count) { if (count < 0) { throw new ArgumentException(); } _target = target; _count = count; _cmp = -1; if (count == 0) { Complete(); return; } _cursor = -1; _upper = count - 1; AdjustCursor(); }
public virtual BTreeNodeSearchResult SearchLeaf(Transaction trans, object key, SearchTarget target) { return SearchLeaf(trans, _keyHandler.PrepareComparison(trans.Context(), key), target ); }
public virtual BTreeNodeSearchResult SearchLeaf(Transaction trans, IPreparedComparison preparedComparison, SearchTarget target) { EnsureActive(trans); BTreeNodeSearchResult result = _root.SearchLeaf(trans, preparedComparison, target ); ConvertCacheEvictedNodesToReadMode(); return result; }
private int Search(int[] values, SearchTarget target) { _searcher = new Searcher(target, values.Length); while (_searcher.Incomplete()) { _searcher.ResultIs(values[_searcher.Cursor()] - SearchFor); } return _searcher.Cursor(); }
private Searcher Search(Transaction trans, IPreparedComparison preparedComparison , ByteArrayBuffer reader, SearchTarget target) { Searcher s = new Searcher(target, _count); if (CanWrite()) { while (s.Incomplete()) { s.ResultIs(CompareInWriteMode(preparedComparison, s.Cursor())); } } else { while (s.Incomplete()) { s.ResultIs(CompareInReadMode(trans, preparedComparison, reader, s.Cursor())); } } return s; }
internal BTreeNodeSearchResult SearchLeaf(Transaction trans, IPreparedComparison preparedComparison, SearchTarget target) { ByteArrayBuffer reader = PrepareRead(trans); Searcher s = Search(trans, preparedComparison, reader, target); if (!_isLeaf) { return Child(reader, s.Cursor()).SearchLeaf(trans, preparedComparison, target); } if (!s.FoundMatch() || target == SearchTarget.Any || target == SearchTarget.Highest) { return new BTreeNodeSearchResult(trans, reader, Btree(), s, this); } if (target == SearchTarget.Lowest) { BTreeNodeSearchResult res = FindLowestLeafMatch(trans, preparedComparison, s.Cursor () - 1); if (res != null) { return res; } return CreateMatchingSearchResult(trans, reader, s.Cursor()); } throw new InvalidOperationException(); }
public virtual BTreeNodeSearchResult SearchLeafByObject(Transaction trans, object key, SearchTarget target) { return(SearchLeaf(trans, _keyHandler.PrepareComparison(trans.Context(), key), target )); }
private BTreePointer SearchBTree(BTree bTree, Slot slot, SearchTarget target) { BTreeNodeSearchResult searchResult = bTree.SearchLeaf(Transaction(), slot, target ); return searchResult.FirstValidPointer(); }