Mantle optimized iteration

This commit is contained in:
Daniel Mills 2021-08-09 09:39:01 -04:00
parent 734847db68
commit 075aec3ac0
3 changed files with 39 additions and 1 deletions

View File

@ -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 <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
public boolean hasFlag(int x, int z, MantleFlag flag)
{

View File

@ -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 <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);
}
}
}
}
}

View File

@ -22,7 +22,7 @@ import com.volmit.iris.util.collection.StateList;
public enum MantleFlag {
OBJECT,
VACUUM,
UPDATE,
JIGSAW,
FEATURE
;