2023-05-30 23:41:37 -05:00
|
|
|
package noppes.npcs.util;
|
|
|
|
|
|
2024-02-15 17:54:28 -05:00
|
|
|
import java.util.HashMap;
|
|
|
|
|
import java.util.Iterator;
|
|
|
|
|
import java.util.Map;
|
2023-05-30 23:41:37 -05:00
|
|
|
|
|
|
|
|
public class CacheHashMap<K, V extends CacheHashMap.CachedObject<?>> extends HashMap<K, V> {
|
|
|
|
|
private final long maxCacheTime;
|
|
|
|
|
|
|
|
|
|
public CacheHashMap(long maxCacheTime) {
|
|
|
|
|
this.maxCacheTime = maxCacheTime;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public V get(Object key) {
|
|
|
|
|
V object = super.get(key);
|
|
|
|
|
object.updateTimeAccessed();
|
|
|
|
|
|
2023-05-31 00:35:57 -05:00
|
|
|
Iterator<Map.Entry<K,V>> iterator = this.entrySet().iterator();
|
|
|
|
|
while (iterator.hasNext()) {
|
|
|
|
|
Map.Entry<K,V> entry = iterator.next();
|
|
|
|
|
long timeDiff = entry.getValue().timeSinceAccessed();
|
|
|
|
|
if (timeDiff > this.maxCacheTime) {
|
|
|
|
|
iterator.remove();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-05-30 23:41:37 -05:00
|
|
|
return object;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static class CachedObject<T> {
|
|
|
|
|
private long lastTimeAccessed;
|
|
|
|
|
private final T object;
|
|
|
|
|
|
|
|
|
|
public CachedObject(T object) {
|
|
|
|
|
this.object = object;
|
|
|
|
|
this.lastTimeAccessed = System.currentTimeMillis();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public long timeSinceAccessed() {
|
|
|
|
|
return System.currentTimeMillis() - this.lastTimeAccessed;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void updateTimeAccessed() {
|
|
|
|
|
this.lastTimeAccessed = System.currentTimeMillis();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public T getObject() {
|
|
|
|
|
return this.object;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|