mix-async-generator
Version:
``` npm i mix-async-generator ```
59 lines • 6.19 kB
JavaScript
/**快速队列
* 提供更简单更快的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