Implement ReadWriteProperty in GetterSetter
This commit is contained in:
parent
4c78e4e6c6
commit
d49ec98d71
@ -2,6 +2,7 @@ package ru.dbotthepony.mc.otm.core
|
|||||||
|
|
||||||
import java.util.function.Consumer
|
import java.util.function.Consumer
|
||||||
import java.util.function.Supplier
|
import java.util.function.Supplier
|
||||||
|
import kotlin.properties.ReadWriteProperty
|
||||||
import kotlin.reflect.KMutableProperty0
|
import kotlin.reflect.KMutableProperty0
|
||||||
import kotlin.reflect.KProperty
|
import kotlin.reflect.KProperty
|
||||||
|
|
||||||
@ -9,17 +10,15 @@ inline var <V> GetterSetter<V>.value: V
|
|||||||
get() = get()
|
get() = get()
|
||||||
set(value) { accept(value) }
|
set(value) { accept(value) }
|
||||||
|
|
||||||
@Suppress("nothing_to_inline")
|
interface GetterSetter<V> : Supplier<V>, Consumer<V>, ReadWriteProperty<Any?, V> {
|
||||||
inline operator fun <V> GetterSetter<V>.getValue(thisRef: Any, property: KProperty<*>): V {
|
override fun setValue(thisRef: Any?, property: KProperty<*>, value: V) {
|
||||||
return get()
|
accept(value)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Suppress("nothing_to_inline")
|
override fun getValue(thisRef: Any?, property: KProperty<*>): V {
|
||||||
inline operator fun <V> GetterSetter<V>.setValue(thisRef: Any, property: KProperty<*>, value: V) {
|
return get()
|
||||||
accept(value)
|
}
|
||||||
}
|
|
||||||
|
|
||||||
interface GetterSetter<V> : Supplier<V>, Consumer<V> {
|
|
||||||
companion object {
|
companion object {
|
||||||
fun <V> of(getter: Supplier<V>, setter: Consumer<V>): GetterSetter<V> {
|
fun <V> of(getter: Supplier<V>, setter: Consumer<V>): GetterSetter<V> {
|
||||||
return object : GetterSetter<V> {
|
return object : GetterSetter<V> {
|
||||||
|
@ -62,7 +62,7 @@ fun interface FieldSetter<V> {
|
|||||||
fun invoke(value: V, access: FieldAccess<V>, setByRemote: Boolean)
|
fun invoke(value: V, access: FieldAccess<V>, setByRemote: Boolean)
|
||||||
}
|
}
|
||||||
|
|
||||||
sealed interface IField<V> : ReadOnlyProperty<Any, V>, Supplier<V>, () -> V {
|
sealed interface IField<V> : ReadOnlyProperty<Any?, V>, Supplier<V>, () -> V {
|
||||||
fun observe(): Boolean
|
fun observe(): Boolean
|
||||||
fun markDirty()
|
fun markDirty()
|
||||||
fun markDirty(endpoint: FieldSynchronizer.Endpoint)
|
fun markDirty(endpoint: FieldSynchronizer.Endpoint)
|
||||||
@ -76,7 +76,7 @@ sealed interface IField<V> : ReadOnlyProperty<Any, V>, Supplier<V>, () -> V {
|
|||||||
|
|
||||||
fun read(stream: DataInputStream)
|
fun read(stream: DataInputStream)
|
||||||
|
|
||||||
override fun getValue(thisRef: Any, property: KProperty<*>): V {
|
override fun getValue(thisRef: Any?, property: KProperty<*>): V {
|
||||||
return this.value
|
return this.value
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -89,20 +89,16 @@ sealed interface IField<V> : ReadOnlyProperty<Any, V>, Supplier<V>, () -> V {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sealed interface IMutableField<V> : IField<V>, ReadWriteProperty<Any, V>, GetterSetter<V> {
|
sealed interface IMutableField<V> : IField<V>, GetterSetter<V> {
|
||||||
override var value: V
|
override fun getValue(thisRef: Any?, property: KProperty<*>): V {
|
||||||
|
return this.value
|
||||||
override fun setValue(thisRef: Any, property: KProperty<*>, value: V) {
|
|
||||||
this.value = value
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override var value: V
|
||||||
|
|
||||||
override fun accept(t: V) {
|
override fun accept(t: V) {
|
||||||
value = t
|
value = t
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getValue(thisRef: Any, property: KProperty<*>): V {
|
|
||||||
return super.getValue(thisRef, property)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
data class MapChangeset<out K, out V>(
|
data class MapChangeset<out K, out V>(
|
||||||
|
Loading…
Reference in New Issue
Block a user