Registry.ts
55 lines
| 1.4 KiB
| video/mp2t
|
TypeScriptLexer
|
|
r53 | import { TraceSource } from "./TraceSource"; | ||
| import { argumentNotNull } from "../safe"; | ||||
| import { IDestroyable } from "../interfaces"; | ||||
| export class Registry { | ||||
| static readonly instance = new Registry(); | ||||
| private _registry: object = new Object(); | ||||
| private _listeners: object = new Object(); | ||||
| private _nextCookie: number = 1; | ||||
| get(id: any): TraceSource { | ||||
| argumentNotNull(id, "id"); | ||||
| if (this._registry[id]) | ||||
| return this._registry[id]; | ||||
| const source = new TraceSource(id); | ||||
| this._registry[id] = source; | ||||
| this._onNewSource(source); | ||||
| return source; | ||||
| } | ||||
| add(id: any, source: TraceSource) { | ||||
| argumentNotNull(id, "id"); | ||||
| argumentNotNull(source, "source"); | ||||
| this._registry[id] = source; | ||||
| this._onNewSource(source); | ||||
| } | ||||
| _onNewSource(source: TraceSource) { | ||||
| for (const i in this._listeners) | ||||
| this._listeners[i].call(null, source); | ||||
| } | ||||
| on(handler: (source: TraceSource) => void): IDestroyable { | ||||
| argumentNotNull(handler, "handler"); | ||||
| const me = this; | ||||
| const cookie = this._nextCookie++; | ||||
| this._listeners[cookie] = handler; | ||||
| for (const i in this._registry) | ||||
| handler(this._registry[i]); | ||||
| return { | ||||
| destroy() { | ||||
| delete me._listeners[cookie]; | ||||
| } | ||||
| }; | ||||
| } | ||||
| } | ||||
