Cache tweaks

This commit is contained in:
Daniel Mills 2021-07-08 04:32:39 -04:00
parent e4ea01cfd2
commit 91f718f39d

View File

@ -5,20 +5,15 @@ import com.volmit.iris.scaffold.cache.Cache;
import com.volmit.iris.scaffold.stream.BasicStream; import com.volmit.iris.scaffold.stream.BasicStream;
import com.volmit.iris.scaffold.stream.ProceduralStream; import com.volmit.iris.scaffold.stream.ProceduralStream;
import java.util.concurrent.Semaphore;
// TODO BETTER CACHE SOLUTION
public class CachedStream2D<T> extends BasicStream<T> implements ProceduralStream<T> public class CachedStream2D<T> extends BasicStream<T> implements ProceduralStream<T>
{ {
private final ProceduralStream<T> stream; private final ProceduralStream<T> stream;
private final ConcurrentLinkedHashMap<Long, T> cache; private final ConcurrentLinkedHashMap<Long, T> cache;
private final Semaphore locker;
public CachedStream2D(ProceduralStream<T> stream, int size) public CachedStream2D(ProceduralStream<T> stream, int size)
{ {
super(); super();
this.stream = stream; this.stream = stream;
locker = new Semaphore(30);
cache = new ConcurrentLinkedHashMap.Builder<Long, T>() cache = new ConcurrentLinkedHashMap.Builder<Long, T>()
.initialCapacity(size) .initialCapacity(size)
.maximumWeightedCapacity(size) .maximumWeightedCapacity(size)
@ -41,15 +36,7 @@ public class CachedStream2D<T> extends BasicStream<T> implements ProceduralStrea
@Override @Override
public T get(double x, double z) public T get(double x, double z)
{ {
try { return cache.compute(Cache.key((int) x, (int) z), (k, v) -> v != null ? v : stream.get((int)x, (int)z));
locker.acquire();
} catch (InterruptedException e) {
e.printStackTrace();
}
long ck = Cache.key((int) x, (int) z);
T f = cache.compute(ck, (k, v) -> v != null ? v : stream.get(Cache.keyX(ck), Cache.keyZ(ck)));
locker.release();
return f;
} }
@Override @Override