Move extension functions to interface itself, add box() GetterSetter
This commit is contained in:
parent
6a5924267a
commit
687b5c9726
@ -27,6 +27,35 @@ interface GetterSetter<V> : Supplier<V>, Consumer<V>, ReadWriteProperty<Any?, V>
|
|||||||
accept(value)
|
accept(value)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun asGetterOnly(): GetterSetter<V> {
|
||||||
|
val self = this
|
||||||
|
|
||||||
|
return object : GetterSetter<V> {
|
||||||
|
override fun get(): V {
|
||||||
|
return self.get()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun accept(t: V) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun watch(watch: (old: V, new: V) -> Unit): GetterSetter<V> {
|
||||||
|
val self = this
|
||||||
|
|
||||||
|
return object : GetterSetter<V> {
|
||||||
|
override fun get(): V {
|
||||||
|
return self.get()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun accept(t: V) {
|
||||||
|
val old = get()
|
||||||
|
self.accept(t)
|
||||||
|
watch.invoke(old, t)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
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> {
|
||||||
@ -63,6 +92,20 @@ interface GetterSetter<V> : Supplier<V>, Consumer<V>, ReadWriteProperty<Any?, V>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun <V> box(value: V): GetterSetter<V> {
|
||||||
|
return object : GetterSetter<V> {
|
||||||
|
private var value = value
|
||||||
|
|
||||||
|
override fun get(): V {
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun accept(t: V) {
|
||||||
|
this.value = t
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -84,18 +127,4 @@ fun <V> KMutableProperty0<V>.asGetterSetter(watch: ((old: V, new: V) -> Unit)? =
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun <V> GetterSetter<V>.watch(watch: (old: V, new: V) -> Unit): GetterSetter<V> {
|
|
||||||
return object : GetterSetter<V> {
|
|
||||||
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 <V> KMutableProperty0<V>.asGetterOnly() = GetterSetter.of(Supplier { this.get() }, Consumer { /* do nothing */ })
|
fun <V> KMutableProperty0<V>.asGetterOnly() = GetterSetter.of(Supplier { this.get() }, Consumer { /* do nothing */ })
|
||||||
|
Loading…
Reference in New Issue
Block a user