Mike
Mike
It is possible to observe configuration changes for changingConfigurations of a resource: ``` res.text(R.string.*) => Property textView.bindTextResTo(R.string.*) ``` Consider: whether it is useful?
Many storages do not support nesting. Thus, a Struct must be flattened somehow. Currently, there's no consistent solution across the library: * `:android-bindings` `SharedPreferencesStruct` serializes a whole field into a...
like setValue, but will post value only if it is different from current ``` // signature: fun update(newValue: T, dropIf: (T, T) -> Boolean) // sample: prop.update(new, dropIf = Objectz.Equal)...
Given a data tree (mutable Struct), there may exist a `fun Struct.doSomething()` which will turn this struct into a certain state without additional allocations, like JetPack Compose does, but without...
A zero-cost wrapper which acts like `Property | T`. ```kt // pseudokode, won't kompile inline class PropertyOrValue { private val _value: Any? // = Property | T constructor(value: T) {...
something similar to https://play.kotlinlang.org/#eyJ2ZXJzaW9uIjoiMS4zLjMxIiwiY29kZSI6ImltcG9ydCBrb3RsaW4ucmVmbGVjdC5LQ2xhc3NcblxuaW50ZXJmYWNlIENvbXBvbmVudFxuXG4vLyB0aGUgd2F5IHRvIHByb2R1Y2UgY29tcG9uZW50c1xudHlwZWFsaWFzIENvbXBvbmVudEZhY3RvcnkgPSAoKSAtPiBDb21wb25lbnRcblxuZGF0YSBjbGFzcyBMYWJlbCh2YWwgdGV4dDogU3RyaW5nKTogQ29tcG9uZW50IHtcbiAgICAvLyBmYWN0b3J5IGNvbXBhbmlvbiAoZm9yIHRoZSBjYXNlIHlvdSBuZWVkIGNvbnN0cnVjdG9yIHdpdGggYXJndW1lbnRzKVxuICAgIGNvbXBhbmlvbiBvYmplY3QgRmFjdG9yeTogQ29tcG9uZW50RmFjdG9yeSB7XG4gICAgICAgIG92ZXJyaWRlIGZ1biBpbnZva2UoKSA9IExhYmVsKFwiRGVmYXVsdCB0ZXh0XCIpXG4gICAgfVxufVxuXG4vLyBjbGFzcyB3aXRoIG5vLWFyZyBjb25zdHJ1Y3RvclxuY2xhc3MgSW1hZ2U6IENvbXBvbmVudFxuXG5mdW4gbWFpbigpIHtcbiAgICAvLyBzYW1wbGUgb2YgbWFwIGFzc29jaWF0aW5nIGNsYXNzIHRvIGl0J3MgZmFjdG9yeVxuICAgIC8qdmFsIGZhY3RvcmllczogTWFwPEtDbGFzczxvdXQgQ29tcG9uZW50PiwgQ29tcG9uZW50RmFjdG9yeT4gPSBtYXBPZihcbiAgICAgICAgTGFiZWw6OmNsYXNzIHRvIExhYmVsLkZhY3RvcnksXG4gICAgICAgIEltYWdlOjpjbGFzcyB0byA6OkltYWdlXG4gICAgKSovXG4gICAgXG4gICAgLy8gbGlzdCBvZiBmYWN0b3JpZXNcbiAgICB2YWwgY29tcG9uZW50czogTGlzdDxDb21wb25lbnRGYWN0b3J5PiA9IGxpc3RPZihcbiAgICAgICAgTGFiZWwuRmFjdG9yeSxcbiAgICAgICAgOjpJbWFnZSAvLyBjb25zdHJ1Y3RvciByZWZlcmVuY2UgYXMgb2JqZWN0IGZhY3RvcnlcbiAgICApXG4gICAgY29tcG9uZW50cy5mb3JFYWNoIFxuICAgIFx0Ly8gY29uc3RydWN0aW5nIHRoZSBvYmplY3QgdmlhIGZhY3RvcnkgaW52b2NhdGlvblxuICAgICAgICB2YWwgY29tcG9uZW50ID0gaXQoKVxuICAgICAgICBwcmludGxuKGNvbXBvbmVudClcbiAgICB9XG59IiwicGxhdGZvcm0iOiJqYXZhIiwiYXJncyI6IiJ9 for structs
While committing a transaction, properties should update their values at most once, delivering the latest, consistent changes.
``` val prop = propertyOf(127) prop.compareAndSet(127, 128) // true prop.compareAndSet(128, 127) // false ``` References for boxed 128s differ. On unsuccessful CAS, a property may internally check whether compared values...