UNPKG

circularr

Version:
160 lines (136 loc) 4.03 kB
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); 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 _Symbol$iterator; _Symbol$iterator = Symbol.iterator; var Circularr = function () { (0, _createClass2.default)(Circularr, null, [{ key: "from", value: function from(source) { var arr = new Circularr(source.length); for (var i = 0; i < source.length; i++) { arr._data[i] = source[i]; } return arr; } }]); function Circularr(length) { (0, _classCallCheck2.default)(this, Circularr); (0, _defineProperty2.default)(this, "_data", void 0); (0, _defineProperty2.default)(this, "_index", void 0); this._data = new Array(length); this._index = 0; } (0, _createClass2.default)(Circularr, [{ key: _Symbol$iterator, value: _regenerator.default.mark(function value() { var i; return _regenerator.default.wrap(function value$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: i = 0; case 1: if (!(i < this._data.length)) { _context.next = 7; break; } _context.next = 4; return this._data[(i + this._index) % this._data.length]; case 4: i++; _context.next = 1; break; case 7: case "end": return _context.stop(); } } }, value, this); }) }, { key: "fill", value: function fill(value) { for (var i = 0; i < this._data.length; i++) { this._data[i] = value; } this._index = 0; return this; } }, { key: "clear", value: function clear() { this._data = new Array(this._data.length); this._index = 0; return this; } }, { key: "shift", value: function shift(value) { var returnValue = this._data[this._index]; this._data[this._index] = value; this._index = (this._index + 1) % this._data.length; return returnValue; } }, { key: "unshift", value: function unshift(value) { this._index = (this._index + this._data.length - 1) % this._data.length; var returnValue = this._data[this._index]; this._data[this._index] = value; return returnValue; } }, { key: "slice", value: function slice(startIndex, endIndex) { return Circularr.from(Array.from(this).slice(startIndex, endIndex)); } }, { key: "trim", value: function trim() { var data = Array.from(this); var startIndex = 0; var endIndex = data.length; for (var i = 0; i < data.length; i++) { if (typeof data[i] !== 'undefined') { break; } startIndex++; } for (var _i = data.length - 1; _i >= 0; --_i) { if (typeof data[_i] !== 'undefined') { break; } endIndex--; } return Circularr.from(data.slice(startIndex, endIndex)); } }, { key: "at", value: function at(index) { if (index < 0 || index >= this._data.length) { return; } return this._data[(index + this._index) % this._data.length]; } }, { key: "wrapAt", value: function wrapAt(index) { return this._data[(index + this._index) % this._data.length]; } }, { key: "length", get: function get() { return this._data.length; } }]); return Circularr; }(); exports.default = Circularr; //# sourceMappingURL=index.js.map