123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366 |
- "use strict";
- Object.defineProperty(exports, "t", {
- value: true
- });
- exports.default = exports.LinkNode = exports.LinkListIterator = void 0;
- var _Base = _interopRequireDefault(require("./Base"));
- var _ContainerBase = require("../ContainerBase");
- function _interopRequireDefault(t) {
- return t && t.t ? t : {
- default: t
- };
- }
- class LinkNode {
- constructor(t) {
- this.L = undefined;
- this.j = undefined;
- this.O = undefined;
- this.L = t;
- }
- }
- exports.LinkNode = LinkNode;
- class LinkListIterator extends _ContainerBase.ContainerIterator {
- constructor(t, i, s) {
- super(s);
- this.I = t;
- this.S = i;
- if (this.iteratorType === 0) {
- this.pre = function() {
- if (this.I.j === this.S) {
- throw new RangeError("LinkList iterator access denied!");
- }
- this.I = this.I.j;
- return this;
- };
- this.next = function() {
- if (this.I === this.S) {
- throw new RangeError("LinkList iterator access denied!");
- }
- this.I = this.I.O;
- return this;
- };
- } else {
- this.pre = function() {
- if (this.I.O === this.S) {
- throw new RangeError("LinkList iterator access denied!");
- }
- this.I = this.I.O;
- return this;
- };
- this.next = function() {
- if (this.I === this.S) {
- throw new RangeError("LinkList iterator access denied!");
- }
- this.I = this.I.j;
- return this;
- };
- }
- }
- get pointer() {
- if (this.I === this.S) {
- throw new RangeError("LinkList iterator access denied!");
- }
- return this.I.L;
- }
- set pointer(t) {
- if (this.I === this.S) {
- throw new RangeError("LinkList iterator access denied!");
- }
- this.I.L = t;
- }
- equals(t) {
- return this.I === t.I;
- }
- copy() {
- return new LinkListIterator(this.I, this.S, this.iteratorType);
- }
- }
- exports.LinkListIterator = LinkListIterator;
- class LinkList extends _Base.default {
- constructor(t = []) {
- super();
- this.S = new LinkNode;
- this.V = undefined;
- this.G = undefined;
- t.forEach((t => this.pushBack(t)));
- }
- clear() {
- this.o = 0;
- this.V = this.G = undefined;
- this.S.j = this.S.O = undefined;
- }
- begin() {
- return new LinkListIterator(this.V || this.S, this.S);
- }
- end() {
- return new LinkListIterator(this.S, this.S);
- }
- rBegin() {
- return new LinkListIterator(this.G || this.S, this.S, 1);
- }
- rEnd() {
- return new LinkListIterator(this.S, this.S, 1);
- }
- front() {
- return this.V ? this.V.L : undefined;
- }
- back() {
- return this.G ? this.G.L : undefined;
- }
- forEach(t) {
- if (!this.o) return;
- let i = this.V;
- let s = 0;
- while (i !== this.S) {
- t(i.L, s++);
- i = i.O;
- }
- }
- getElementByPos(t) {
- if (t < 0 || t > this.o - 1) {
- throw new RangeError;
- }
- let i = this.V;
- while (t--) {
- i = i.O;
- }
- return i.L;
- }
- eraseElementByPos(t) {
- if (t < 0 || t > this.o - 1) {
- throw new RangeError;
- }
- if (t === 0) this.popFront(); else if (t === this.o - 1) this.popBack(); else {
- let i = this.V;
- while (t--) {
- i = i.O;
- }
- i = i;
- const s = i.j;
- const e = i.O;
- e.j = s;
- s.O = e;
- this.o -= 1;
- }
- }
- eraseElementByValue(t) {
- while (this.V && this.V.L === t) this.popFront();
- while (this.G && this.G.L === t) this.popBack();
- if (!this.V) return;
- let i = this.V;
- while (i !== this.S) {
- if (i.L === t) {
- const t = i.j;
- const s = i.O;
- s.j = t;
- t.O = s;
- this.o -= 1;
- }
- i = i.O;
- }
- }
- eraseElementByIterator(t) {
- const i = t.I;
- if (i === this.S) {
- throw new RangeError("Invalid iterator");
- }
- t = t.next();
- if (this.V === i) this.popFront(); else if (this.G === i) this.popBack(); else {
- const t = i.j;
- const s = i.O;
- s.j = t;
- t.O = s;
- this.o -= 1;
- }
- return t;
- }
- pushBack(t) {
- this.o += 1;
- const i = new LinkNode(t);
- if (!this.G) {
- this.V = this.G = i;
- this.S.O = this.V;
- this.V.j = this.S;
- } else {
- this.G.O = i;
- i.j = this.G;
- this.G = i;
- }
- this.G.O = this.S;
- this.S.j = this.G;
- }
- popBack() {
- if (!this.G) return;
- this.o -= 1;
- if (this.V === this.G) {
- this.V = this.G = undefined;
- this.S.O = undefined;
- } else {
- this.G = this.G.j;
- this.G.O = this.S;
- }
- this.S.j = this.G;
- }
- setElementByPos(t, i) {
- if (t < 0 || t > this.o - 1) {
- throw new RangeError;
- }
- let s = this.V;
- while (t--) {
- s = s.O;
- }
- s.L = i;
- }
- insert(t, i, s = 1) {
- if (t < 0 || t > this.o) {
- throw new RangeError;
- }
- if (s <= 0) return;
- if (t === 0) {
- while (s--) this.pushFront(i);
- } else if (t === this.o) {
- while (s--) this.pushBack(i);
- } else {
- let e = this.V;
- for (let i = 1; i < t; ++i) {
- e = e.O;
- }
- const h = e.O;
- this.o += s;
- while (s--) {
- e.O = new LinkNode(i);
- e.O.j = e;
- e = e.O;
- }
- e.O = h;
- h.j = e;
- }
- }
- find(t) {
- if (!this.V) return this.end();
- let i = this.V;
- while (i !== this.S) {
- if (i.L === t) {
- return new LinkListIterator(i, this.S);
- }
- i = i.O;
- }
- return this.end();
- }
- reverse() {
- if (this.o <= 1) return;
- let t = this.V;
- let i = this.G;
- let s = 0;
- while (s << 1 < this.o) {
- const e = t.L;
- t.L = i.L;
- i.L = e;
- t = t.O;
- i = i.j;
- s += 1;
- }
- }
- unique() {
- if (this.o <= 1) return;
- let t = this.V;
- while (t !== this.S) {
- let i = t;
- while (i.O && i.L === i.O.L) {
- i = i.O;
- this.o -= 1;
- }
- t.O = i.O;
- t.O.j = t;
- t = t.O;
- }
- }
- sort(t) {
- if (this.o <= 1) return;
- const i = [];
- this.forEach((t => i.push(t)));
- i.sort(t);
- let s = this.V;
- i.forEach((t => {
- s.L = t;
- s = s.O;
- }));
- }
- pushFront(t) {
- this.o += 1;
- const i = new LinkNode(t);
- if (!this.V) {
- this.V = this.G = i;
- this.G.O = this.S;
- this.S.j = this.G;
- } else {
- i.O = this.V;
- this.V.j = i;
- this.V = i;
- }
- this.S.O = this.V;
- this.V.j = this.S;
- }
- popFront() {
- if (!this.V) return;
- this.o -= 1;
- if (this.V === this.G) {
- this.V = this.G = undefined;
- this.S.j = this.G;
- } else {
- this.V = this.V.O;
- this.V.j = this.S;
- }
- this.S.O = this.V;
- }
- merge(t) {
- if (!this.V) {
- t.forEach((t => this.pushBack(t)));
- return;
- }
- let i = this.V;
- t.forEach((t => {
- while (i && i !== this.S && i.L <= t) {
- i = i.O;
- }
- if (i === this.S) {
- this.pushBack(t);
- i = this.G;
- } else if (i === this.V) {
- this.pushFront(t);
- i = this.V;
- } else {
- this.o += 1;
- const s = i.j;
- s.O = new LinkNode(t);
- s.O.j = s;
- s.O.O = i;
- i.j = s.O;
- }
- }));
- }
- [Symbol.iterator]() {
- return function*() {
- if (!this.V) return;
- let t = this.V;
- while (t !== this.S) {
- yield t.L;
- t = t.O;
- }
- }.bind(this)();
- }
- }
- var _default = LinkList;
- exports.default = _default;
|