Replace branch
data builder with putAll
This commit is contained in:
parent
aa4c745819
commit
f95e278b2d
@ -6,6 +6,7 @@
|
|||||||
- Name index comparator
|
- Name index comparator
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
- DataSink `branch` is replaced with `putAll` to avoid confusion with DataTree methods
|
||||||
|
|
||||||
### Deprecated
|
### Deprecated
|
||||||
|
|
||||||
|
@ -98,15 +98,15 @@ public val DataTree<*>.meta: Meta? get() = data?.meta
|
|||||||
/**
|
/**
|
||||||
* Provide subtree if it exists
|
* Provide subtree if it exists
|
||||||
*/
|
*/
|
||||||
public tailrec fun <T, TR : GenericDataTree<T, TR>> GenericDataTree<T, TR>.branch(name: Name): TR? =
|
public tailrec fun <T, TR : GenericDataTree<T, TR>> GenericDataTree<T, TR>.putAll(name: Name): TR? =
|
||||||
when (name.length) {
|
when (name.length) {
|
||||||
0 -> self
|
0 -> self
|
||||||
1 -> items[name.first()]
|
1 -> items[name.first()]
|
||||||
else -> items[name.first()]?.branch(name.cutFirst())
|
else -> items[name.first()]?.putAll(name.cutFirst())
|
||||||
}
|
}
|
||||||
|
|
||||||
public fun <T, TR : GenericDataTree<T, TR>> GenericDataTree<T, TR>.branch(name: String): TR? =
|
public fun <T, TR : GenericDataTree<T, TR>> GenericDataTree<T, TR>.putAll(name: String): TR? =
|
||||||
branch(name.parseAsName())
|
this@branch.putAll(name.parseAsName())
|
||||||
|
|
||||||
public fun GenericDataTree<*, *>.isEmpty(): Boolean = data == null && items.isEmpty()
|
public fun GenericDataTree<*, *>.isEmpty(): Boolean = data == null && items.isEmpty()
|
||||||
|
|
||||||
|
@ -16,11 +16,7 @@ public fun <T> DataSink<T>.put(value: NamedData<T>) {
|
|||||||
put(value.name, value.data)
|
put(value.name, value.data)
|
||||||
}
|
}
|
||||||
|
|
||||||
public fun <T> DataSink<T>.branch(dataTree: DataTree<T>) {
|
public inline fun <T> DataSink<T>.putAll(
|
||||||
putAll(dataTree.asSequence())
|
|
||||||
}
|
|
||||||
|
|
||||||
public inline fun <T> DataSink<T>.branch(
|
|
||||||
prefix: Name,
|
prefix: Name,
|
||||||
block: DataSink<T>.() -> Unit,
|
block: DataSink<T>.() -> Unit,
|
||||||
) {
|
) {
|
||||||
@ -35,24 +31,42 @@ public inline fun <T> DataSink<T>.branch(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Deprecated("Use putAll", ReplaceWith("putAll(prefix, block)"))
|
||||||
|
public inline fun <T> DataSink<T>.branch(
|
||||||
|
prefix: Name,
|
||||||
|
block: DataSink<T>.() -> Unit,
|
||||||
|
): Unit = putAll(prefix, block)
|
||||||
|
|
||||||
|
|
||||||
|
public inline fun <T> DataSink<T>.putAll(
|
||||||
|
prefix: String,
|
||||||
|
block: DataSink<T>.() -> Unit,
|
||||||
|
): Unit = putAll(prefix.asName(), block)
|
||||||
|
|
||||||
|
@Deprecated("Use putAll", ReplaceWith("putAll(prefix, block)"))
|
||||||
public inline fun <T> DataSink<T>.branch(
|
public inline fun <T> DataSink<T>.branch(
|
||||||
prefix: String,
|
prefix: String,
|
||||||
block: DataSink<T>.() -> Unit,
|
block: DataSink<T>.() -> Unit,
|
||||||
): Unit = branch(prefix.asName(), block)
|
): Unit = putAll(prefix, block)
|
||||||
|
|
||||||
|
|
||||||
public fun <T> DataSink<T>.put(name: String, value: Data<T>) {
|
public fun <T> DataSink<T>.put(name: String, value: Data<T>) {
|
||||||
put(Name.parse(name), value)
|
put(Name.parse(name), value)
|
||||||
}
|
}
|
||||||
|
|
||||||
public fun <T> DataSink<T>.branch(name: Name, set: DataTree<T>) {
|
public fun <T> DataSink<T>.putAll(name: Name, tree: DataTree<T>) {
|
||||||
branch(name) { putAll(set.asSequence()) }
|
putAll(name) { putAll(tree.asSequence()) }
|
||||||
}
|
}
|
||||||
|
|
||||||
public fun <T> DataSink<T>.branch(name: String, set: DataTree<T>) {
|
@Deprecated("Use putAll", ReplaceWith("putAll(name, tree)"))
|
||||||
branch(Name.parse(name)) { putAll(set.asSequence()) }
|
public fun <T> DataSink<T>.branch(name: Name, tree: DataTree<T>): Unit = putAll(name,tree)
|
||||||
|
|
||||||
|
public fun <T> DataSink<T>.putAll(name: String, tree: DataTree<T>) {
|
||||||
|
putAll(Name.parse(name)) { putAll(tree.asSequence()) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Deprecated("Use putAll", ReplaceWith("putAll(name, tree)"))
|
||||||
|
public fun <T> DataSink<T>.branch(name: String, tree: DataTree<T>): Unit = putAll(name,tree)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Produce lazy [Data] and emit it into the [MutableDataTree]
|
* Produce lazy [Data] and emit it into the [MutableDataTree]
|
||||||
*/
|
*/
|
||||||
@ -124,7 +138,7 @@ public fun <T : Any> DataSink<T>.watchBranch(
|
|||||||
name: Name,
|
name: Name,
|
||||||
dataSet: ObservableDataTree<T>,
|
dataSet: ObservableDataTree<T>,
|
||||||
): Job {
|
): Job {
|
||||||
branch(name, dataSet)
|
putAll(name, dataSet)
|
||||||
return dataSet.updates().onEach {
|
return dataSet.updates().onEach {
|
||||||
put(name + it.name, it.data)
|
put(name + it.name, it.data)
|
||||||
}.launchIn(dataSet.updatesScope)
|
}.launchIn(dataSet.updatesScope)
|
||||||
|
@ -15,7 +15,7 @@ public infix fun <T : Any> String.put(data: Data<T>): Unit =
|
|||||||
*/
|
*/
|
||||||
context(DataSink<T>)
|
context(DataSink<T>)
|
||||||
public infix fun <T : Any> String.put(dataSet: DataTree<T>): Unit =
|
public infix fun <T : Any> String.put(dataSet: DataTree<T>): Unit =
|
||||||
branch(this, dataSet)
|
this.putAll(this, dataSet)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Build and append node
|
* Build and append node
|
||||||
@ -23,5 +23,5 @@ public infix fun <T : Any> String.put(dataSet: DataTree<T>): Unit =
|
|||||||
context(DataSink<T>)
|
context(DataSink<T>)
|
||||||
public infix fun <T : Any> String.put(
|
public infix fun <T : Any> String.put(
|
||||||
block: DataSink<T>.() -> Unit,
|
block: DataSink<T>.() -> Unit,
|
||||||
): Unit = branch(Name.parse(this), block)
|
): Unit = this.putAll(Name.parse(this), block)
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ internal class DataTreeBuilderTest {
|
|||||||
wrap("b", "b")
|
wrap("b", "b")
|
||||||
}
|
}
|
||||||
wrap("root", "root")
|
wrap("root", "root")
|
||||||
putAll(updateData)
|
this.putAll(updateData)
|
||||||
}
|
}
|
||||||
|
|
||||||
assertEquals("a", node["update.a"]?.await())
|
assertEquals("a", node["update.a"]?.await())
|
||||||
|
@ -11,7 +11,7 @@ import space.kscience.dataforge.provider.Provider
|
|||||||
import kotlin.coroutines.CoroutineContext
|
import kotlin.coroutines.CoroutineContext
|
||||||
|
|
||||||
|
|
||||||
public fun interface DataSelector<T> {
|
public fun interface DataSelector<out T> {
|
||||||
public suspend fun select(workspace: Workspace, meta: Meta): DataTree<T>
|
public suspend fun select(workspace: Workspace, meta: Meta): DataTree<T>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,8 +3,8 @@ package space.kscience.dataforge.workspace
|
|||||||
import space.kscience.dataforge.actions.Action
|
import space.kscience.dataforge.actions.Action
|
||||||
import space.kscience.dataforge.context.PluginFactory
|
import space.kscience.dataforge.context.PluginFactory
|
||||||
import space.kscience.dataforge.data.DataTree
|
import space.kscience.dataforge.data.DataTree
|
||||||
import space.kscience.dataforge.data.branch
|
|
||||||
import space.kscience.dataforge.data.forEach
|
import space.kscience.dataforge.data.forEach
|
||||||
|
import space.kscience.dataforge.data.putAll
|
||||||
import space.kscience.dataforge.data.transform
|
import space.kscience.dataforge.data.transform
|
||||||
import space.kscience.dataforge.meta.*
|
import space.kscience.dataforge.meta.*
|
||||||
import space.kscience.dataforge.misc.DFExperimental
|
import space.kscience.dataforge.misc.DFExperimental
|
||||||
@ -101,7 +101,7 @@ public suspend inline fun <T, reified R> TaskResultBuilder<R>.transformEach(
|
|||||||
* Set given [dataSet] as a task result.
|
* Set given [dataSet] as a task result.
|
||||||
*/
|
*/
|
||||||
public fun <T> TaskResultBuilder<T>.result(dataSet: DataTree<T>) {
|
public fun <T> TaskResultBuilder<T>.result(dataSet: DataTree<T>) {
|
||||||
branch(dataSet)
|
this.putAll(dataSet)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -113,7 +113,7 @@ public suspend inline fun <T, reified R> TaskResultBuilder<R>.actionFrom(
|
|||||||
action: Action<T, R>,
|
action: Action<T, R>,
|
||||||
dependencyMeta: Meta = defaultDependencyMeta,
|
dependencyMeta: Meta = defaultDependencyMeta,
|
||||||
) {
|
) {
|
||||||
branch(action.execute(from(selector, dependencyMeta), dependencyMeta))
|
this.putAll(action.execute(from(selector, dependencyMeta), dependencyMeta))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ import kotlin.test.assertEquals
|
|||||||
|
|
||||||
class FileDataTest {
|
class FileDataTest {
|
||||||
val dataNode = DataTree<String> {
|
val dataNode = DataTree<String> {
|
||||||
branch("dir") {
|
putAll("dir") {
|
||||||
wrap("a", "Some string") {
|
wrap("a", "Some string") {
|
||||||
"content" put "Some string"
|
"content" put "Some string"
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user