mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-07-18 18:23:06 +00:00
Mantle optimized iteration
This commit is contained in:
parent
734847db68
commit
075aec3ac0
@ -27,6 +27,7 @@ import com.volmit.iris.util.documentation.ChunkCoordinates;
|
|||||||
import com.volmit.iris.util.documentation.RegionCoordinates;
|
import com.volmit.iris.util.documentation.RegionCoordinates;
|
||||||
import com.volmit.iris.util.format.C;
|
import com.volmit.iris.util.format.C;
|
||||||
import com.volmit.iris.util.format.Form;
|
import com.volmit.iris.util.format.Form;
|
||||||
|
import com.volmit.iris.util.function.Consumer4;
|
||||||
import com.volmit.iris.util.math.M;
|
import com.volmit.iris.util.math.M;
|
||||||
import com.volmit.iris.util.matter.Matter;
|
import com.volmit.iris.util.matter.Matter;
|
||||||
import com.volmit.iris.util.parallel.BurstExecutor;
|
import com.volmit.iris.util.parallel.BurstExecutor;
|
||||||
@ -108,6 +109,24 @@ public class Mantle {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ChunkCoordinates
|
||||||
|
public <T> void iterateChunk(int x, int z, Class<T> type, Consumer4<Integer, Integer, Integer, T> iterator, MantleFlag... requiredFlags)
|
||||||
|
{
|
||||||
|
for(MantleFlag i : requiredFlags)
|
||||||
|
{
|
||||||
|
if(!hasFlag(x, z, i))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
get(x >> 5, z >> 5).get().get(x & 31, z & 31).iterate(type, iterator);
|
||||||
|
} catch (InterruptedException | ExecutionException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@ChunkCoordinates
|
@ChunkCoordinates
|
||||||
public boolean hasFlag(int x, int z, MantleFlag flag)
|
public boolean hasFlag(int x, int z, MantleFlag flag)
|
||||||
{
|
{
|
||||||
|
@ -22,8 +22,10 @@ import com.volmit.iris.util.collection.KSet;
|
|||||||
import com.volmit.iris.util.collection.StateList;
|
import com.volmit.iris.util.collection.StateList;
|
||||||
import com.volmit.iris.util.data.Varint;
|
import com.volmit.iris.util.data.Varint;
|
||||||
import com.volmit.iris.util.documentation.ChunkCoordinates;
|
import com.volmit.iris.util.documentation.ChunkCoordinates;
|
||||||
|
import com.volmit.iris.util.function.Consumer4;
|
||||||
import com.volmit.iris.util.matter.IrisMatter;
|
import com.volmit.iris.util.matter.IrisMatter;
|
||||||
import com.volmit.iris.util.matter.Matter;
|
import com.volmit.iris.util.matter.Matter;
|
||||||
|
import com.volmit.iris.util.matter.MatterSlice;
|
||||||
|
|
||||||
import java.io.DataInputStream;
|
import java.io.DataInputStream;
|
||||||
import java.io.DataOutputStream;
|
import java.io.DataOutputStream;
|
||||||
@ -168,4 +170,21 @@ public class MantleChunk {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public <T> void iterate(Class<T> type, Consumer4<Integer, Integer, Integer,T> iterator) {
|
||||||
|
for(int i = 0; i < sections.length(); i++)
|
||||||
|
{
|
||||||
|
Matter matter = get(i);
|
||||||
|
|
||||||
|
if(matter != null)
|
||||||
|
{
|
||||||
|
MatterSlice<T> t = matter.getSlice(type);
|
||||||
|
|
||||||
|
if(t != null)
|
||||||
|
{
|
||||||
|
t.iterateSync(iterator);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,7 @@ import com.volmit.iris.util.collection.StateList;
|
|||||||
|
|
||||||
public enum MantleFlag {
|
public enum MantleFlag {
|
||||||
OBJECT,
|
OBJECT,
|
||||||
VACUUM,
|
UPDATE,
|
||||||
JIGSAW,
|
JIGSAW,
|
||||||
FEATURE
|
FEATURE
|
||||||
;
|
;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user