1 9 package org.ozoneDB.DxLib; 10 11 12 18 public final class DxDiskHashIterator extends DxAbstractIterator { 19 20 final static long serialVersionUID = 1L; 21 22 DxKeyData current; 23 24 DxDeque stack; 25 26 DxDiskHashMap hm; 27 28 29 public DxDiskHashIterator( DxDiskHashMap _hm ) { 30 hm = _hm; 31 reset(); 32 } 33 34 35 public void reset() { 36 current = new DxKeyData( null, null ); 37 38 stack = new DxArrayDeque(); 39 40 DxDiskSubTable rootTable = hm.rootTable(); 41 42 43 DxDiskHashNode[] rootTableTables = rootTable.table(); 44 45 for (int i = 0; i < rootTableTables.length; i++) { 46 if (rootTableTables[i] != null) { 47 stack.push( rootTableTables[i] ); 48 } 49 } 50 51 55 nextEntry(); 56 57 atFirstObject = true; 58 objectRemoved = false; 59 } 60 61 62 public Object object() { 63 return current.data; 64 } 65 66 67 public Object key() { 68 return current.key; 69 } 70 71 72 public Object next() { 73 Object obj = object(); 74 75 if (atFirstObject) { 76 atFirstObject = false; 77 } else { 78 if (obj != null && !objectRemoved) { 79 nextEntry(); 80 obj = object(); 81 } 82 objectRemoved = false; 83 } 84 return obj; 85 } 86 87 88 public Object removeObject() { 89 throw new UnsupportedOperationException ( "removeObject()" ); 90 } 103 104 105 108 private void nextEntry() { 109 try { 110 DxDiskHashNode node = (DxDiskHashNode)stack.pop(); 111 112 if (node == null) { 113 current.set( null, null ); 114 } 115 else if (node instanceof DxDiskHashNodeLeaf) { 116 DxDiskHashNodeLeaf nodeLeaf = (DxDiskHashNodeLeaf)node; 117 current.set( nodeLeaf.element().key, nodeLeaf.element().data ); 118 } 119 else if (node instanceof DxDiskHashNodeBranch) { 120 DxDiskHashNodeBranch nodeBranch = (DxDiskHashNodeBranch)node; 121 DxDiskHashNode[] table = nodeBranch.subTable.fetchedTable(); 122 123 for (int i=0; i<table.length; i++) { 124 if (table[i] != null) { 125 stack.push( table[i] ); 126 } 127 } 128 nextEntry(); 129 } 130 else { 131 throw new RuntimeException ( "Unknown node type: " + node ); 132 } 133 } 134 catch (Exception e) { 135 throw new RuntimeException ( e.toString() ); 136 } 137 } 138 } 139 140 | Popular Tags |