first commit
This commit is contained in:
105
hrmsEjb/org/apache/xerces/util/SymbolHash.java
Normal file
105
hrmsEjb/org/apache/xerces/util/SymbolHash.java
Normal file
@@ -0,0 +1,105 @@
|
||||
package org.apache.xerces.util;
|
||||
|
||||
public class SymbolHash {
|
||||
protected int fTableSize = 101;
|
||||
|
||||
protected Entry[] fBuckets;
|
||||
|
||||
protected int fNum = 0;
|
||||
|
||||
public SymbolHash() {
|
||||
this.fBuckets = new Entry[this.fTableSize];
|
||||
}
|
||||
|
||||
public SymbolHash(int size) {
|
||||
this.fTableSize = size;
|
||||
this.fBuckets = new Entry[this.fTableSize];
|
||||
}
|
||||
|
||||
public void put(Object key, Object value) {
|
||||
int bucket = (key.hashCode() & Integer.MAX_VALUE) % this.fTableSize;
|
||||
Entry entry = search(key, bucket);
|
||||
if (entry != null) {
|
||||
entry.value = value;
|
||||
} else {
|
||||
entry = new Entry(key, value, this.fBuckets[bucket]);
|
||||
this.fBuckets[bucket] = entry;
|
||||
this.fNum++;
|
||||
}
|
||||
}
|
||||
|
||||
public Object get(Object key) {
|
||||
int bucket = (key.hashCode() & Integer.MAX_VALUE) % this.fTableSize;
|
||||
Entry entry = search(key, bucket);
|
||||
if (entry != null)
|
||||
return entry.value;
|
||||
return null;
|
||||
}
|
||||
|
||||
public int getLength() {
|
||||
return this.fNum;
|
||||
}
|
||||
|
||||
public int getValues(Object[] elements, int from) {
|
||||
for (int i = 0, j = 0; i < this.fTableSize && j < this.fNum; i++) {
|
||||
for (Entry entry = this.fBuckets[i]; entry != null; entry = entry.next) {
|
||||
elements[from + j] = entry.value;
|
||||
j++;
|
||||
}
|
||||
}
|
||||
return this.fNum;
|
||||
}
|
||||
|
||||
public SymbolHash makeClone() {
|
||||
SymbolHash newTable = new SymbolHash(this.fTableSize);
|
||||
newTable.fNum = this.fNum;
|
||||
for (int i = 0; i < this.fTableSize; i++) {
|
||||
if (this.fBuckets[i] != null)
|
||||
newTable.fBuckets[i] = this.fBuckets[i].makeClone();
|
||||
}
|
||||
return newTable;
|
||||
}
|
||||
|
||||
public void clear() {
|
||||
for (int i = 0; i < this.fTableSize; i++)
|
||||
this.fBuckets[i] = null;
|
||||
this.fNum = 0;
|
||||
}
|
||||
|
||||
protected Entry search(Object key, int bucket) {
|
||||
for (Entry entry = this.fBuckets[bucket]; entry != null; entry = entry.next) {
|
||||
if (key.equals(entry.key))
|
||||
return entry;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
protected static final class Entry {
|
||||
public Object key;
|
||||
|
||||
public Object value;
|
||||
|
||||
public Entry next;
|
||||
|
||||
public Entry() {
|
||||
this.key = null;
|
||||
this.value = null;
|
||||
this.next = null;
|
||||
}
|
||||
|
||||
public Entry(Object key, Object value, Entry next) {
|
||||
this.key = key;
|
||||
this.value = value;
|
||||
this.next = next;
|
||||
}
|
||||
|
||||
public Entry makeClone() {
|
||||
Entry entry = new Entry();
|
||||
entry.key = this.key;
|
||||
entry.value = this.value;
|
||||
if (this.next != null)
|
||||
entry.next = this.next.makeClone();
|
||||
return entry;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user