Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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);
- }
- }
Advertisement