From 5c42826e6602c2606c26840a7a0bf7f9ce21be2a Mon Sep 17 00:00:00 2001 From: Yuriy Davygora Date: Tue, 12 May 2026 12:37:53 +0200 Subject: [PATCH] Adding some extensions --- .../davygora/matrix/impl/MatrixExtentions.kt | 24 +++++++++++++++++++ .../davygora/matrix/util/IterableUtils.kt | 22 +++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 src/main/kotlin/org/duckdns/davygora/matrix/impl/MatrixExtentions.kt create mode 100644 src/main/kotlin/org/duckdns/davygora/matrix/util/IterableUtils.kt diff --git a/src/main/kotlin/org/duckdns/davygora/matrix/impl/MatrixExtentions.kt b/src/main/kotlin/org/duckdns/davygora/matrix/impl/MatrixExtentions.kt new file mode 100644 index 0000000..b36b416 --- /dev/null +++ b/src/main/kotlin/org/duckdns/davygora/matrix/impl/MatrixExtentions.kt @@ -0,0 +1,24 @@ +package org.duckdns.davygora.matrix.impl + +import org.duckdns.davygora.matrix.Matrix +import org.duckdns.davygora.matrix.MutableMatrix +import org.duckdns.davygora.matrix.storage.toMatrixStorage +import org.duckdns.davygora.matrix.util.toListChecked + +inline fun mutableMatrixOf( + xSize: Int, + ySize: Int, + vararg matrix: T, +) = ArrayMatrix(xSize, ySize, matrix.asList().toMatrixStorage()) as MutableMatrix + +inline fun matrixOf( + xSize: Int, + ySize: Int, + vararg matrix: T, +) = mutableMatrixOf(xSize, ySize, *matrix) as Matrix + +inline fun Iterable.toMatrix() = ArrayMatrix.create(this.map { it.toListChecked() }) + +inline fun Array.toMatrix() = this.asList().toMatrix() + +inline fun Sequence.toMatrix() = this.toList().toMatrix() diff --git a/src/main/kotlin/org/duckdns/davygora/matrix/util/IterableUtils.kt b/src/main/kotlin/org/duckdns/davygora/matrix/util/IterableUtils.kt new file mode 100644 index 0000000..835c26d --- /dev/null +++ b/src/main/kotlin/org/duckdns/davygora/matrix/util/IterableUtils.kt @@ -0,0 +1,22 @@ +package org.duckdns.davygora.matrix.util + +@Suppress("UNCHECKED_CAST") +inline fun Any.toListChecked(): List = + when (this) { + is List<*> -> this + is Collection<*> -> this.toList() + is Iterable<*> -> this.toList() + is Sequence<*> -> this.toList() + is Array<*> -> this.asList() + is BooleanArray -> this.asList() + is ByteArray -> this.asList() + is CharArray -> this.asList() + is DoubleArray -> this.asList() + is FloatArray -> this.asList() + is IntArray -> this.asList() + is LongArray -> this.asList() + is ShortArray -> this.asList() + else -> error("Unsupported type: ${this::class}") + }.also { list -> + require(list.all { it is T }) + } as List