/**
*
*/
package ecologylab.generic;
import java.util.Map;
/**
* Hashed data structure with synchronized writes/deletes and unsynchronized reads.
* Constructor takes 2 args. First one is the key.
*
* @author andruid, robinson
*
* @param <K>
* @param <V>
* @param <A> 2nd argument to value constructor
*/
public class HashMapWriteSynch2Args<K, V, A> extends HashMapWriteSynchBase<K, V>
{
ValueFactory2<K, V, A> factory;
/**
* @param arg0
* @param arg1
*/
public HashMapWriteSynch2Args(int arg0, float arg1)
{
super(arg0, arg1);
// TODO Auto-generated constructor stub
}
/**
* @param arg0 number of elements allocated for initially.
*/
public HashMapWriteSynch2Args(int arg0)
{
super(arg0);
}
/**
*
* @param arg0 number of elements allocated for initially.
*
* @param factory
*/
public HashMapWriteSynch2Args(int arg0, ValueFactory2<K, V, A> factory)
{
super(arg0);
this.factory = factory;
}
/**
*
*/
public HashMapWriteSynch2Args()
{
// TODO Auto-generated constructor stub
}
/**
* @param arg0
*/
public HashMapWriteSynch2Args(Map arg0)
{
super(arg0);
// TODO Auto-generated constructor stub
}
/**
* If there is already an entry, return it.
*
* Otherwise, create an entry with the factory.
*
* @return The entry matching key, found or constructed.
*/
public V getOrCreateAndPutIfNew(K key, A arg)
{
V result = get(key);
if (result == null)
{
synchronized (this)
{
result = get(key);
if (result == null)
{
result = this.factory.createValue(key, arg);
super.put(key, result);
}
}
}
return result;
}
public ValueFactory2<K, V, A> getFactory()
{
return factory;
}
/**
* @param factory the factory to set
*/
public void setFactory(ValueFactory2<K, V, A> factory)
{
this.factory = factory;
}
}