29 lines
537 B
Haxe
29 lines
537 B
Haxe
package lib.observable;
|
|
|
|
using tink.CoreApi;
|
|
|
|
class ObservableValue<T> implements IObservable<T> {
|
|
private var value:T;
|
|
private var callbacks:CallbackList<T> = 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<T>):CallbackLink {
|
|
callback.invoke(value);
|
|
return callbacks.add(callback);
|
|
}
|
|
}
|