astx
Version:
super powerful structural search and replace for JavaScript and TypeScript to automate your refactoring
72 lines (61 loc) • 2.02 kB
JavaScript
"use strict";
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 RingBuffer = /*#__PURE__*/function () {
function RingBuffer(capacity) {
(0, _classCallCheck2["default"])(this, RingBuffer);
(0, _defineProperty2["default"])(this, "buffer", void 0);
(0, _defineProperty2["default"])(this, "_size", 0);
(0, _defineProperty2["default"])(this, "offset", 0);
this.buffer = new Array(capacity);
}
(0, _createClass2["default"])(RingBuffer, [{
key: "push",
value: function push() {
for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {
values[_key] = arguments[_key];
}
for (var _i = 0, _values = values; _i < _values.length; _i++) {
var value = _values[_i];
if (this.isFull) {
throw new Error("buffer is full");
}
var i = this.offset + this._size++;
this.buffer[i < this.buffer.length ? i : i - this.buffer.length] = value;
}
}
}, {
key: "pull",
value: function pull() {
if (!this._size) return undefined;
var result = this.buffer[this.offset];
this.offset++;
if (this.offset === this.buffer.length) this.offset = 0;
this._size--;
return result;
}
}, {
key: "size",
get: function get() {
return this._size;
}
}, {
key: "isFull",
get: function get() {
return this._size === this.buffer.length;
}
}, {
key: "capacity",
get: function get() {
return this.buffer.length;
}
}]);
return RingBuffer;
}();
exports["default"] = RingBuffer;