From 4d19d97c53991777d61cf33116749fbde8922ba1 Mon Sep 17 00:00:00 2001 From: Alexander Nozik Date: Sun, 31 Jan 2021 22:34:48 +0300 Subject: [PATCH] Update DataSetBuilder API --- dataforge-data/build.gradle.kts | 4 ++ .../hep/dataforge/data/DataSetBuilder.kt | 38 +++++++++++++------ .../kotlin/hep/dataforge/data/ActionsTest.kt | 2 +- .../hep/dataforge/data/DataTreeBuilderTest.kt | 8 ++-- .../workspace/DataPropagationTest.kt | 2 +- .../hep/dataforge/workspace/FileDataTest.kt | 4 +- .../workspace/SimpleWorkspaceTest.kt | 2 +- 7 files changed, 39 insertions(+), 21 deletions(-) diff --git a/dataforge-data/build.gradle.kts b/dataforge-data/build.gradle.kts index f28b10e5..7ae0c747 100644 --- a/dataforge-data/build.gradle.kts +++ b/dataforge-data/build.gradle.kts @@ -21,3 +21,7 @@ kotlin { } } } + +readme{ + maturity = ru.mipt.npm.gradle.Maturity.EXPERIMENTAL +} diff --git a/dataforge-data/src/commonMain/kotlin/hep/dataforge/data/DataSetBuilder.kt b/dataforge-data/src/commonMain/kotlin/hep/dataforge/data/DataSetBuilder.kt index 6e3669b7..2787e529 100644 --- a/dataforge-data/src/commonMain/kotlin/hep/dataforge/data/DataSetBuilder.kt +++ b/dataforge-data/src/commonMain/kotlin/hep/dataforge/data/DataSetBuilder.kt @@ -74,18 +74,6 @@ public suspend fun DataSetBuilder.emit(name: String, data: Data) emit(name.toName(), data) } -public suspend fun DataSetBuilder.data(name: Name, data: T, meta: Meta = Meta.EMPTY) { - emit(name, Data.static(data, meta)) -} - -public suspend fun DataSetBuilder.data(name: Name, data: T, block: MetaBuilder.() -> Unit = {}) { - emit(name, Data.static(data, Meta(block))) -} - -public suspend fun DataSetBuilder.data(name: String, data: T, block: MetaBuilder.() -> Unit = {}) { - emit(name.toName(), Data.static(data, Meta(block))) -} - public suspend fun DataSetBuilder.emit(name: String, set: DataSet) { this.emit(name.toName(), set) } @@ -97,6 +85,32 @@ public suspend fun DataSetBuilder.emit(data: NamedData) { emit(data.name, data.data) } +/** + * Produce lazy [Data] and emit it into the [DataSetBuilder] + */ +public suspend inline fun DataSetBuilder.emitLazy( + name: String, + meta: Meta, + noinline producer: suspend () -> T, +) { + val data = Data(meta, block = producer) + emit(name, data) +} + +/** + * Emit a static data with the fixed value + */ +public suspend fun DataSetBuilder.emitStatic(name: String, data: T, meta: Meta = Meta.EMPTY): Unit = + emit(name, Data.static(data, meta)) + +public suspend fun DataSetBuilder.emitStatic( + name: String, + data: T, + metaBuilder: MetaBuilder.() -> Unit, +) { + emit(name.toName(), Data.static(data, Meta(metaBuilder))) +} + /** * Update data with given node data and meta with node meta. */ diff --git a/dataforge-data/src/jvmTest/kotlin/hep/dataforge/data/ActionsTest.kt b/dataforge-data/src/jvmTest/kotlin/hep/dataforge/data/ActionsTest.kt index 686762d9..453dd2f1 100644 --- a/dataforge-data/src/jvmTest/kotlin/hep/dataforge/data/ActionsTest.kt +++ b/dataforge-data/src/jvmTest/kotlin/hep/dataforge/data/ActionsTest.kt @@ -14,7 +14,7 @@ class ActionsTest { val data: DataTree = runBlocking { DataTree { repeat(10) { - data(it.toString(), it) + emitStatic(it.toString(), it) } } } diff --git a/dataforge-data/src/jvmTest/kotlin/hep/dataforge/data/DataTreeBuilderTest.kt b/dataforge-data/src/jvmTest/kotlin/hep/dataforge/data/DataTreeBuilderTest.kt index 4050e731..55ed1523 100644 --- a/dataforge-data/src/jvmTest/kotlin/hep/dataforge/data/DataTreeBuilderTest.kt +++ b/dataforge-data/src/jvmTest/kotlin/hep/dataforge/data/DataTreeBuilderTest.kt @@ -19,10 +19,10 @@ internal class DataTreeBuilderTest { val node = DataTree { emit("primary") { - data("a", "a") - data("b", "b") + emitStatic("a", "a") + emitStatic("b", "b") } - data("root", "root") + emitStatic("root", "root") populate(updateData) } @@ -40,7 +40,7 @@ internal class DataTreeBuilderTest { updateJob = launch { repeat(10) { delay(10) - data("value", it) + emitStatic("value", it) } delay(10) } diff --git a/dataforge-workspace/src/jvmTest/kotlin/hep/dataforge/workspace/DataPropagationTest.kt b/dataforge-workspace/src/jvmTest/kotlin/hep/dataforge/workspace/DataPropagationTest.kt index 41b08d2a..16c1460b 100644 --- a/dataforge-workspace/src/jvmTest/kotlin/hep/dataforge/workspace/DataPropagationTest.kt +++ b/dataforge-workspace/src/jvmTest/kotlin/hep/dataforge/workspace/DataPropagationTest.kt @@ -49,7 +49,7 @@ class DataPropagationTest { runBlocking { data { repeat(100) { - data("myData[$it]", it) + emitStatic("myData[$it]", it) } } } diff --git a/dataforge-workspace/src/jvmTest/kotlin/hep/dataforge/workspace/FileDataTest.kt b/dataforge-workspace/src/jvmTest/kotlin/hep/dataforge/workspace/FileDataTest.kt index ff22054d..50a4bd0d 100644 --- a/dataforge-workspace/src/jvmTest/kotlin/hep/dataforge/workspace/FileDataTest.kt +++ b/dataforge-workspace/src/jvmTest/kotlin/hep/dataforge/workspace/FileDataTest.kt @@ -23,11 +23,11 @@ class FileDataTest { val dataNode = runBlocking { DataTree { emit("dir") { - data("a", "Some string") { + emitStatic("a", "Some string") { "content" put "Some string" } } - data("b", "root data") + emitStatic("b", "root data") meta { "content" put "This is root meta node" } diff --git a/dataforge-workspace/src/jvmTest/kotlin/hep/dataforge/workspace/SimpleWorkspaceTest.kt b/dataforge-workspace/src/jvmTest/kotlin/hep/dataforge/workspace/SimpleWorkspaceTest.kt index 3b290d4e..c81621b9 100644 --- a/dataforge-workspace/src/jvmTest/kotlin/hep/dataforge/workspace/SimpleWorkspaceTest.kt +++ b/dataforge-workspace/src/jvmTest/kotlin/hep/dataforge/workspace/SimpleWorkspaceTest.kt @@ -56,7 +56,7 @@ class SimpleWorkspaceTest { data { repeat(100) { - data("myData[$it]", it) + emitStatic("myData[$it]", it) } }