1 21 package com.db4o.foundation; 22 23 26 public class TreeKeyIterator implements Iterator4 { 27 28 private final Tree _tree; 29 30 private Stack4 _stack; 31 32 public TreeKeyIterator(Tree tree) { 33 _tree = tree; 34 } 35 36 public Object current() { 37 if(_stack == null){ 38 throw new IllegalStateException (); 39 } 40 Tree tree = peek(); 41 if(tree == null){ 42 return null; 43 } 44 return tree.key(); 45 } 46 47 private Tree peek(){ 48 return (Tree) _stack.peek(); 49 } 50 51 public void reset() { 52 _stack = null; 53 } 54 55 public boolean moveNext() { 56 if(_stack == null){ 57 initStack(); 58 return _stack != null; 59 } 60 61 Tree current = peek(); 62 if(current == null){ 63 return false; 64 } 65 66 if(pushPreceding(current._subsequent)){ 67 return true; 68 } 69 70 while(true){ 71 _stack.pop(); 72 Tree parent = peek(); 73 if(parent == null){ 74 return false; 75 } 76 if(current == parent._preceding){ 77 return true; 78 } 79 current = parent; 80 } 81 } 82 83 private void initStack() { 84 if(_tree == null){ 85 return; 86 } 87 _stack = new Stack4(); 88 pushPreceding(_tree); 89 } 90 91 private boolean pushPreceding(Tree node) { 92 if(node == null){ 93 return false; 94 } 95 while (node != null) { 96 _stack.push(node); 97 node = node._preceding; 98 } 99 return true; 100 } 101 102 } 103 | Popular Tags |