Implement more interfaces

This commit is contained in:
DBotThePony 2022-10-08 15:46:30 +07:00
parent ae1514700b
commit 058fe57a61
Signed by: DBot
GPG Key ID: DCC23B5715498507

View File

@ -12,6 +12,7 @@ import java.io.InputStream
import java.lang.ref.WeakReference import java.lang.ref.WeakReference
import java.math.BigDecimal import java.math.BigDecimal
import java.util.* import java.util.*
import java.util.function.Consumer
import java.util.function.Supplier import java.util.function.Supplier
import kotlin.ConcurrentModificationException import kotlin.ConcurrentModificationException
import kotlin.collections.ArrayList import kotlin.collections.ArrayList
@ -35,7 +36,7 @@ fun interface FieldSetter<V> {
fun invoke(value: V, field: FieldAccess<V>, setByRemote: Boolean) fun invoke(value: V, field: FieldAccess<V>, setByRemote: Boolean)
} }
sealed interface IField<V> : ReadOnlyProperty<Any, 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)
@ -47,15 +48,27 @@ sealed interface IField<V> : ReadOnlyProperty<Any, V> {
override fun getValue(thisRef: Any, property: KProperty<*>): V { override fun getValue(thisRef: Any, property: KProperty<*>): V {
return value return value
} }
override fun get(): V {
return value
}
override fun invoke(): V {
return value
}
} }
sealed interface IMutableField<V> : IField<V>, ReadWriteProperty<Any, V> { sealed interface IMutableField<V> : IField<V>, ReadWriteProperty<Any, V>, Consumer<V> {
override var value: V override var value: V
override fun setValue(thisRef: Any, property: KProperty<*>, value: V) { override fun setValue(thisRef: Any, property: KProperty<*>, value: V) {
this.value = value this.value = value
} }
override fun accept(t: V) {
value = t
}
override fun getValue(thisRef: Any, property: KProperty<*>): V { override fun getValue(thisRef: Any, property: KProperty<*>): V {
return super.getValue(thisRef, property) return super.getValue(thisRef, property)
} }