UNPKG

@reactivex/ix-esnext-esm

Version:

The Interactive Extensions for JavaScript

1 lines 3.2 kB
{"version":3,"sources":["iterable/operators/_refcountlist.ts"],"names":[],"mappings":"AAmBA;;GAEG;AACH,MAAM,OAAO,eAAe;IAA5B;QACU,UAAK,GAAQ,EAAE,CAAC;IAiB1B,CAAC;IAfC,KAAK;QACH,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IAClB,CAAC;IACD,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IACD,GAAG,CAAC,KAAa;QACf,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IACD,IAAI,CAAC,KAAQ;QACX,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,gEAAgE;IAChE,IAAI,KAAI,CAAC;CACV;AAED;;GAEG;AACH,MAAM,OAAO,YAAY;IAKvB,YAAY,WAAmB;QAFvB,WAAM,GAAW,CAAC,CAAC;QAGzB,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAChC,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC9C,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IACD,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IACD,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IACD,IAAI,WAAW,CAAC,KAAa;QAC3B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,CAAC;IACD,IAAI;QACF,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED,GAAG,CAAC,KAAa;QACf,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YAC1B,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;SAC/D;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC;QACnC,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC;QACtB,IAAI,EAAE,GAAG,CAAC,KAAK,KAAK,CAAC,EAAE;YACrB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SAC1B;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,IAAI,CAAC,KAAQ;QACX,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5E,CAAC;CACF","file":"_refcountlist.js","sourcesContent":["/**\n * @ignore\n */\nexport interface RefCount<T> {\n value: T;\n count: number;\n}\n\n/**\n * @ignore\n */\nexport interface IRefCountList<T> {\n clear(): void;\n readonly count: number;\n get(index: number): T;\n push(value: T): void;\n done(): void;\n}\n\n/**\n * @ignore\n */\nexport class MaxRefCountList<T> implements IRefCountList<T> {\n private _list: T[] = [];\n\n clear() {\n this._list = [];\n }\n get count() {\n return this._list.length;\n }\n get(index: number): T {\n return this._list[index];\n }\n push(value: T) {\n this._list.push(value);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n done() {}\n}\n\n/**\n * @ignore\n */\nexport class RefCountList<T> implements IRefCountList<T> {\n private _readerCount: number;\n private _list: Map<number, RefCount<T>>;\n private _count: number = 0;\n\n constructor(readerCount: number) {\n this._readerCount = readerCount;\n this._list = new Map<number, RefCount<T>>();\n }\n\n clear() {\n this._list.clear();\n }\n get count() {\n return this._count;\n }\n get readerCount() {\n return this._readerCount;\n }\n set readerCount(value: number) {\n this._readerCount = value;\n }\n done() {\n this._readerCount--;\n }\n\n get(index: number): T {\n if (!this._list.has(index)) {\n throw new Error('Element no longer available in the buffer.');\n }\n const res = this._list.get(index)!;\n const val = res.value;\n if (--res.count === 0) {\n this._list.delete(index);\n }\n return val;\n }\n\n push(value: T) {\n this._list.set(this._count++, { value: value, count: this._readerCount });\n }\n}\n"]}