Add MutableMetaView
This commit is contained in:
parent
da0ecbe2e5
commit
27745802e1
40
dataforge-meta/src/commonMain/kotlin/space/kscience/dataforge/meta/MutableMetaView.kt
Normal file
40
dataforge-meta/src/commonMain/kotlin/space/kscience/dataforge/meta/MutableMetaView.kt
Normal file
@ -0,0 +1,40 @@
|
||||
package space.kscience.dataforge.meta
|
||||
|
||||
import space.kscience.dataforge.names.Name
|
||||
import space.kscience.dataforge.names.NameToken
|
||||
import space.kscience.dataforge.names.plus
|
||||
|
||||
/**
|
||||
* A [Meta] child proxy that creates required nodes on write
|
||||
*/
|
||||
public class MutableMetaView(
|
||||
public val origin: MutableMeta,
|
||||
public val path: Name
|
||||
) : MutableMeta {
|
||||
|
||||
override val items: Map<NameToken, MutableMeta>
|
||||
get() = origin[path]?.items ?: emptyMap()
|
||||
|
||||
override var value: Value?
|
||||
get() = origin[path]?.value
|
||||
set(value) {
|
||||
origin[path] = value
|
||||
}
|
||||
|
||||
override fun getOrCreate(name: Name): MutableMeta = MutableMetaView(origin, path + name)
|
||||
|
||||
|
||||
override fun set(name: Name, node: Meta?) {
|
||||
set(path + name, node)
|
||||
}
|
||||
|
||||
|
||||
override fun equals(other: Any?): Boolean = Meta.equals(this, other as? Meta)
|
||||
|
||||
|
||||
override fun hashCode(): Int = Meta.hashCode(this)
|
||||
|
||||
override fun toString(): String = Meta.toString(this)
|
||||
}
|
||||
|
||||
public fun MutableMeta.view(name: Name): MutableMetaView = MutableMetaView(this, name)
|
Loading…
x
Reference in New Issue
Block a user