1 21 package com.db4o.inside.fieldindex; 22 23 import com.db4o.*; 24 import com.db4o.foundation.Iterator4; 25 import com.db4o.inside.btree.BTreeRange; 26 27 30 public class IndexedLeaf extends IndexedNodeBase implements IndexedNodeWithRange { 31 32 private final BTreeRange _range; 33 34 public IndexedLeaf(QConObject qcon) { 35 super(qcon); 36 _range = search(); 37 } 38 39 private BTreeRange search() { 40 final BTreeRange range = search(constraint().getObject()); 41 final QEBitmap bitmap = QEBitmap.forQE(constraint().evaluator()); 42 if (bitmap.takeGreater()) { 43 if (bitmap.takeEqual()) { 44 return range.extendToLast(); 45 } 46 final BTreeRange greater = range.greater(); 47 if (bitmap.takeSmaller()) { 48 return greater.union(range.smaller()); 49 } 50 return greater; 51 } 52 if (bitmap.takeSmaller()) { 53 if (bitmap.takeEqual()) { 54 return range.extendToFirst(); 55 } 56 return range.smaller(); 57 } 58 return range; 59 } 60 61 public int resultSize() { 62 return _range.size(); 63 } 64 65 public Iterator4 iterator() { 66 return _range.keys(); 67 } 68 69 public BTreeRange getRange() { 70 return _range; 71 } 72 } 73 | Popular Tags |