@tgsnake/core
Version:
Pure Telegram MTProto library for nodejs
53 lines (52 loc) • 1.35 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Queue = void 0;
class Queue {
_maxsize;
_queues;
_possiblePut;
_resolvePut;
_possibleGet;
_resolveGet;
constructor(maxsize = 0) {
this._maxsize = maxsize;
this._queues = [];
this._possiblePut = this._queues.length < maxsize;
this._resolvePut = (_value) => { };
this._possibleGet = new Promise((resolve) => {
this._resolveGet = resolve;
});
}
async put(value) {
if (this.full)
await this._possiblePut;
this._queues.push(value);
this._resolveGet(true);
this._possiblePut = new Promise((resolve) => {
this._resolvePut = resolve;
});
}
async get() {
if (this.empty)
await this._possibleGet;
const value = this._queues.shift();
this._resolvePut(true);
this._possibleGet = new Promise((resolve) => {
this._resolveGet = resolve;
});
return value;
}
get full() {
return this.maxsize <= 0 ? false : this.size >= this.maxsize;
}
get size() {
return this._queues.length;
}
get empty() {
return !this.size;
}
get maxsize() {
return this._maxsize;
}
}
exports.Queue = Queue;