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)
|
||||
}
|
||||
|
||||
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 {
|
||||
fun <V> of(getter: Supplier<V>, setter: Consumer<V>): 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 */ })
|
||||
|
Loading…
Reference in New Issue
Block a user