1 21 package com.db4o.inside.btree; 22 23 import com.db4o.*; 24 import com.db4o.foundation.ArgumentNullException; 25 26 27 30 public class BTreeNodeSearchResult { 31 32 private final Transaction _transaction; 33 34 private final BTree _btree; 35 36 private final BTreePointer _pointer; 37 38 private final boolean _foundMatch; 39 40 BTreeNodeSearchResult(Transaction transaction, BTree btree, BTreePointer pointer, boolean foundMatch) { 41 if (null == transaction || null == btree) { 42 throw new ArgumentNullException(); 43 } 44 _transaction = transaction; 45 _btree = btree; 46 _pointer = pointer; 47 _foundMatch = foundMatch; 48 } 49 50 BTreeNodeSearchResult(Transaction trans, YapReader nodeReader, BTree btree, BTreeNode node, int cursor, boolean foundMatch) { 51 this(trans, btree, pointerOrNull(trans, nodeReader, node, cursor), foundMatch); 52 } 53 54 BTreeNodeSearchResult(Transaction trans, YapReader nodeReader, BTree btree, Searcher searcher, BTreeNode node) { 55 this(trans, 56 btree, 57 nextPointerIf(pointerOrNull(trans, nodeReader, node, searcher.cursor()), searcher.isGreater()), 58 searcher.foundMatch()); 59 } 60 61 private static BTreePointer nextPointerIf(BTreePointer pointer, boolean condition) { 62 if (null == pointer) { 63 return null; 64 } 65 if (condition) { 66 return pointer.next(); 67 } 68 return pointer; 69 } 70 71 private static BTreePointer pointerOrNull(Transaction trans, YapReader nodeReader, BTreeNode node, int cursor) { 72 return node == null ? null : new BTreePointer(trans, nodeReader, node, cursor); 73 } 74 75 public BTreeRange createIncludingRange(BTreeNodeSearchResult end) { 76 BTreePointer firstPointer = firstValidPointer(); 77 BTreePointer endPointer = end._foundMatch ? end._pointer.next() : end.firstValidPointer(); 78 return new BTreeRangeSingle(_transaction, _btree, firstPointer, endPointer); 79 } 80 81 private BTreePointer firstValidPointer() { 82 if (null == _pointer) { 83 return null; 84 } 85 if (_pointer.isValid()) { 86 return _pointer; 87 } 88 return _pointer.next(); 89 } 90 91 } 92 | Popular Tags |