UNPKG

mix-async-generator

Version:

``` npm i mix-async-generator ```

63 lines 6.34 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FastQuene = void 0; /**快速队列 * 提供更简单更快的push * 以及更快的shift:保证不会生成多余的array副本 */ class FastQuene { constructor() { this._size = 0; this._arr = []; this._firstCursor = 0; } push(item) { this._arr[this._arr.length] = item; this._updateSize(); return item; } shift() { const { _firstCursor, _arr } = this; if (_firstCursor < _arr.length) { const res = _arr[_firstCursor]; _arr[_firstCursor] = undefined; ++this._firstCursor; this._updateSize(); return res; } } remove(item) { const { _firstCursor, _arr } = this; const index = _arr.indexOf(item); if (index === -1) { return false; } /// 如果左边的比右边的多,那么右边的往左边挪动 if (index - _firstCursor > _arr.length - 1 - index) { const endLen = _arr.length - 1; for (let i = index; i < endLen; ++i) { _arr[i] = _arr[i + 1]; } _arr.length = endLen; } /// 否则左边的往右边挪动 else { const startIndex = _firstCursor + 1; for (let i = index; i >= startIndex; --i) { _arr[i] = _arr[i - 1]; } _arr[_firstCursor] = undefined; ++this._firstCursor; } this._updateSize(); return true; } _updateSize() { this._size = this._arr.length - this._firstCursor; } get size() { return this._size; } } exports.FastQuene = FastQuene; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmFzdFF1ZW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL0Zhc3RRdWVuZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7O0dBR0c7QUFDSCxNQUFhLFNBQVM7SUFBdEI7UUFDVSxVQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsU0FBSSxHQUF5QixFQUFFLENBQUM7UUFDaEMsaUJBQVksR0FBRyxDQUFDLENBQUM7SUFnRDNCLENBQUM7SUEvQ0MsSUFBSSxDQUFDLElBQU87UUFDVixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ25DLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxLQUFLO1FBQ0gsTUFBTSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDcEMsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUM5QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLFNBQVMsQ0FBQztZQUMvQixFQUFFLElBQUksQ0FBQyxZQUFZLENBQUM7WUFDcEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25CLE9BQU8sR0FBRyxDQUFDO1NBQ1o7SUFDSCxDQUFDO0lBQ0QsTUFBTSxDQUFDLElBQU87UUFDWixNQUFNLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztRQUNwQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ2hCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCx5QkFBeUI7UUFDekIsSUFBSSxLQUFLLEdBQUcsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLEtBQUssRUFBRTtZQUNsRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUMvQixLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO2dCQUNuQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUN2QjtZQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1NBQ3RCO1FBQ0QsY0FBYzthQUNUO1lBQ0gsTUFBTSxVQUFVLEdBQUcsWUFBWSxHQUFHLENBQUMsQ0FBQztZQUNwQyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLElBQUksVUFBVSxFQUFFLEVBQUUsQ0FBQyxFQUFFO2dCQUN4QyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUN2QjtZQUNELElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxTQUFTLENBQUM7WUFDL0IsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQ3JCO1FBQ0QsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNPLFdBQVc7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQ3BELENBQUM7SUFDRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztDQUNGO0FBbkRELDhCQW1EQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKuW/q+mAn+mYn+WIl1xyXG4gKiDmj5Dkvpvmm7TnroDljZXmm7Tlv6vnmoRwdXNoXHJcbiAqIOS7peWPiuabtOW/q+eahHNoaWZ077ya5L+d6K+B5LiN5Lya55Sf5oiQ5aSa5L2Z55qEYXJyYXnlia/mnKxcclxuICovXHJcbmV4cG9ydCBjbGFzcyBGYXN0UXVlbmU8VD4ge1xyXG4gIHByaXZhdGUgX3NpemUgPSAwO1xyXG4gIHByaXZhdGUgX2FycjogQXJyYXk8VCB8IHVuZGVmaW5lZD4gPSBbXTtcclxuICBwcml2YXRlIF9maXJzdEN1cnNvciA9IDA7XHJcbiAgcHVzaChpdGVtOiBUKSB7XHJcbiAgICB0aGlzLl9hcnJbdGhpcy5fYXJyLmxlbmd0aF0gPSBpdGVtO1xyXG4gICAgdGhpcy5fdXBkYXRlU2l6ZSgpO1xyXG4gICAgcmV0dXJuIGl0ZW07XHJcbiAgfVxyXG4gIHNoaWZ0KCkge1xyXG4gICAgY29uc3QgeyBfZmlyc3RDdXJzb3IsIF9hcnIgfSA9IHRoaXM7XHJcbiAgICBpZiAoX2ZpcnN0Q3Vyc29yIDwgX2Fyci5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgcmVzID0gX2FycltfZmlyc3RDdXJzb3JdO1xyXG4gICAgICBfYXJyW19maXJzdEN1cnNvcl0gPSB1bmRlZmluZWQ7XHJcbiAgICAgICsrdGhpcy5fZmlyc3RDdXJzb3I7XHJcbiAgICAgIHRoaXMuX3VwZGF0ZVNpemUoKTtcclxuICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuICB9XHJcbiAgcmVtb3ZlKGl0ZW06IFQpIHtcclxuICAgIGNvbnN0IHsgX2ZpcnN0Q3Vyc29yLCBfYXJyIH0gPSB0aGlzO1xyXG4gICAgY29uc3QgaW5kZXggPSBfYXJyLmluZGV4T2YoaXRlbSk7XHJcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vLyDlpoLmnpzlt6bovrnnmoTmr5Tlj7PovrnnmoTlpJrvvIzpgqPkuYjlj7PovrnnmoTlvoDlt6bovrnmjKrliqhcclxuICAgIGlmIChpbmRleCAtIF9maXJzdEN1cnNvciA+IF9hcnIubGVuZ3RoIC0gMSAtIGluZGV4KSB7XHJcbiAgICAgIGNvbnN0IGVuZExlbiA9IF9hcnIubGVuZ3RoIC0gMTtcclxuICAgICAgZm9yIChsZXQgaSA9IGluZGV4OyBpIDwgZW5kTGVuOyArK2kpIHtcclxuICAgICAgICBfYXJyW2ldID0gX2FycltpICsgMV07XHJcbiAgICAgIH1cclxuICAgICAgX2Fyci5sZW5ndGggPSBlbmRMZW47XHJcbiAgICB9XHJcbiAgICAvLy8g5ZCm5YiZ5bem6L6555qE5b6A5Y+z6L655oyq5YqoXHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IF9maXJzdEN1cnNvciArIDE7XHJcbiAgICAgIGZvciAobGV0IGkgPSBpbmRleDsgaSA+PSBzdGFydEluZGV4OyAtLWkpIHtcclxuICAgICAgICBfYXJyW2ldID0gX2FycltpIC0gMV07XHJcbiAgICAgIH1cclxuICAgICAgX2FycltfZmlyc3RDdXJzb3JdID0gdW5kZWZpbmVkO1xyXG4gICAgICArK3RoaXMuX2ZpcnN0Q3Vyc29yO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fdXBkYXRlU2l6ZSgpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3VwZGF0ZVNpemUoKSB7XHJcbiAgICB0aGlzLl9zaXplID0gdGhpcy5fYXJyLmxlbmd0aCAtIHRoaXMuX2ZpcnN0Q3Vyc29yO1xyXG4gIH1cclxuICBnZXQgc2l6ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zaXplO1xyXG4gIH1cclxufVxyXG4iXX0=