diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/core/GetterSetter.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/core/GetterSetter.kt index b64cbd207..700b2c868 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/core/GetterSetter.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/core/GetterSetter.kt @@ -27,6 +27,35 @@ interface GetterSetter : Supplier, Consumer, ReadWriteProperty accept(value) } + fun asGetterOnly(): GetterSetter { + val self = this + + return object : GetterSetter { + override fun get(): V { + return self.get() + } + + override fun accept(t: V) { + } + } + } + + fun watch(watch: (old: V, new: V) -> Unit): GetterSetter { + val self = this + + return object : GetterSetter { + override fun get(): V { + return self.get() + } + + override fun accept(t: V) { + val old = get() + self.accept(t) + watch.invoke(old, t) + } + } + } + companion object { fun of(getter: Supplier, setter: Consumer): GetterSetter { return object : GetterSetter { @@ -63,6 +92,20 @@ interface GetterSetter : Supplier, Consumer, ReadWriteProperty } } } + + fun box(value: V): GetterSetter { + return object : GetterSetter { + private var value = value + + override fun get(): V { + return value + } + + override fun accept(t: V) { + this.value = t + } + } + } } } @@ -84,18 +127,4 @@ fun KMutableProperty0.asGetterSetter(watch: ((old: V, new: V) -> Unit)? = } } -fun GetterSetter.watch(watch: (old: V, new: V) -> Unit): GetterSetter { - return object : GetterSetter { - override fun get(): V { - return this@watch.get() - } - - override fun accept(t: V) { - val old = get() - this@watch.accept(t) - watch.invoke(old, t) - } - } -} - fun KMutableProperty0.asGetterOnly() = GetterSetter.of(Supplier { this.get() }, Consumer { /* do nothing */ })