UNPKG

mix-async-generator

Version:

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

59 lines 6.19 kB
/**快速队列 * 提供更简单更快的push * 以及更快的shift:保证不会生成多余的array副本 */ export 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; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmFzdFF1ZW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL0Zhc3RRdWVuZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sU0FBUztJQUF0QjtRQUNVLFVBQUssR0FBRyxDQUFDLENBQUM7UUFDVixTQUFJLEdBQXlCLEVBQUUsQ0FBQztRQUNoQyxpQkFBWSxHQUFHLENBQUMsQ0FBQztJQWdEM0IsQ0FBQztJQS9DQyxJQUFJLENBQUMsSUFBTztRQUNWLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDbkMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELEtBQUs7UUFDSCxNQUFNLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztRQUNwQyxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQzlCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsU0FBUyxDQUFDO1lBQy9CLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUNwQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkIsT0FBTyxHQUFHLENBQUM7U0FDWjtJQUNILENBQUM7SUFDRCxNQUFNLENBQUMsSUFBTztRQUNaLE1BQU0sRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ3BDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDaEIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELHlCQUF5QjtRQUN6QixJQUFJLEtBQUssR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsS0FBSyxFQUFFO1lBQ2xELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQy9CLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7Z0JBQ25DLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQ3ZCO1lBQ0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7U0FDdEI7UUFDRCxjQUFjO2FBQ1Q7WUFDSCxNQUFNLFVBQVUsR0FBRyxZQUFZLEdBQUcsQ0FBQyxDQUFDO1lBQ3BDLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsSUFBSSxVQUFVLEVBQUUsRUFBRSxDQUFDLEVBQUU7Z0JBQ3hDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQ3ZCO1lBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLFNBQVMsQ0FBQztZQUMvQixFQUFFLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDckI7UUFDRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ08sV0FBVztRQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDcEQsQ0FBQztJQUNELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKirlv6vpgJ/pmJ/liJdcclxuICog5o+Q5L6b5pu0566A5Y2V5pu05b+r55qEcHVzaFxyXG4gKiDku6Xlj4rmm7Tlv6vnmoRzaGlmdO+8muS/neivgeS4jeS8mueUn+aIkOWkmuS9meeahGFycmF55Ymv5pysXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRmFzdFF1ZW5lPFQ+IHtcclxuICBwcml2YXRlIF9zaXplID0gMDtcclxuICBwcml2YXRlIF9hcnI6IEFycmF5PFQgfCB1bmRlZmluZWQ+ID0gW107XHJcbiAgcHJpdmF0ZSBfZmlyc3RDdXJzb3IgPSAwO1xyXG4gIHB1c2goaXRlbTogVCkge1xyXG4gICAgdGhpcy5fYXJyW3RoaXMuX2Fyci5sZW5ndGhdID0gaXRlbTtcclxuICAgIHRoaXMuX3VwZGF0ZVNpemUoKTtcclxuICAgIHJldHVybiBpdGVtO1xyXG4gIH1cclxuICBzaGlmdCgpIHtcclxuICAgIGNvbnN0IHsgX2ZpcnN0Q3Vyc29yLCBfYXJyIH0gPSB0aGlzO1xyXG4gICAgaWYgKF9maXJzdEN1cnNvciA8IF9hcnIubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IHJlcyA9IF9hcnJbX2ZpcnN0Q3Vyc29yXTtcclxuICAgICAgX2FycltfZmlyc3RDdXJzb3JdID0gdW5kZWZpbmVkO1xyXG4gICAgICArK3RoaXMuX2ZpcnN0Q3Vyc29yO1xyXG4gICAgICB0aGlzLl91cGRhdGVTaXplKCk7XHJcbiAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJlbW92ZShpdGVtOiBUKSB7XHJcbiAgICBjb25zdCB7IF9maXJzdEN1cnNvciwgX2FyciB9ID0gdGhpcztcclxuICAgIGNvbnN0IGluZGV4ID0gX2Fyci5pbmRleE9mKGl0ZW0pO1xyXG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLy8g5aaC5p6c5bem6L6555qE5q+U5Y+z6L6555qE5aSa77yM6YKj5LmI5Y+z6L6555qE5b6A5bem6L655oyq5YqoXHJcbiAgICBpZiAoaW5kZXggLSBfZmlyc3RDdXJzb3IgPiBfYXJyLmxlbmd0aCAtIDEgLSBpbmRleCkge1xyXG4gICAgICBjb25zdCBlbmRMZW4gPSBfYXJyLmxlbmd0aCAtIDE7XHJcbiAgICAgIGZvciAobGV0IGkgPSBpbmRleDsgaSA8IGVuZExlbjsgKytpKSB7XHJcbiAgICAgICAgX2FycltpXSA9IF9hcnJbaSArIDFdO1xyXG4gICAgICB9XHJcbiAgICAgIF9hcnIubGVuZ3RoID0gZW5kTGVuO1xyXG4gICAgfVxyXG4gICAgLy8vIOWQpuWImeW3pui+ueeahOW+gOWPs+i+ueaMquWKqFxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBfZmlyc3RDdXJzb3IgKyAxO1xyXG4gICAgICBmb3IgKGxldCBpID0gaW5kZXg7IGkgPj0gc3RhcnRJbmRleDsgLS1pKSB7XHJcbiAgICAgICAgX2FycltpXSA9IF9hcnJbaSAtIDFdO1xyXG4gICAgICB9XHJcbiAgICAgIF9hcnJbX2ZpcnN0Q3Vyc29yXSA9IHVuZGVmaW5lZDtcclxuICAgICAgKyt0aGlzLl9maXJzdEN1cnNvcjtcclxuICAgIH1cclxuICAgIHRoaXMuX3VwZGF0ZVNpemUoKTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuICBwcml2YXRlIF91cGRhdGVTaXplKCkge1xyXG4gICAgdGhpcy5fc2l6ZSA9IHRoaXMuX2Fyci5sZW5ndGggLSB0aGlzLl9maXJzdEN1cnNvcjtcclxuICB9XHJcbiAgZ2V0IHNpemUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2l6ZTtcclxuICB9XHJcbn1cclxuIl19