diff --git a/dataforge-data/src/commonMain/kotlin/space/kscience/dataforge/data/dataBuilders.kt b/dataforge-data/src/commonMain/kotlin/space/kscience/dataforge/data/dataBuilders.kt index bdeb2798..63233c07 100644 --- a/dataforge-data/src/commonMain/kotlin/space/kscience/dataforge/data/dataBuilders.kt +++ b/dataforge-data/src/commonMain/kotlin/space/kscience/dataforge/data/dataBuilders.kt @@ -5,7 +5,6 @@ import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import space.kscience.dataforge.meta.Meta import space.kscience.dataforge.meta.MutableMeta -import space.kscience.dataforge.misc.DFExperimental import space.kscience.dataforge.names.Name import space.kscience.dataforge.names.asName import space.kscience.dataforge.names.isEmpty @@ -58,14 +57,14 @@ public fun DataSink.putAll(name: Name, tree: DataTree) { } @Deprecated("Use putAll", ReplaceWith("putAll(name, tree)")) -public fun DataSink.branch(name: Name, tree: DataTree): Unit = putAll(name,tree) +public fun DataSink.branch(name: Name, tree: DataTree): Unit = putAll(name, tree) public fun DataSink.putAll(name: String, tree: DataTree) { putAll(Name.parse(name)) { putAll(tree.asSequence()) } } @Deprecated("Use putAll", ReplaceWith("putAll(name, tree)")) -public fun DataSink.branch(name: String, tree: DataTree): Unit = putAll(name,tree) +public fun DataSink.branch(name: String, tree: DataTree): Unit = putAll(name, tree) /** * Produce lazy [Data] and emit it into the [MutableDataTree] @@ -117,30 +116,25 @@ public fun DataSink.putAll(sequence: Sequence>) { } public fun DataSink.putAll(tree: DataTree) { - this.putAll(tree.asSequence()) -} - - -/** - * Update data with given node data and meta with node meta. - */ -@DFExperimental -public fun MutableDataTree.putAll(source: DataTree) { - source.forEach { - put(it.name, it.data) - } + putAll(tree.asSequence()) } /** * Copy given data set and mirror its changes to this [DataSink] in [this@setAndObserve]. Returns an update [Job] */ +public fun DataSink.putAllAndWatch( + branchName: Name = Name.EMPTY, + dataSet: ObservableDataTree, +): Job { + putAll(branchName, dataSet) + return dataSet.updates().onEach { + put(branchName + it.name, it.data) + }.launchIn(dataSet.updatesScope) +} + + +@Deprecated("Use putAllAndWatch", ReplaceWith("putAllAndWatch(name, dataSet)")) public fun DataSink.watchBranch( name: Name, dataSet: ObservableDataTree, -): Job { - putAll(name, dataSet) - return dataSet.updates().onEach { - put(name + it.name, it.data) - }.launchIn(dataSet.updatesScope) - -} \ No newline at end of file +): Job = putAllAndWatch(name, dataSet) \ No newline at end of file diff --git a/dataforge-data/src/jvmTest/kotlin/space/kscience/dataforge/data/DataTreeBuilderTest.kt b/dataforge-data/src/jvmTest/kotlin/space/kscience/dataforge/data/DataTreeBuilderTest.kt index a4e732dc..561e3aa0 100644 --- a/dataforge-data/src/jvmTest/kotlin/space/kscience/dataforge/data/DataTreeBuilderTest.kt +++ b/dataforge-data/src/jvmTest/kotlin/space/kscience/dataforge/data/DataTreeBuilderTest.kt @@ -43,7 +43,7 @@ internal class DataTreeBuilderTest { wrap("b", "b") } wrap("root", "root") - this.putAll(updateData) + putAll(updateData) } assertEquals("a", node["update.a"]?.await()) @@ -55,7 +55,7 @@ internal class DataTreeBuilderTest { val subNode = MutableDataTree() val rootNode = MutableDataTree { - watchBranch("sub".asName(), subNode) + putAllAndWatch("sub".asName(), subNode) } repeat(10) {