mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-07-18 18:23:06 +00:00
Cache tweaks
This commit is contained in:
parent
e4ea01cfd2
commit
91f718f39d
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user