From 075aec3ac0b6702136c8f663de65bd510d6c18ab Mon Sep 17 00:00:00 2001 From: Daniel Mills Date: Mon, 9 Aug 2021 09:39:01 -0400 Subject: [PATCH] Mantle optimized iteration --- .../com/volmit/iris/util/mantle/Mantle.java | 19 +++++++++++++++++++ .../volmit/iris/util/mantle/MantleChunk.java | 19 +++++++++++++++++++ .../volmit/iris/util/mantle/MantleFlag.java | 2 +- 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/volmit/iris/util/mantle/Mantle.java b/src/main/java/com/volmit/iris/util/mantle/Mantle.java index f607a530d..de7ea75d9 100644 --- a/src/main/java/com/volmit/iris/util/mantle/Mantle.java +++ b/src/main/java/com/volmit/iris/util/mantle/Mantle.java @@ -27,6 +27,7 @@ import com.volmit.iris.util.documentation.ChunkCoordinates; import com.volmit.iris.util.documentation.RegionCoordinates; import com.volmit.iris.util.format.C; 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.matter.Matter; import com.volmit.iris.util.parallel.BurstExecutor; @@ -108,6 +109,24 @@ public class Mantle { } } + @ChunkCoordinates + public void iterateChunk(int x, int z, Class type, Consumer4 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 public boolean hasFlag(int x, int z, MantleFlag flag) { diff --git a/src/main/java/com/volmit/iris/util/mantle/MantleChunk.java b/src/main/java/com/volmit/iris/util/mantle/MantleChunk.java index 28fd95243..9b9db5e49 100644 --- a/src/main/java/com/volmit/iris/util/mantle/MantleChunk.java +++ b/src/main/java/com/volmit/iris/util/mantle/MantleChunk.java @@ -22,8 +22,10 @@ import com.volmit.iris.util.collection.KSet; import com.volmit.iris.util.collection.StateList; import com.volmit.iris.util.data.Varint; 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.Matter; +import com.volmit.iris.util.matter.MatterSlice; import java.io.DataInputStream; import java.io.DataOutputStream; @@ -168,4 +170,21 @@ public class MantleChunk { } } } + + public void iterate(Class type, Consumer4 iterator) { + for(int i = 0; i < sections.length(); i++) + { + Matter matter = get(i); + + if(matter != null) + { + MatterSlice t = matter.getSlice(type); + + if(t != null) + { + t.iterateSync(iterator); + } + } + } + } } diff --git a/src/main/java/com/volmit/iris/util/mantle/MantleFlag.java b/src/main/java/com/volmit/iris/util/mantle/MantleFlag.java index 128773092..e14e19806 100644 --- a/src/main/java/com/volmit/iris/util/mantle/MantleFlag.java +++ b/src/main/java/com/volmit/iris/util/mantle/MantleFlag.java @@ -22,7 +22,7 @@ import com.volmit.iris.util.collection.StateList; public enum MantleFlag { OBJECT, - VACUUM, + UPDATE, JIGSAW, FEATURE ;