gnu.kawa.util
Class AbstractWeakHashTable<K,V>

java.lang.Object
  extended by java.util.AbstractMap<K,V>
      extended by gnu.kawa.util.AbstractHashTable<AbstractWeakHashTable.WEntry<K,V>,K,V>
          extended by gnu.kawa.util.AbstractWeakHashTable<K,V>
All Implemented Interfaces:
java.util.Map<K,V>

public abstract class AbstractWeakHashTable<K,V>
extends AbstractHashTable<AbstractWeakHashTable.WEntry<K,V>,K,V>

A hash table with weakly referenced keys and values. Unlike java.util.WeakHashMap, this is useful when a value object contain a strong reference to the corresponding keys.


Nested Class Summary
static class AbstractWeakHashTable.WEntry<K,V>
           
 
Nested classes/interfaces inherited from class java.util.AbstractMap
java.util.AbstractMap.SimpleEntry<K,V>, java.util.AbstractMap.SimpleImmutableEntry<K,V>
 
Nested classes/interfaces inherited from interface java.util.Map
java.util.Map.Entry<K,V>
 
Field Summary
 
Fields inherited from class gnu.kawa.util.AbstractHashTable
DEFAULT_INITIAL_SIZE, mask, num_bindings, table
 
Constructor Summary
AbstractWeakHashTable()
           
AbstractWeakHashTable(int capacity)
           
 
Method Summary
protected  AbstractWeakHashTable.WEntry<K,V>[] allocEntries(int n)
          Allocate Entry[n].
protected  void cleanup()
           
 V get(java.lang.Object key, V defaultValue)
          Find value for given key.
protected  int getEntryHashCode(AbstractWeakHashTable.WEntry<K,V> entry)
          Extract hash-code from Entry.
protected  AbstractWeakHashTable.WEntry<K,V> getEntryNext(AbstractWeakHashTable.WEntry<K,V> entry)
          Extract next Entry in same hash-bucket.
protected abstract  K getKeyFromValue(V value)
           
protected  V getValueIfMatching(AbstractWeakHashTable.WEntry<K,V> node, java.lang.Object key)
           
 int hash(java.lang.Object key)
          Calculate hash code of a key.
protected  AbstractWeakHashTable.WEntry<K,V> makeEntry(K key, int hash, V value)
          Allocate a new node in the hash table.
 V put(K key, V value)
           
protected  void setEntryNext(AbstractWeakHashTable.WEntry<K,V> entry, AbstractWeakHashTable.WEntry<K,V> next)
          Set next Entry in same hash-bucket.
protected  boolean valuesEqual(V oldValue, V newValue)
           
 
Methods inherited from class gnu.kawa.util.AbstractHashTable
clear, entrySet, get, getNode, hashToIndex, matches, matches, put, rehash, remove, size
 
Methods inherited from class java.util.AbstractMap
clone, containsKey, containsValue, equals, hashCode, isEmpty, keySet, putAll, toString, values
 
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
 

Constructor Detail

AbstractWeakHashTable

public AbstractWeakHashTable()

AbstractWeakHashTable

public AbstractWeakHashTable(int capacity)
Method Detail

getKeyFromValue

protected abstract K getKeyFromValue(V value)

getEntryHashCode

protected int getEntryHashCode(AbstractWeakHashTable.WEntry<K,V> entry)
Description copied from class: AbstractHashTable
Extract hash-code from Entry.

Specified by:
getEntryHashCode in class AbstractHashTable<AbstractWeakHashTable.WEntry<K,V>,K,V>

getEntryNext

protected AbstractWeakHashTable.WEntry<K,V> getEntryNext(AbstractWeakHashTable.WEntry<K,V> entry)
Description copied from class: AbstractHashTable
Extract next Entry in same hash-bucket.

Specified by:
getEntryNext in class AbstractHashTable<AbstractWeakHashTable.WEntry<K,V>,K,V>

setEntryNext

protected void setEntryNext(AbstractWeakHashTable.WEntry<K,V> entry,
                            AbstractWeakHashTable.WEntry<K,V> next)
Description copied from class: AbstractHashTable
Set next Entry in same hash-bucket.

Specified by:
setEntryNext in class AbstractHashTable<AbstractWeakHashTable.WEntry<K,V>,K,V>

allocEntries

protected AbstractWeakHashTable.WEntry<K,V>[] allocEntries(int n)
Description copied from class: AbstractHashTable
Allocate Entry[n].

Specified by:
allocEntries in class AbstractHashTable<AbstractWeakHashTable.WEntry<K,V>,K,V>

getValueIfMatching

protected V getValueIfMatching(AbstractWeakHashTable.WEntry<K,V> node,
                               java.lang.Object key)

get

public V get(java.lang.Object key,
             V defaultValue)
Description copied from class: AbstractHashTable
Find value for given key. Return defaultValue if not found.

Overrides:
get in class AbstractHashTable<AbstractWeakHashTable.WEntry<K,V>,K,V>

hash

public int hash(java.lang.Object key)
Description copied from class: AbstractHashTable
Calculate hash code of a key.

Overrides:
hash in class AbstractHashTable<AbstractWeakHashTable.WEntry<K,V>,K,V>

valuesEqual

protected boolean valuesEqual(V oldValue,
                              V newValue)

makeEntry

protected AbstractWeakHashTable.WEntry<K,V> makeEntry(K key,
                                                      int hash,
                                                      V value)
Description copied from class: AbstractHashTable
Allocate a new node in the hash table.

Specified by:
makeEntry in class AbstractHashTable<AbstractWeakHashTable.WEntry<K,V>,K,V>

put

public V put(K key,
             V value)
Specified by:
put in interface java.util.Map<K,V>
Overrides:
put in class AbstractHashTable<AbstractWeakHashTable.WEntry<K,V>,K,V>

cleanup

protected void cleanup()