package org.esa.s1tbx.io.sentinel1;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import org.esa.s1tbx.io.imageio.ImageIOFile;
import java.awt.*;
import java.util.concurrent.TimeUnit;
/**
* Created by lveci on 20/05/2014.
*/
public class DataCache {
private final LoadingCache<DataKey, Data> cache;
public DataCache() {
cache = CacheBuilder.newBuilder().maximumSize(500).initialCapacity(500)
.expireAfterAccess(1, TimeUnit.MINUTES)
//.recordStats()
.build(new CacheLoader<DataKey, Data>() {
@Override
public Data load(DataKey key) throws Exception {
return new Data();
}
}
);
}
public long size() {
return cache.size();
}
public String stats() {
return cache.stats().toString();
}
public Data get(DataKey key) {
return cache.getUnchecked(key);
}
public synchronized void put(DataKey key, Data value) {
cache.put(key, value);
}
public static class DataKey {
private final ImageIOFile img;
private final Rectangle rect;
DataKey(final ImageIOFile img, final Rectangle rect) {
this.img = img;
this.rect = rect;
}
@Override
public boolean equals(Object obj) {
DataKey key = (DataKey) obj;
return (rect.x == key.rect.x &&
rect.y == key.rect.y &&
rect.width == key.rect.width &&
rect.height == key.rect.height &&
img == key.img);
}
@Override
public int hashCode() {
return img.hashCode();
}
@Override
public String toString() {
return rect.toString();
}
}
public static class Data {
public final boolean valid;
public int[] intArray;
public Data() {
valid = false;
}
public Data(final int[] srcArray) {
this.intArray = srcArray;
this.valid = true;
}
}
}