mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2026-04-10 17:56:08 +00:00
Move legacy crap out (atomics)
This commit is contained in:
@@ -1,7 +0,0 @@
|
||||
package com.volmit.iris.generator.legacy.atomics;
|
||||
|
||||
import com.volmit.iris.object.IrisBiome;
|
||||
|
||||
public class AtomicBiomeMap extends AtomicObjectMap<IrisBiome> {
|
||||
|
||||
}
|
||||
@@ -1,119 +0,0 @@
|
||||
package com.volmit.iris.generator.legacy.atomics;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import com.volmit.iris.util.IrisLock;
|
||||
import com.volmit.iris.util.M;
|
||||
|
||||
public class AtomicCache<T>
|
||||
{
|
||||
private transient volatile T t;
|
||||
private transient volatile long a;
|
||||
private transient volatile int validations;
|
||||
private final IrisLock check;
|
||||
private final IrisLock time;
|
||||
private final IrisLock write;
|
||||
private final boolean nullSupport;
|
||||
|
||||
public AtomicCache()
|
||||
{
|
||||
this(false);
|
||||
}
|
||||
|
||||
public AtomicCache(boolean nullSupport)
|
||||
{
|
||||
this.nullSupport = nullSupport;
|
||||
check = new IrisLock("Check");
|
||||
write = new IrisLock("Write");
|
||||
time = new IrisLock("Time");
|
||||
validations = 0;
|
||||
a = -1;
|
||||
t = null;
|
||||
}
|
||||
|
||||
public void reset()
|
||||
{
|
||||
check.lock();
|
||||
write.lock();
|
||||
time.lock();
|
||||
a = -1;
|
||||
t = null;
|
||||
time.unlock();
|
||||
write.unlock();
|
||||
check.unlock();
|
||||
}
|
||||
|
||||
public T aquire(Supplier<T> t)
|
||||
{
|
||||
if(nullSupport)
|
||||
{
|
||||
return aquireNull(t);
|
||||
}
|
||||
|
||||
if(this.t != null && validations > 1000)
|
||||
{
|
||||
return this.t;
|
||||
}
|
||||
|
||||
if(this.t != null && M.ms() - a > 1000)
|
||||
{
|
||||
if(this.t != null)
|
||||
{
|
||||
validations++;
|
||||
}
|
||||
|
||||
return this.t;
|
||||
}
|
||||
|
||||
check.lock();
|
||||
|
||||
if(this.t == null)
|
||||
{
|
||||
write.lock();
|
||||
this.t = t.get();
|
||||
|
||||
time.lock();
|
||||
|
||||
if(a == -1)
|
||||
{
|
||||
a = M.ms();
|
||||
}
|
||||
|
||||
time.unlock();
|
||||
write.unlock();
|
||||
}
|
||||
|
||||
check.unlock();
|
||||
return this.t;
|
||||
}
|
||||
|
||||
public T aquireNull(Supplier<T> t)
|
||||
{
|
||||
if(validations > 1000)
|
||||
{
|
||||
return this.t;
|
||||
}
|
||||
|
||||
if(M.ms() - a > 1000)
|
||||
{
|
||||
validations++;
|
||||
return this.t;
|
||||
}
|
||||
|
||||
check.lock();
|
||||
write.lock();
|
||||
this.t = t.get();
|
||||
|
||||
time.lock();
|
||||
|
||||
if(a == -1)
|
||||
{
|
||||
a = M.ms();
|
||||
}
|
||||
|
||||
time.unlock();
|
||||
write.unlock();
|
||||
check.unlock();
|
||||
return this.t;
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
package com.volmit.iris.generator.legacy.atomics;
|
||||
|
||||
import com.google.common.util.concurrent.AtomicDoubleArray;
|
||||
|
||||
public class AtomicDoubleMap {
|
||||
private final AtomicDoubleArray data;
|
||||
|
||||
public AtomicDoubleMap() {
|
||||
data = new AtomicDoubleArray(256);
|
||||
}
|
||||
|
||||
public double get(int x, int z) {
|
||||
return data.get((z << 4) | x);
|
||||
}
|
||||
|
||||
public int getInt(int x, int z) {
|
||||
return (int) Math.round(get(x, z));
|
||||
}
|
||||
|
||||
public void set(int x, int z, double v) {
|
||||
data.set((z << 4) | x, v);
|
||||
}
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
package com.volmit.iris.generator.legacy.atomics;
|
||||
|
||||
import java.util.concurrent.atomic.AtomicIntegerArray;
|
||||
|
||||
public class AtomicIntMap {
|
||||
private final AtomicIntegerArray data;
|
||||
|
||||
public AtomicIntMap() {
|
||||
data = new AtomicIntegerArray(256);
|
||||
}
|
||||
|
||||
public int get(int x, int z) {
|
||||
return data.get((z << 4) | x);
|
||||
}
|
||||
|
||||
public void set(int x, int z, int v) {
|
||||
data.set((z << 4) | x, v);
|
||||
}
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
package com.volmit.iris.generator.legacy.atomics;
|
||||
|
||||
import java.util.concurrent.atomic.AtomicReferenceArray;
|
||||
|
||||
public class AtomicObjectMap<T> {
|
||||
private final AtomicReferenceArray<T> data;
|
||||
|
||||
public AtomicObjectMap() {
|
||||
data = new AtomicReferenceArray<T>(256);
|
||||
}
|
||||
|
||||
public T get(int x, int z) {
|
||||
return data.get((z << 4) | x);
|
||||
}
|
||||
|
||||
public void set(int x, int z, T v) {
|
||||
data.set((z << 4) | x, v);
|
||||
}
|
||||
}
|
||||
@@ -1,64 +0,0 @@
|
||||
package com.volmit.iris.generator.legacy.atomics;
|
||||
|
||||
import com.volmit.iris.util.IrisLock;
|
||||
import com.volmit.iris.util.KMap;
|
||||
|
||||
public class MasterLock
|
||||
{
|
||||
private final KMap<String, IrisLock> locks;
|
||||
private final IrisLock lock;
|
||||
private boolean enabled;
|
||||
|
||||
public MasterLock()
|
||||
{
|
||||
enabled = true;
|
||||
locks = new KMap<>();
|
||||
lock = new IrisLock("MasterLock");
|
||||
}
|
||||
|
||||
public void clear()
|
||||
{
|
||||
locks.clear();
|
||||
}
|
||||
|
||||
public void disable()
|
||||
{
|
||||
enabled = false;
|
||||
}
|
||||
|
||||
public void lock(String key)
|
||||
{
|
||||
if(!enabled)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
lock.lock();
|
||||
if(!locks.containsKey(key))
|
||||
{
|
||||
locks.put(key, new IrisLock("Locker"));
|
||||
}
|
||||
|
||||
IrisLock l = locks.get(key);
|
||||
lock.unlock();
|
||||
l.lock();
|
||||
}
|
||||
|
||||
public void unlock(String key)
|
||||
{
|
||||
if(!enabled)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
lock.lock();
|
||||
if(!locks.containsKey(key))
|
||||
{
|
||||
locks.put(key, new IrisLock("Unlocker"));
|
||||
}
|
||||
|
||||
IrisLock l = locks.get(key);
|
||||
lock.unlock();
|
||||
l.unlock();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user