another big refactor
This commit is contained in:
27
src/lib/observable/DummyObservable.hx
Normal file
27
src/lib/observable/DummyObservable.hx
Normal file
@@ -0,0 +1,27 @@
|
||||
package lib.observable;
|
||||
|
||||
using tink.CoreApi;
|
||||
|
||||
class DummyObservable<T> implements Observable<T> {
|
||||
private var value:T;
|
||||
|
||||
private function new(value:T) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public function set(value:T) {
|
||||
throw new haxe.exceptions.NotImplementedException();
|
||||
}
|
||||
|
||||
public function get():T {
|
||||
return this.value;
|
||||
}
|
||||
|
||||
public function subscribe(callback:Callback<T>):CallbackLink {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static function dummy<T>(value: T): Observable<T> {
|
||||
return new DummyObservable<T>(value);
|
||||
}
|
||||
}
|
||||
9
src/lib/observable/Observable.hx
Normal file
9
src/lib/observable/Observable.hx
Normal file
@@ -0,0 +1,9 @@
|
||||
package lib.observable;
|
||||
|
||||
using tink.CoreApi;
|
||||
|
||||
interface Observable<T> {
|
||||
public function set(value:T): Void;
|
||||
public function get():T;
|
||||
public function subscribe(callback:Callback<T>):CallbackLink;
|
||||
}
|
||||
56
src/lib/observable/ObservableArray.hx
Normal file
56
src/lib/observable/ObservableArray.hx
Normal file
@@ -0,0 +1,56 @@
|
||||
package lib.observable;
|
||||
|
||||
class ObservableArray<T> extends ObservableValue<Array<T>> {
|
||||
public function new(value: Array<T>) {
|
||||
super(value);
|
||||
}
|
||||
|
||||
public function insert(pos: Int, x: T):Void {
|
||||
this.value.insert(pos,x);
|
||||
this.callbacks.invoke(this.value);
|
||||
}
|
||||
|
||||
public function pop(): Null<T> {
|
||||
var poped = this.pop();
|
||||
this.callbacks.invoke(this.value);
|
||||
return poped;
|
||||
}
|
||||
|
||||
public function push(x: T):Int {
|
||||
var i = this.value.push(x);
|
||||
this.callbacks.invoke(this.value);
|
||||
return i;
|
||||
}
|
||||
|
||||
public function remove(x: T): Bool {
|
||||
var b = this.value.remove(x);
|
||||
this.callbacks.invoke(this.value);
|
||||
return b;
|
||||
}
|
||||
|
||||
public function resize(len: Int) {
|
||||
this.value.resize(len);
|
||||
this.callbacks.invoke(this.value);
|
||||
}
|
||||
|
||||
public function reverse() {
|
||||
this.value.reverse();
|
||||
this.callbacks.invoke(this.value);
|
||||
}
|
||||
|
||||
public function shift(): Null<T> {
|
||||
var e = this.value.shift();
|
||||
this.callbacks.invoke(this.value);
|
||||
return e;
|
||||
}
|
||||
|
||||
public function sort(f:(T, T) -> Int):Void {
|
||||
this.value.sort(f);
|
||||
this.callbacks.invoke(this.value);
|
||||
}
|
||||
|
||||
public function unshift(x: T):Void {
|
||||
this.value.unshift(x);
|
||||
this.callbacks.invoke(this.value);
|
||||
}
|
||||
}
|
||||
28
src/lib/observable/ObservableValue.hx
Normal file
28
src/lib/observable/ObservableValue.hx
Normal file
@@ -0,0 +1,28 @@
|
||||
package lib.observable;
|
||||
|
||||
using tink.CoreApi;
|
||||
|
||||
class ObservableValue<T> implements Observable<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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user