summaryrefslogtreecommitdiff
path: root/src/main/kotlin/io/dico/parcels2/blockvisitor/RegionTraversal.kt
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin/io/dico/parcels2/blockvisitor/RegionTraversal.kt')
-rw-r--r--src/main/kotlin/io/dico/parcels2/blockvisitor/RegionTraversal.kt30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/main/kotlin/io/dico/parcels2/blockvisitor/RegionTraversal.kt b/src/main/kotlin/io/dico/parcels2/blockvisitor/RegionTraversal.kt
new file mode 100644
index 0000000..0e7d217
--- /dev/null
+++ b/src/main/kotlin/io/dico/parcels2/blockvisitor/RegionTraversal.kt
@@ -0,0 +1,30 @@
+package io.dico.parcels2.blockvisitor
+
+import io.dico.parcels2.util.Region
+import io.dico.parcels2.util.Vec3i
+import kotlin.coroutines.experimental.SequenceBuilder
+import kotlin.coroutines.experimental.buildIterator
+
+enum class RegionTraversal(private val builder: suspend SequenceBuilder<Vec3i>.(Region) -> Unit) {
+ XZY({ region ->
+ val origin = region.origin
+ val size = region.size
+
+ repeat(size.y) { y ->
+ repeat(size.z) { z ->
+ repeat(size.x) { x ->
+ yield(origin.add(x, y, z))
+ }
+ }
+ }
+
+ }),
+
+ ;
+
+ fun regionTraverser(region: Region) = Iterable { buildIterator { builder(region) } }
+
+}
+
+
+