import { Transaction } from "../_tx" import { Operator } from "./_base" export abstract class InitialAndChanges extends Operator { private b: boolean = false public activate(initialNeeded: boolean): void { super.activate(initialNeeded) this.b = true } public dispose(): void { this.b = false super.dispose() } public next(tx: Transaction, val: T): void { if (this.b) { this.nextChange(tx, val) } else { this.nextInitial(tx, val) } } public abstract nextInitial(tx: Transaction, val: T): void public abstract nextChange(tx: Transaction, val: T): void } export abstract class Changes extends InitialAndChanges { public nextInitial(tx: Transaction, val: T): void { // no-op } } export abstract class Initial extends InitialAndChanges { public nextChange(tx: Transaction, val: T): void { // no-op } }