1 9 package org.ozoneDB.DxLib; 10 11 import java.io.*; 12 13 14 18 public class DxDiskHashNodeLeaf extends DxDiskHashNode implements Externalizable { 19 20 final static long serialVersionUID = 1; 21 22 protected DxDiskHashMap grandParent; 23 24 protected DxKeyData element; 25 26 27 public DxDiskHashNodeLeaf( DxDiskHashMap _grandParent ) { 28 grandParent = _grandParent; 29 } 30 31 32 public void empty() { 33 element = null; 34 } 35 36 37 public DxKeyData element() { 38 return element; 39 } 40 41 42 public boolean addForKey( Object data, Object key ) { 43 if (element == null) { 45 element = grandParent.newKeyData(); 46 element.set( key, data ); 47 return true; 48 } else { 49 DxKeyData elem = element; 51 while (elem != null) { 52 if (elem.key.equals( key )) { 53 break; 54 } 55 elem = elem.next; 56 } 57 if (elem == null) { 59 DxKeyData newElement = grandParent.newKeyData(); 60 newElement.set( key, data ); 61 newElement.next = element; 62 element = newElement; 63 return true; 64 } else { 65 return false; 67 } 68 } 69 } 70 71 72 public Object elementForKey( Object key, int hashCode ) { 73 DxKeyData elem = element; 74 while (elem != null) { 75 if (elem.key.equals( key )) { 76 return elem.data; 77 } 78 elem = elem.next; 79 } 80 return null; 81 } 82 83 84 public Object removeForKey( Object key ) { 85 DxKeyData elem = element; 86 while (elem != null) { 87 if (elem.key.equals( key )) { 88 break; 89 } 90 elem = elem.next; 91 } 92 93 Object answer = null; 94 if (elem != null) { 95 answer = elem.data; 96 elem.data = element.data; 98 elem.key = element.key; 99 element = element.next; 101 } 102 return answer; 103 } 104 105 106 public void writeExternal( ObjectOutput out ) throws IOException { 107 byte c = 0; 108 for (DxKeyData elem = element; elem != null; elem = elem.next) { 109 c++; 110 } 111 out.writeByte( c ); 112 113 DxKeyData elem = element; 114 while (elem != null) { 115 out.writeObject( elem.key ); 116 out.writeObject( elem.data ); 117 elem = elem.next; 118 } 119 } 120 121 122 public void readExternal( ObjectInput in ) throws IOException, ClassNotFoundException { 123 byte c = in.readByte(); 124 125 element = grandParent.newKeyData(); 126 element.set( in.readObject(), in.readObject() ); 127 128 DxKeyData elem = element; 129 for (int i = 1; i < c; i++) { 130 elem.next = grandParent.newKeyData(); 131 elem.next.set( in.readObject(), in.readObject() ); 132 elem = elem.next; 133 } 134 } 135 } 136 | Popular Tags |