1 9 package org.ozoneDB.DxLib; 10 11 17 public final class DxBBIterator extends DxAbstractIterator { 18 19 final static long serialVersionUID = 1L; 20 21 DxBBTree bbtree; 22 DxBBnode node; 23 24 25 27 public DxBBIterator( DxTreeCollection _coll ) { 28 bbtree = _coll.internalTree(); 29 reset(); 30 } 31 32 33 35 public Object object() { 36 return node != null ? node.data : null; 37 } 38 39 40 42 public Object key() { 43 return node != null ? node.key : null; 44 } 45 46 47 49 public Object next() { 50 Object obj = object(); 51 if (atFirstObject) { 52 atFirstObject = false; 53 } else { 54 if (obj != null && !objectRemoved) { 55 if (node.re != null) { 56 node = leftMost( node.re ); 57 } else { 58 node = firstRightParent( node ); 59 } 60 obj = object(); 61 } 62 objectRemoved = false; 63 } 64 return obj; 65 } 66 67 68 70 public void reset() { 71 node = leftMost( bbtree.root() ); 72 atFirstObject = true; 73 objectRemoved = false; 74 } 75 76 77 79 public Object removeObject() { 80 Object obj = object(); 81 if (obj != null && !objectRemoved) { 82 DxBBnode delNode = node; 83 if (node.re != null) { 84 node = leftMost( node.re ); 85 } else { 86 node = firstRightParent( node ); 87 } 88 bbtree.removeForKey( delNode.key ); 89 objectRemoved = true; 90 } 91 return obj; 92 } 93 94 95 97 private DxBBnode leftMost( DxBBnode node ) { 98 if (node != null && node.li != null) { 99 return leftMost( node.li ); 100 } 101 return node; 102 } 103 104 105 107 private DxBBnode firstRightParent( DxBBnode node ) { 108 if (node == bbtree.quietRoot) { 109 return null; 110 } 111 if (node.isRight) { 112 return firstRightParent( node.pa ); 113 } 114 return node.pa; 115 } 116 } 117 | Popular Tags |