package lib.observable; using tink.CoreApi; class ObservableValue implements IObservable { private var value:T; private var callbacks:CallbackList = new CallbackList(); public function new(value:T) { this.value = value; } public function set(value:T) { if (value != this.value) { this.value = value; callbacks.invoke(value); } } public function get():T { return value; } public function subscribe(callback:Callback):CallbackLink { callback.invoke(value); return callbacks.add(callback); } }