diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/util/ArraySpliterator.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/util/ArraySpliterator.kt deleted file mode 100644 index af21917c..00000000 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/util/ArraySpliterator.kt +++ /dev/null @@ -1,45 +0,0 @@ -package ru.dbotthepony.kstarbound.util - -import java.util.Spliterator -import java.util.function.Consumer - -class ArraySpliterator(private val source: Array, private val offset: Int = 0, private val size: Int = source.size) : Spliterator { - init { - require(offset + size <= source.size) { "Invalid dimensions for spliterator: offset = $offset, size = $size, source has size of ${source.size}" } - } - - private var index = 0 - - override fun tryAdvance(action: Consumer): Boolean { - if (index < size) { - action.accept(source[offset + index++]) - return true - } - - return false - } - - override fun trySplit(): Spliterator? { - if (index + 1 >= size) { - return null - } - - val splitSize = size / 2 - - if (splitSize == 0) { - return null - } - - val pointer = index + offset - index += splitSize - return ArraySpliterator(source, pointer, splitSize) - } - - override fun estimateSize(): Long { - return (size - index).toLong() - } - - override fun characteristics(): Int { - return Spliterator.ORDERED or Spliterator.SIZED - } -} diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/util/NotNullTwoDimensionalArray.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/util/NotNullTwoDimensionalArray.kt index 5428fd47..6782b8fd 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/util/NotNullTwoDimensionalArray.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/util/NotNullTwoDimensionalArray.kt @@ -1,5 +1,6 @@ package ru.dbotthepony.kstarbound.util +import it.unimi.dsi.fastutil.objects.ObjectSpliterators import java.util.stream.Stream import java.util.stream.StreamSupport import kotlin.reflect.KClass @@ -52,7 +53,7 @@ class NotNullTwoDimensionalArray(clazz: KClass, private val width: I } fun stream(): Stream { - return StreamSupport.stream(ArraySpliterator(memory), false) + return StreamSupport.stream(ObjectSpliterators.wrap(memory), false) } fun indexedStream(): Stream> { diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/util/TwoDimensionalArray.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/util/TwoDimensionalArray.kt index 7694ef0f..39eb3003 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/util/TwoDimensionalArray.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/util/TwoDimensionalArray.kt @@ -1,5 +1,6 @@ package ru.dbotthepony.kstarbound.util +import it.unimi.dsi.fastutil.objects.ObjectSpliterators import java.util.stream.Stream import java.util.stream.StreamSupport import kotlin.reflect.KClass @@ -44,7 +45,7 @@ class TwoDimensionalArray(clazz: KClass, private val width: Int, pri } fun stream(): Stream { - return StreamSupport.stream(ArraySpliterator(memory), false) + return StreamSupport.stream(ObjectSpliterators.wrap(memory), false) } fun indexedStream(): Stream> { diff --git a/src/test/kotlin/ru/dbotthepony/kstarbound/test/MiscTests.kt b/src/test/kotlin/ru/dbotthepony/kstarbound/test/MiscTests.kt index 0a99e845..ccfb5b73 100644 --- a/src/test/kotlin/ru/dbotthepony/kstarbound/test/MiscTests.kt +++ b/src/test/kotlin/ru/dbotthepony/kstarbound/test/MiscTests.kt @@ -3,36 +3,8 @@ package ru.dbotthepony.kstarbound.test import org.junit.jupiter.api.Assertions.* import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.Test -import ru.dbotthepony.kstarbound.util.ArraySpliterator import java.rmi.UnexpectedException object MiscTests { - @Test - @DisplayName("Array Spliterator test") - fun arraySpliterator() { - val base = arrayOf(1, 2, 3, 4) - val spliterator = ArraySpliterator(base) - assertTrue(spliterator.tryAdvance { assertEquals(1, it) }) - assertTrue(spliterator.tryAdvance { assertEquals(2, it) }) - assertTrue(spliterator.tryAdvance { assertEquals(3, it) }) - assertTrue(spliterator.tryAdvance { assertEquals(4, it) }) - assertFalse(spliterator.tryAdvance { throw UnexpectedException("Unreachable code") }) - } - - @Test - @DisplayName("Array Spliterator split test") - fun arraySpliteratorSplit() { - val base = arrayOf(1, 2, 3, 4, 5, 6) - val spliterator = ArraySpliterator(base) - - var i = 0 - - val splitted = spliterator.trySplit()!! - - splitted.forEachRemaining { assertEquals(++i, it) } - spliterator.forEachRemaining { assertEquals(++i, it) } - - assertEquals(6, i) - } }