UNPKG

@tgsnake/core

Version:

Pure Telegram MTProto library for nodejs

53 lines (52 loc) 1.35 kB
"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;