diff --git a/CHANGELOG.md b/CHANGELOG.md index 274d25f7737..26b64ef203b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ ## 0.4.25 +* `Matrix`: + * Subproject has been created + ## 0.4.24 * `Versions`: diff --git a/matrix/build.gradle b/matrix/build.gradle new file mode 100644 index 00000000000..7c54502f100 --- /dev/null +++ b/matrix/build.gradle @@ -0,0 +1,7 @@ +plugins { + id "org.jetbrains.kotlin.multiplatform" + id "org.jetbrains.kotlin.plugin.serialization" + id "com.android.library" +} + +apply from: "$mppProjectWithSerializationPresetPath" diff --git a/matrix/src/commonMain/kotlin/dev/inmo/micro_utils/matrix/Matrix.kt b/matrix/src/commonMain/kotlin/dev/inmo/micro_utils/matrix/Matrix.kt new file mode 100644 index 00000000000..3d757d42cb3 --- /dev/null +++ b/matrix/src/commonMain/kotlin/dev/inmo/micro_utils/matrix/Matrix.kt @@ -0,0 +1,3 @@ +package dev.inmo.micro_utils.matrix + +typealias Matrix = List> diff --git a/matrix/src/commonMain/kotlin/dev/inmo/micro_utils/matrix/MatrixBuilder.kt b/matrix/src/commonMain/kotlin/dev/inmo/micro_utils/matrix/MatrixBuilder.kt new file mode 100644 index 00000000000..5e7ea1d9d16 --- /dev/null +++ b/matrix/src/commonMain/kotlin/dev/inmo/micro_utils/matrix/MatrixBuilder.kt @@ -0,0 +1,10 @@ +package dev.inmo.micro_utils.matrix + +class MatrixBuilder { + private val mutMatrix: MutableList> = ArrayList() + val matrix: Matrix + get() = mutMatrix + + fun add(t: List) = mutMatrix.add(t) + operator fun plus(t: List) = add(t) +} diff --git a/matrix/src/commonMain/kotlin/dev/inmo/micro_utils/matrix/Row.kt b/matrix/src/commonMain/kotlin/dev/inmo/micro_utils/matrix/Row.kt new file mode 100644 index 00000000000..701457d91b4 --- /dev/null +++ b/matrix/src/commonMain/kotlin/dev/inmo/micro_utils/matrix/Row.kt @@ -0,0 +1,3 @@ +package dev.inmo.micro_utils.matrix + +typealias Row = List diff --git a/matrix/src/commonMain/kotlin/dev/inmo/micro_utils/matrix/RowBuilder.kt b/matrix/src/commonMain/kotlin/dev/inmo/micro_utils/matrix/RowBuilder.kt new file mode 100644 index 00000000000..197c63037e7 --- /dev/null +++ b/matrix/src/commonMain/kotlin/dev/inmo/micro_utils/matrix/RowBuilder.kt @@ -0,0 +1,10 @@ +package dev.inmo.micro_utils.matrix + +class RowBuilder { + private val mutRow: MutableList = ArrayList() + val row: Row + get() = mutRow + + fun add(t: T) = mutRow.add(t) + operator fun T.unaryPlus() = add(this) +} diff --git a/matrix/src/commonMain/kotlin/dev/inmo/micro_utils/matrix/Utils.kt b/matrix/src/commonMain/kotlin/dev/inmo/micro_utils/matrix/Utils.kt new file mode 100644 index 00000000000..ea5c444bf55 --- /dev/null +++ b/matrix/src/commonMain/kotlin/dev/inmo/micro_utils/matrix/Utils.kt @@ -0,0 +1,31 @@ +package dev.inmo.micro_utils.matrix + +fun matrix(block: MatrixBuilder.() -> Unit): Matrix { + return MatrixBuilder().also(block).matrix +} + +fun flatMatrix(block: RowBuilder.() -> Unit): Matrix { + return MatrixBuilder().apply { + row(block) + }.matrix +} + +fun flatMatrix(vararg elements: T): Matrix { + return MatrixBuilder().apply { + row { elements.forEach { +it } } + }.matrix +} + +fun row(block: RowBuilder.() -> Unit): List { + return RowBuilder().also(block).row +} + +fun MatrixBuilder.row(block: RowBuilder.() -> Unit) { + add(RowBuilder().also(block).row) +} + +fun MatrixBuilder.row(vararg elements: T) { + add(elements.toList()) +} + +operator fun RowBuilder.plus(t: T) = add(t) diff --git a/matrix/src/main/AndroidManifest.xml b/matrix/src/main/AndroidManifest.xml new file mode 100644 index 00000000000..90fc16dfe66 --- /dev/null +++ b/matrix/src/main/AndroidManifest.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 7b43068aaa5..ea4cd8a08b3 100644 --- a/settings.gradle +++ b/settings.gradle @@ -2,6 +2,7 @@ rootProject.name='micro_utils' String[] includes = [ ":common", + ":matrix", ":crypto", ":selector:common", ":pagination:common",