package org.terracotta.offheapstore.eviction;
import org.terracotta.offheapstore.WriteLockedOffHeapClockCache;
import org.terracotta.offheapstore.paging.PageSource;
import org.terracotta.offheapstore.storage.StorageEngine;
public class EvictionListeningWriteLockedOffHeapClockCache<K, V> extends WriteLockedOffHeapClockCache<K, V> {
private final EvictionListener<K, V> listener;
public EvictionListeningWriteLockedOffHeapClockCache(EvictionListener<K, V> listener, PageSource source, StorageEngine<? super K, ? super V> storageEngine) {
super(source, storageEngine);
this.listener = listener;
}
public EvictionListeningWriteLockedOffHeapClockCache(EvictionListener<K, V> listener, PageSource source, StorageEngine<? super K, ? super V> storageEngine, int tableSize) {
super(source, storageEngine, tableSize);
this.listener = listener;
}
@Override
public boolean evict(final int index, boolean shrink) {
boolean evicted;
try {
listener.evicting(() -> getEntryAtTableOffset(index));
} finally {
evicted = super.evict(index, shrink);
}
return evicted;
}
}