Change suspend DataSet.getData to operator DataSet.get

This commit is contained in:
Alexander Nozik 2022-04-24 09:19:14 +03:00
parent 6b41163ed3
commit eaa9d40d60
No known key found for this signature in database
GPG Key ID: F7FCF2DD25C71357
12 changed files with 29 additions and 29 deletions

View File

@ -10,6 +10,7 @@
- `Factory` is now `fun interface` and uses `build` instead of `invoke`. `invoke moved to an extension. - `Factory` is now `fun interface` and uses `build` instead of `invoke`. `invoke moved to an extension.
- KTor 2.0 - KTor 2.0
- DataTree `items` call is blocking. - DataTree `items` call is blocking.
- DataSet `getData` is no longer suspended and renamed to `get`
### Deprecated ### Deprecated

View File

@ -48,7 +48,7 @@ public class ReduceGroupBuilder<T : Any, R : Any>(
public fun group( public fun group(
groupName: String, groupName: String,
filter: suspend (Name, Data<T>) -> Boolean, filter: (Name, Data<T>) -> Boolean,
action: JoinGroup<T, R>.() -> Unit, action: JoinGroup<T, R>.() -> Unit,
) { ) {
groupRules += { source -> groupRules += { source ->

View File

@ -28,7 +28,7 @@ public interface DataSet<out T : Any> {
/** /**
* Get data with given name. * Get data with given name.
*/ */
public suspend fun getData(name: Name): Data<T>? public operator fun get(name: Name): Data<T>?
/** /**
@ -52,7 +52,7 @@ public interface DataSet<out T : Any> {
override fun flowData(): Flow<NamedData<Nothing>> = emptyFlow() override fun flowData(): Flow<NamedData<Nothing>> = emptyFlow()
override suspend fun getData(name: Name): Data<Nothing>? = null override fun get(name: Name): Data<Nothing>? = null
} }
} }
} }
@ -101,4 +101,4 @@ public suspend fun DataSet<*>.toMeta(): Meta = Meta {
} }
} }
public val <T : Any> DataSet<T>.updatesWithData: Flow<NamedData<T>> get() = updates.mapNotNull { getData(it)?.named(it) } public val <T : Any> DataSet<T>.updatesWithData: Flow<NamedData<T>> get() = updates.mapNotNull { get(it)?.named(it) }

View File

@ -57,10 +57,10 @@ public interface DataTree<out T : Any> : DataSet<T> {
override suspend fun listTop(prefix: Name): List<Name> = override suspend fun listTop(prefix: Name): List<Name> =
getItem(prefix).tree?.items?.keys?.map { prefix + it } ?: emptyList() getItem(prefix).tree?.items?.keys?.map { prefix + it } ?: emptyList()
override suspend fun getData(name: Name): Data<T>? = when (name.length) { override fun get(name: Name): Data<T>? = when (name.length) {
0 -> null 0 -> null
1 -> items[name.firstOrNull()!!].data 1 -> items[name.firstOrNull()!!].data
else -> items[name.firstOrNull()!!].tree?.getData(name.cutFirst()) else -> items[name.firstOrNull()!!].tree?.get(name.cutFirst())
} }
public companion object { public companion object {
@ -73,7 +73,7 @@ public interface DataTree<out T : Any> : DataSet<T> {
} }
} }
public suspend fun <T : Any> DataSet<T>.getData(name: String): Data<T>? = getData(Name.parse(name)) public suspend fun <T : Any> DataSet<T>.getData(name: String): Data<T>? = get(Name.parse(name))
/** /**
* Get a [DataTreeItem] with given [name] or null if the item does not exist * Get a [DataTreeItem] with given [name] or null if the item does not exist

View File

@ -50,7 +50,7 @@ public interface GroupRule {
scope.launch { scope.launch {
set.updates.collect { name -> set.updates.collect { name ->
val data = set.getData(name) val data = set.get(name)
@Suppress("NULLABLE_EXTENSION_OPERATOR_WITH_SAFE_CALL_RECEIVER") @Suppress("NULLABLE_EXTENSION_OPERATOR_WITH_SAFE_CALL_RECEIVER")
val tagValue = data?.meta?.get(key)?.string ?: defaultTagValue val tagValue = data?.meta?.get(key)?.string ?: defaultTagValue

View File

@ -17,7 +17,7 @@ import kotlin.reflect.KType
* A stateless filtered [DataSet] * A stateless filtered [DataSet]
*/ */
public fun <T : Any> DataSet<T>.filter( public fun <T : Any> DataSet<T>.filter(
predicate: suspend (Name, Data<T>) -> Boolean, predicate: (Name, Data<T>) -> Boolean,
): ActiveDataSet<T> = object : ActiveDataSet<T> { ): ActiveDataSet<T> = object : ActiveDataSet<T> {
override val dataType: KType get() = this@filter.dataType override val dataType: KType get() = this@filter.dataType
@ -27,12 +27,12 @@ public fun <T : Any> DataSet<T>.filter(
override fun flowData(): Flow<NamedData<T>> = override fun flowData(): Flow<NamedData<T>> =
this@filter.flowData().filter { predicate(it.name, it.data) } this@filter.flowData().filter { predicate(it.name, it.data) }
override suspend fun getData(name: Name): Data<T>? = this@filter.getData(name)?.takeIf { override fun get(name: Name): Data<T>? = this@filter.get(name)?.takeIf {
predicate(name, it) predicate(name, it)
} }
override val updates: Flow<Name> = this@filter.updates.filter flowFilter@{ name -> override val updates: Flow<Name> = this@filter.updates.filter flowFilter@{ name ->
val theData = this@filter.getData(name) ?: return@flowFilter false val theData = this@filter.get(name) ?: return@flowFilter false
predicate(name, theData) predicate(name, theData)
} }
} }
@ -50,8 +50,8 @@ else object : ActiveDataSet<T> {
override fun flowData(): Flow<NamedData<T>> = this@withNamePrefix.flowData().map { it.data.named(prefix + it.name) } override fun flowData(): Flow<NamedData<T>> = this@withNamePrefix.flowData().map { it.data.named(prefix + it.name) }
override suspend fun getData(name: Name): Data<T>? = override fun get(name: Name): Data<T>? =
name.removeHeadOrNull(name)?.let { this@withNamePrefix.getData(it) } name.removeHeadOrNull(name)?.let { this@withNamePrefix.get(it) }
override val updates: Flow<Name> get() = this@withNamePrefix.updates.map { prefix + it } override val updates: Flow<Name> get() = this@withNamePrefix.updates.map { prefix + it }
} }
@ -72,7 +72,7 @@ public fun <T : Any> DataSet<T>.branch(branchName: Name): DataSet<T> = if (branc
} }
} }
override suspend fun getData(name: Name): Data<T>? = this@branch.getData(branchName + name) override fun get(name: Name): Data<T>? = this@branch.get(branchName + name)
override val updates: Flow<Name> get() = this@branch.updates.mapNotNull { it.removeHeadOrNull(branchName) } override val updates: Flow<Name> get() = this@branch.updates.mapNotNull { it.removeHeadOrNull(branchName) }
} }
@ -80,5 +80,5 @@ public fun <T : Any> DataSet<T>.branch(branchName: Name): DataSet<T> = if (branc
public fun <T : Any> DataSet<T>.branch(branchName: String): DataSet<T> = this@branch.branch(Name.parse(branchName)) public fun <T : Any> DataSet<T>.branch(branchName: String): DataSet<T> = this@branch.branch(Name.parse(branchName))
@DFExperimental @DFExperimental
public suspend fun <T : Any> DataSet<T>.rootData(): Data<T>? = getData(Name.EMPTY) public suspend fun <T : Any> DataSet<T>.rootData(): Data<T>? = get(Name.EMPTY)

View File

@ -35,6 +35,6 @@ context(DataSetBuilder<T>) public fun <T : Any> CoroutineScope.setAndWatch(
): Job = launch { ): Job = launch {
node(name, dataSet) node(name, dataSet)
dataSet.updates.collect { nameInBranch -> dataSet.updates.collect { nameInBranch ->
data(name + nameInBranch, dataSet.getData(nameInBranch)) data(name + nameInBranch, dataSet.get(nameInBranch))
} }
} }

View File

@ -52,12 +52,12 @@ public fun <R : Any> DataSet<*>.select(
it as NamedData<R> it as NamedData<R>
} }
override suspend fun getData(name: Name): Data<R>? = this@select.getData(name)?.let { datum -> override fun get(name: Name): Data<R>? = this@select.get(name)?.let { datum ->
if (checkDatum(name, datum)) datum.castOrNull(type) else null if (checkDatum(name, datum)) datum.castOrNull(type) else null
} }
override val updates: Flow<Name> = this@select.updates.filter { override val updates: Flow<Name> = this@select.updates.filter {
val datum = this@select.getData(it) ?: return@filter false val datum = this@select.get(it) ?: return@filter false
checkDatum(it, datum) checkDatum(it, datum)
} }
} }
@ -73,11 +73,11 @@ public inline fun <reified R : Any> DataSet<*>.select(
/** /**
* Select a single datum if it is present and of given [type] * Select a single datum if it is present and of given [type]
*/ */
public suspend fun <R : Any> DataSet<*>.selectOne(type: KType, name: Name): NamedData<R>? = public fun <R : Any> DataSet<*>.selectOne(type: KType, name: Name): NamedData<R>? =
getData(name)?.castOrNull<R>(type)?.named(name) get(name)?.castOrNull<R>(type)?.named(name)
public suspend inline fun <reified R : Any> DataSet<*>.selectOne(name: Name): NamedData<R>? = public inline fun <reified R : Any> DataSet<*>.selectOne(name: Name): NamedData<R>? =
selectOne(typeOf<R>(), name) selectOne(typeOf<R>(), name)
public suspend inline fun <reified R : Any> DataSet<*>.selectOne(name: String): NamedData<R>? = public inline fun <reified R : Any> DataSet<*>.selectOne(name: String): NamedData<R>? =
selectOne(typeOf<R>(), Name.parse(name)) selectOne(typeOf<R>(), Name.parse(name))

View File

@ -88,9 +88,8 @@ public fun EnvelopeFormat.readFile(path: Path): Envelope {
*/ */
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
@DFExperimental @DFExperimental
public inline fun <reified T : Any> IOPlugin.resolveIOFormat(): IOFormat<T>? { public inline fun <reified T : Any> IOPlugin.resolveIOFormat(): IOFormat<T>? =
return ioFormatFactories.find { it.type.isSupertypeOf(typeOf<T>()) } as IOFormat<T>? ioFormatFactories.find { it.type.isSupertypeOf(typeOf<T>()) } as IOFormat<T>?
}
/** /**
* Read file containing meta using given [formatOverride] or file extension to infer meta type. * Read file containing meta using given [formatOverride] or file extension to infer meta type.

View File

@ -26,7 +26,7 @@ public interface TaskResult<out T : Any> : DataSet<T> {
public val taskMeta: Meta public val taskMeta: Meta
override fun flowData(): Flow<TaskData<T>> override fun flowData(): Flow<TaskData<T>>
override suspend fun getData(name: Name): TaskData<T>? override fun get(name: Name): TaskData<T>?
} }
private class TaskResultImpl<out T : Any>( private class TaskResultImpl<out T : Any>(
@ -40,7 +40,7 @@ private class TaskResultImpl<out T : Any>(
workspace.wrapData(it, it.name, taskName, taskMeta) workspace.wrapData(it, it.name, taskName, taskMeta)
} }
override suspend fun getData(name: Name): TaskData<T>? = dataSet.getData(name)?.let { override fun get(name: Name): TaskData<T>? = dataSet.get(name)?.let {
workspace.wrapData(it, name, taskName, taskMeta) workspace.wrapData(it, name, taskName, taskMeta)
} }
} }

View File

@ -46,7 +46,7 @@ public interface Workspace : ContextAware, Provider {
} }
public suspend fun produceData(taskName: Name, taskMeta: Meta, name: Name): TaskData<*>? = public suspend fun produceData(taskName: Name, taskMeta: Meta, name: Name): TaskData<*>? =
produce(taskName, taskMeta).getData(name) produce(taskName, taskMeta).get(name)
public companion object { public companion object {
public const val TYPE: String = "workspace" public const val TYPE: String = "workspace"

View File

@ -103,7 +103,7 @@ class SimpleWorkspaceTest {
val squareData = from(square) val squareData = from(square)
val linearData = from(linear) val linearData = from(linear)
squareData.forEach { data -> squareData.forEach { data ->
val newData: Data<Int> = data.combine(linearData.getData(data.name)!!) { l, r -> val newData: Data<Int> = data.combine(linearData.get(data.name)!!) { l, r ->
l + r l + r
} }
data(data.name, newData) data(data.name, newData)