package de.axone.cache.ng;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import de.axone.cache.ng.CacheNG.Cache;
import de.axone.cache.ng.CacheNG.Realm;
/**
* BackendCache as implemented by a HashMap
* @author flo
*
* @param <K>
* @param <O>
*/
public class CacheHashMap<K,O>
extends AbstractCache<K,O>
implements CacheNG.Cache<K,O> {
private final Realm<K,O> name;
private final Map<K,Cache.Entry<O>> backend;
public CacheHashMap( Realm<K,O> name ){
this.name = name;
this.backend = Collections.synchronizedMap( new HashMap<K,Cache.Entry<O>>() );
}
@Override
public String info() {
return "HashMap '" + name + "'("+size()+")";
}
@Override
public int capacity() {
return -1;
}
@Override
public void put( K key, O entry ) {
backend.put( key, new DefaultEntry<>( entry ) );
}
@Override
public Cache.Entry<O> fetchEntry( K key ) {
return backend.get( key );
}
@Override
public boolean isCached( K key ) {
return backend.containsKey( key );
}
@Override
public void invalidateEvent( K key ) {
backend.remove( key );
}
@Override
public void invalidateAllEvent( boolean force ) {
backend.clear();
}
@Override
public int size() {
return backend.size();
}
@Override
public Set<K> keySet() {
return backend.keySet();
}
@Override
public Iterable<O> values() {
return new IterableEntryAsValue<>( backend.values() );
}
@Override
public double ratio() {
return -1;
}
}