live-set
Version:
Class representing a changing and transformable collection of items.
85 lines (69 loc) • 5.58 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _asap = _interopRequireDefault(require("asap"));
var CAPACITY = 1024;
var Scheduler =
/*#__PURE__*/
function () {
function Scheduler() {
(0, _classCallCheck2.default)(this, Scheduler);
(0, _defineProperty2.default)(this, "_queue", []);
(0, _defineProperty2.default)(this, "_isFlushing", false);
(0, _defineProperty2.default)(this, "_index", 0);
}
(0, _createClass2.default)(Scheduler, [{
key: "schedule",
value: function schedule(cb) {
var _this = this;
this._queue.push(function () {
try {
cb();
} catch (e) {
setTimeout(function () {
throw e;
}, 0);
}
});
if (this._queue.length === 1) {
(0, _asap.default)(function () {
_this.flush();
});
}
}
}, {
key: "flush",
value: function flush() {
// based on https://github.com/kriskowal/asap/blob/master/raw.js
if (this._isFlushing) return;
this._isFlushing = true;
var queue = this._queue;
while (this._index < queue.length) {
var currentIndex = this._index;
this._index += 1;
queue[currentIndex].call();
if (this._index > CAPACITY) {
for (var scan = 0, newLength = queue.length - this._index; scan < newLength; scan++) {
queue[scan] = queue[scan + this._index];
}
queue.length -= this._index;
this._index = 0;
}
}
queue.length = 0;
this._index = 0;
this._isFlushing = false;
}
}]);
return Scheduler;
}();
exports.default = Scheduler;
module.exports = exports.default;
module.exports.default = exports.default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9TY2hlZHVsZXIuanMiXSwibmFtZXMiOlsiQ0FQQUNJVFkiLCJTY2hlZHVsZXIiLCJjYiIsIl9xdWV1ZSIsInB1c2giLCJlIiwic2V0VGltZW91dCIsImxlbmd0aCIsImZsdXNoIiwiX2lzRmx1c2hpbmciLCJxdWV1ZSIsIl9pbmRleCIsImN1cnJlbnRJbmRleCIsImNhbGwiLCJzY2FuIiwibmV3TGVuZ3RoIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFFQTs7QUFFQSxJQUFNQSxRQUFRLEdBQUcsSUFBakI7O0lBRXFCQyxTOzs7OztrREFDTyxFO3VEQUNILEs7a0RBQ04sQzs7Ozs7NkJBRVJDLEUsRUFBYztBQUFBOztBQUNyQixXQUFLQyxNQUFMLENBQVlDLElBQVosQ0FBaUIsWUFBTTtBQUNyQixZQUFJO0FBQ0ZGLFVBQUFBLEVBQUU7QUFDSCxTQUZELENBRUUsT0FBT0csQ0FBUCxFQUFVO0FBQ1ZDLFVBQUFBLFVBQVUsQ0FBQyxZQUFNO0FBQ2Ysa0JBQU1ELENBQU47QUFDRCxXQUZTLEVBRVAsQ0FGTyxDQUFWO0FBR0Q7QUFDRixPQVJEOztBQVNBLFVBQUksS0FBS0YsTUFBTCxDQUFZSSxNQUFaLEtBQXVCLENBQTNCLEVBQThCO0FBQzVCLDJCQUFLLFlBQU07QUFDVCxVQUFBLEtBQUksQ0FBQ0MsS0FBTDtBQUNELFNBRkQ7QUFHRDtBQUNGOzs7NEJBRU87QUFDTjtBQUNBLFVBQUksS0FBS0MsV0FBVCxFQUFzQjtBQUN0QixXQUFLQSxXQUFMLEdBQW1CLElBQW5CO0FBQ0EsVUFBTUMsS0FBSyxHQUFHLEtBQUtQLE1BQW5COztBQUNBLGFBQU8sS0FBS1EsTUFBTCxHQUFjRCxLQUFLLENBQUNILE1BQTNCLEVBQW1DO0FBQ2pDLFlBQU1LLFlBQVksR0FBRyxLQUFLRCxNQUExQjtBQUNBLGFBQUtBLE1BQUwsSUFBZSxDQUFmO0FBQ0FELFFBQUFBLEtBQUssQ0FBQ0UsWUFBRCxDQUFMLENBQW9CQyxJQUFwQjs7QUFDQSxZQUFJLEtBQUtGLE1BQUwsR0FBY1gsUUFBbEIsRUFBNEI7QUFDMUIsZUFBSyxJQUFJYyxJQUFJLEdBQUcsQ0FBWCxFQUFjQyxTQUFTLEdBQUdMLEtBQUssQ0FBQ0gsTUFBTixHQUFlLEtBQUtJLE1BQW5ELEVBQTJERyxJQUFJLEdBQUdDLFNBQWxFLEVBQTZFRCxJQUFJLEVBQWpGLEVBQXFGO0FBQ25GSixZQUFBQSxLQUFLLENBQUNJLElBQUQsQ0FBTCxHQUFjSixLQUFLLENBQUNJLElBQUksR0FBRyxLQUFLSCxNQUFiLENBQW5CO0FBQ0Q7O0FBQ0RELFVBQUFBLEtBQUssQ0FBQ0gsTUFBTixJQUFnQixLQUFLSSxNQUFyQjtBQUNBLGVBQUtBLE1BQUwsR0FBYyxDQUFkO0FBQ0Q7QUFDRjs7QUFDREQsTUFBQUEsS0FBSyxDQUFDSCxNQUFOLEdBQWUsQ0FBZjtBQUNBLFdBQUtJLE1BQUwsR0FBYyxDQUFkO0FBQ0EsV0FBS0YsV0FBTCxHQUFtQixLQUFuQjtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLyogQGZsb3cgKi9cblxuaW1wb3J0IGFzYXAgZnJvbSAnYXNhcCc7XG5cbmNvbnN0IENBUEFDSVRZID0gMTAyNDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2NoZWR1bGVyIHtcbiAgX3F1ZXVlOiBBcnJheTwoKT0+dm9pZD4gPSBbXTtcbiAgX2lzRmx1c2hpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgX2luZGV4OiBudW1iZXIgPSAwO1xuXG4gIHNjaGVkdWxlKGNiOiAoKT0+dm9pZCkge1xuICAgIHRoaXMuX3F1ZXVlLnB1c2goKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY2IoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfSwgMCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHRoaXMuX3F1ZXVlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgYXNhcCgoKSA9PiB7XG4gICAgICAgIHRoaXMuZmx1c2goKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZsdXNoKCkge1xuICAgIC8vIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9rcmlza293YWwvYXNhcC9ibG9iL21hc3Rlci9yYXcuanNcbiAgICBpZiAodGhpcy5faXNGbHVzaGluZykgcmV0dXJuO1xuICAgIHRoaXMuX2lzRmx1c2hpbmcgPSB0cnVlO1xuICAgIGNvbnN0IHF1ZXVlID0gdGhpcy5fcXVldWU7XG4gICAgd2hpbGUgKHRoaXMuX2luZGV4IDwgcXVldWUubGVuZ3RoKSB7XG4gICAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0aGlzLl9pbmRleDtcbiAgICAgIHRoaXMuX2luZGV4ICs9IDE7XG4gICAgICBxdWV1ZVtjdXJyZW50SW5kZXhdLmNhbGwoKTtcbiAgICAgIGlmICh0aGlzLl9pbmRleCA+IENBUEFDSVRZKSB7XG4gICAgICAgIGZvciAobGV0IHNjYW4gPSAwLCBuZXdMZW5ndGggPSBxdWV1ZS5sZW5ndGggLSB0aGlzLl9pbmRleDsgc2NhbiA8IG5ld0xlbmd0aDsgc2NhbisrKSB7XG4gICAgICAgICAgcXVldWVbc2Nhbl0gPSBxdWV1ZVtzY2FuICsgdGhpcy5faW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIHF1ZXVlLmxlbmd0aCAtPSB0aGlzLl9pbmRleDtcbiAgICAgICAgdGhpcy5faW5kZXggPSAwO1xuICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5sZW5ndGggPSAwO1xuICAgIHRoaXMuX2luZGV4ID0gMDtcbiAgICB0aGlzLl9pc0ZsdXNoaW5nID0gZmFsc2U7XG4gIH1cbn1cbiJdfQ==