Compare commits

..

8 Commits

Author SHA1 Message Date
92592d9e9a 6.0.11 2023-11-13 16:44:39 +01:00
a786c43970 fix(core): update 2023-11-13 16:44:38 +01:00
66658dc877 6.0.10 2023-11-13 16:43:07 +01:00
be78d74124 fix(core): update 2023-11-13 16:43:06 +01:00
bde0404777 6.0.9 2023-11-13 16:27:05 +01:00
dfe973f5d8 fix(core): update 2023-11-13 16:27:04 +01:00
326030456f 6.0.8 2023-11-13 14:59:04 +01:00
184dc98127 fix(core): update 2023-11-13 14:59:03 +01:00
3 changed files with 19 additions and 7 deletions

View File

@ -1,6 +1,6 @@
{
"name": "@push.rocks/lik",
"version": "6.0.7",
"version": "6.0.11",
"private": false,
"description": "light little helpers for node",
"main": "dist_ts/index.js",

View File

@ -3,6 +3,6 @@
*/
export const commitinfo = {
name: '@push.rocks/lik',
version: '6.0.7',
version: '6.0.11',
description: 'light little helpers for node'
}

View File

@ -1,21 +1,20 @@
import * as plugins from './lik.plugins.js';
export class BackpressuredArray<T> {
private data: T[];
public data: T[];
private highWaterMark: number;
public hasSpace: plugins.smartrx.rxjs.Subject<void>;
public hasSpace = new plugins.smartrx.rxjs.Subject<'hasSpace'>();
constructor(highWaterMark: number = 16) {
this.data = [];
this.highWaterMark = highWaterMark;
this.hasSpace = new plugins.smartrx.rxjs.Subject<void>();
}
push(item: T): boolean {
this.data.push(item);
const spaceAvailable = this.checkSpaceAvailable();
if (spaceAvailable) {
this.hasSpace.next();
this.hasSpace.next('hasSpace');
}
return spaceAvailable
}
@ -23,7 +22,7 @@ export class BackpressuredArray<T> {
shift(): T | undefined {
const item = this.data.shift();
if (this.checkSpaceAvailable()) {
this.hasSpace.next();
this.hasSpace.next('hasSpace');
}
return item;
}
@ -31,4 +30,17 @@ export class BackpressuredArray<T> {
checkSpaceAvailable(): boolean {
return this.data.length < this.highWaterMark;
}
waitForSpace(): Promise<void> {
return new Promise<void>((resolve) => {
if (this.checkSpaceAvailable()) {
resolve();
} else {
const subscription = this.hasSpace.subscribe(() => {
subscription.unsubscribe();
resolve();
});
}
});
}
}