mix-async-generator
Version:
``` npm i mix-async-generator ```
63 lines • 6.34 kB
JavaScript
"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=