package me.corriekay.simplymodular.util;
import java.util.HashMap;
import java.util.Map;
import com.google.common.collect.MapMaker;
import com.google.inject.Provider;
/**
* HashCache is a cache designed to store both strong and weak references to objects. This is designed to help with data concurrency.
* @author Corrie
*/
public class HashCache<K, V> {
private final Map<K, V> map = new HashMap<>();
private final Map<K, V> cache = new MapMaker().weakValues().makeMap();
public V get(K k) {
if(cache.containsKey(k)) return cache.get(k);
return map.get(k);
}
public V optGet(K k, Provider<V> p) {
V v = get(k);
if(v == null) {
v = p.get();
cache.put(k, v);
}
return v;
}
public void put(K k, Provider<V> p) {
if(!cache.containsKey(k)) {
V v = p.get();
cache.put(k, v);
map.put(k, v);
} else {
map.put(k, cache.get(k));
}
}
public void remove(K k) {
map.remove(k);
}
public void hardRemove(K k) {
remove(k);
cache.remove(k);
}
}
Comments
0 B
|👍
/👎