KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > ozoneDB > DxLib > DxDiskHashNodeLeaf


1 // You can redistribute this software and/or modify it under the terms of
2
// the Ozone Library License version 1 published by ozone-db.org.
3
//
4
// The original code and portions created by SMB are
5
// Copyright (C) 1997-@year@ by SMB GmbH. All rights reserved.
6
//
7
// $Id: DxDiskHashNodeLeaf.java,v 1.10 2000/11/09 10:43:06 daniela Exp $
8

9 package org.ozoneDB.DxLib;
10
11 import java.io.*;
12
13
14 /**
15  * Knoten als blatt des baumes. Enthaelt keine verzweigungen aber eventuell
16  * mehrere key-data-paare.
17  */

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 JavaDoc data, Object JavaDoc key ) {
43         //es ist noch kein element drin
44
if (element == null) {
45             element = grandParent.newKeyData();
46             element.set( key, data );
47             return true;
48         } else {
49             //es sind schon elemente da
50
DxKeyData elem = element;
51             while (elem != null) {
52                 if (elem.key.equals( key )) {
53                     break;
54                 }
55                 elem = elem.next;
56             }
57             //key ist noch nicht drin
58
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                 //key ist schon da :(
66
return false;
67             }
68         }
69     }
70     
71     
72     public Object JavaDoc elementForKey( Object JavaDoc 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 JavaDoc removeForKey( Object JavaDoc 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 JavaDoc answer = null;
94         if (elem != null) {
95             answer = elem.data;
96             //daten vom ersten element der liste hier eintragen
97
elem.data = element.data;
98             elem.key = element.key;
99             //erstes element loeschen; evtl gibt es nur noch das eine
100
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 JavaDoc {
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