package org.juxtapose.streamline.util.net;
import java.util.HashMap;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
import org.juxtapose.streamline.producer.ISTMEntryKey;
/**
* @author Pontus
*
*/
public abstract class ReferenceStore
{
HashMap<Integer, ISTMEntryKey> referenceToKey = new HashMap<Integer, ISTMEntryKey>();
HashMap< ISTMEntryKey, Integer> keyToReference = new HashMap<ISTMEntryKey, Integer>();
AtomicInteger referenceIncrement = new AtomicInteger( 0 );
public abstract int createReference();
/**
* @param inRef
* @param inKey
*/
protected void addReference( int inRef, ISTMEntryKey inKey )
{
referenceToKey.put( inRef, inKey );
keyToReference.put( inKey, inRef );
}
public int addReference( ISTMEntryKey inKey )
{
Integer ref = createReference();
addReference( ref, inKey );
return ref;
}
/**
* @param inRef
*/
public void removeReference( int inRef )
{
referenceToKey.remove( inRef );
}
/**
* @param inRef
* @return
*/
public ISTMEntryKey getKeyFromRef( Integer inRef )
{
return referenceToKey.get( inRef );
}
/**
* @param inKey
* @return
*/
public Integer getRefFromKey( ISTMEntryKey inKey )
{
return keyToReference.get( inKey );
}
public Set<ISTMEntryKey> getAllKeys()
{
return keyToReference.keySet();
}
public void clear()
{
keyToReference.clear();
referenceToKey.clear();
}
}