123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500 |
- var __extends = this && this.t || function() {
- var extendStatics = function(i, t) {
- extendStatics = Object.setPrototypeOf || {
- __proto__: []
- } instanceof Array && function(i, t) {
- i.__proto__ = t;
- } || function(i, t) {
- for (var n in t) if (Object.prototype.hasOwnProperty.call(t, n)) i[n] = t[n];
- };
- return extendStatics(i, t);
- };
- return function(i, t) {
- if (typeof t !== "function" && t !== null) throw new TypeError("Class extends value " + String(t) + " is not a constructor or null");
- extendStatics(i, t);
- function __() {
- this.constructor = i;
- }
- i.prototype = t === null ? Object.create(t) : (__.prototype = t.prototype, new __);
- };
- }();
- var __generator = this && this.i || function(i, t) {
- var n = {
- label: 0,
- sent: function() {
- if (s[0] & 1) throw s[1];
- return s[1];
- },
- trys: [],
- ops: []
- }, r, e, s, h;
- return h = {
- next: verb(0),
- throw: verb(1),
- return: verb(2)
- }, typeof Symbol === "function" && (h[Symbol.iterator] = function() {
- return this;
- }), h;
- function verb(i) {
- return function(t) {
- return step([ i, t ]);
- };
- }
- function step(h) {
- if (r) throw new TypeError("Generator is already executing.");
- while (n) try {
- if (r = 1, e && (s = h[0] & 2 ? e["return"] : h[0] ? e["throw"] || ((s = e["return"]) && s.call(e),
- 0) : e.next) && !(s = s.call(e, h[1])).done) return s;
- if (e = 0, s) h = [ h[0] & 2, s.value ];
- switch (h[0]) {
- case 0:
- case 1:
- s = h;
- break;
- case 4:
- n.label++;
- return {
- value: h[1],
- done: false
- };
- case 5:
- n.label++;
- e = h[1];
- h = [ 0 ];
- continue;
- case 7:
- h = n.ops.pop();
- n.trys.pop();
- continue;
- default:
- if (!(s = n.trys, s = s.length > 0 && s[s.length - 1]) && (h[0] === 6 || h[0] === 2)) {
- n = 0;
- continue;
- }
- if (h[0] === 3 && (!s || h[1] > s[0] && h[1] < s[3])) {
- n.label = h[1];
- break;
- }
- if (h[0] === 6 && n.label < s[1]) {
- n.label = s[1];
- s = h;
- break;
- }
- if (s && n.label < s[2]) {
- n.label = s[2];
- n.ops.push(h);
- break;
- }
- if (s[2]) n.ops.pop();
- n.trys.pop();
- continue;
- }
- h = t.call(i, n);
- } catch (i) {
- h = [ 6, i ];
- e = 0;
- } finally {
- r = s = 0;
- }
- if (h[0] & 5) throw h[1];
- return {
- value: h[0] ? h[1] : void 0,
- done: true
- };
- }
- };
- import SequentialContainer from "./Base";
- import { ContainerIterator } from "../ContainerBase";
- var LinkNode = function() {
- function LinkNode(i) {
- this.L = undefined;
- this.F = undefined;
- this.H = undefined;
- this.L = i;
- }
- return LinkNode;
- }();
- export { LinkNode };
- var LinkListIterator = function(i) {
- __extends(LinkListIterator, i);
- function LinkListIterator(t, n, r) {
- var e = i.call(this, r) || this;
- e.D = t;
- e.J = n;
- if (e.iteratorType === 0) {
- e.pre = function() {
- if (this.D.F === this.J) {
- throw new RangeError("LinkList iterator access denied!");
- }
- this.D = this.D.F;
- return this;
- };
- e.next = function() {
- if (this.D === this.J) {
- throw new RangeError("LinkList iterator access denied!");
- }
- this.D = this.D.H;
- return this;
- };
- } else {
- e.pre = function() {
- if (this.D.H === this.J) {
- throw new RangeError("LinkList iterator access denied!");
- }
- this.D = this.D.H;
- return this;
- };
- e.next = function() {
- if (this.D === this.J) {
- throw new RangeError("LinkList iterator access denied!");
- }
- this.D = this.D.F;
- return this;
- };
- }
- return e;
- }
- Object.defineProperty(LinkListIterator.prototype, "pointer", {
- get: function() {
- if (this.D === this.J) {
- throw new RangeError("LinkList iterator access denied!");
- }
- return this.D.L;
- },
- set: function(i) {
- if (this.D === this.J) {
- throw new RangeError("LinkList iterator access denied!");
- }
- this.D.L = i;
- },
- enumerable: false,
- configurable: true
- });
- LinkListIterator.prototype.equals = function(i) {
- return this.D === i.D;
- };
- LinkListIterator.prototype.copy = function() {
- return new LinkListIterator(this.D, this.J, this.iteratorType);
- };
- return LinkListIterator;
- }(ContainerIterator);
- export { LinkListIterator };
- var LinkList = function(i) {
- __extends(LinkList, i);
- function LinkList(t) {
- if (t === void 0) {
- t = [];
- }
- var n = i.call(this) || this;
- n.J = new LinkNode;
- n.K = undefined;
- n.U = undefined;
- t.forEach((function(i) {
- return n.pushBack(i);
- }));
- return n;
- }
- LinkList.prototype.clear = function() {
- this.o = 0;
- this.K = this.U = undefined;
- this.J.F = this.J.H = undefined;
- };
- LinkList.prototype.begin = function() {
- return new LinkListIterator(this.K || this.J, this.J);
- };
- LinkList.prototype.end = function() {
- return new LinkListIterator(this.J, this.J);
- };
- LinkList.prototype.rBegin = function() {
- return new LinkListIterator(this.U || this.J, this.J, 1);
- };
- LinkList.prototype.rEnd = function() {
- return new LinkListIterator(this.J, this.J, 1);
- };
- LinkList.prototype.front = function() {
- return this.K ? this.K.L : undefined;
- };
- LinkList.prototype.back = function() {
- return this.U ? this.U.L : undefined;
- };
- LinkList.prototype.forEach = function(i) {
- if (!this.o) return;
- var t = this.K;
- var n = 0;
- while (t !== this.J) {
- i(t.L, n++);
- t = t.H;
- }
- };
- LinkList.prototype.getElementByPos = function(i) {
- if (i < 0 || i > this.o - 1) {
- throw new RangeError;
- }
- var t = this.K;
- while (i--) {
- t = t.H;
- }
- return t.L;
- };
- LinkList.prototype.eraseElementByPos = function(i) {
- if (i < 0 || i > this.o - 1) {
- throw new RangeError;
- }
- if (i === 0) this.popFront(); else if (i === this.o - 1) this.popBack(); else {
- var t = this.K;
- while (i--) {
- t = t.H;
- }
- t = t;
- var n = t.F;
- var r = t.H;
- r.F = n;
- n.H = r;
- this.o -= 1;
- }
- };
- LinkList.prototype.eraseElementByValue = function(i) {
- while (this.K && this.K.L === i) this.popFront();
- while (this.U && this.U.L === i) this.popBack();
- if (!this.K) return;
- var t = this.K;
- while (t !== this.J) {
- if (t.L === i) {
- var n = t.F;
- var r = t.H;
- r.F = n;
- n.H = r;
- this.o -= 1;
- }
- t = t.H;
- }
- };
- LinkList.prototype.eraseElementByIterator = function(i) {
- var t = i.D;
- if (t === this.J) {
- throw new RangeError("Invalid iterator");
- }
- i = i.next();
- if (this.K === t) this.popFront(); else if (this.U === t) this.popBack(); else {
- var n = t.F;
- var r = t.H;
- r.F = n;
- n.H = r;
- this.o -= 1;
- }
- return i;
- };
- LinkList.prototype.pushBack = function(i) {
- this.o += 1;
- var t = new LinkNode(i);
- if (!this.U) {
- this.K = this.U = t;
- this.J.H = this.K;
- this.K.F = this.J;
- } else {
- this.U.H = t;
- t.F = this.U;
- this.U = t;
- }
- this.U.H = this.J;
- this.J.F = this.U;
- };
- LinkList.prototype.popBack = function() {
- if (!this.U) return;
- this.o -= 1;
- if (this.K === this.U) {
- this.K = this.U = undefined;
- this.J.H = undefined;
- } else {
- this.U = this.U.F;
- this.U.H = this.J;
- }
- this.J.F = this.U;
- };
- LinkList.prototype.setElementByPos = function(i, t) {
- if (i < 0 || i > this.o - 1) {
- throw new RangeError;
- }
- var n = this.K;
- while (i--) {
- n = n.H;
- }
- n.L = t;
- };
- LinkList.prototype.insert = function(i, t, n) {
- if (n === void 0) {
- n = 1;
- }
- if (i < 0 || i > this.o) {
- throw new RangeError;
- }
- if (n <= 0) return;
- if (i === 0) {
- while (n--) this.pushFront(t);
- } else if (i === this.o) {
- while (n--) this.pushBack(t);
- } else {
- var r = this.K;
- for (var e = 1; e < i; ++e) {
- r = r.H;
- }
- var s = r.H;
- this.o += n;
- while (n--) {
- r.H = new LinkNode(t);
- r.H.F = r;
- r = r.H;
- }
- r.H = s;
- s.F = r;
- }
- };
- LinkList.prototype.find = function(i) {
- if (!this.K) return this.end();
- var t = this.K;
- while (t !== this.J) {
- if (t.L === i) {
- return new LinkListIterator(t, this.J);
- }
- t = t.H;
- }
- return this.end();
- };
- LinkList.prototype.reverse = function() {
- if (this.o <= 1) return;
- var i = this.K;
- var t = this.U;
- var n = 0;
- while (n << 1 < this.o) {
- var r = i.L;
- i.L = t.L;
- t.L = r;
- i = i.H;
- t = t.F;
- n += 1;
- }
- };
- LinkList.prototype.unique = function() {
- if (this.o <= 1) return;
- var i = this.K;
- while (i !== this.J) {
- var t = i;
- while (t.H && t.L === t.H.L) {
- t = t.H;
- this.o -= 1;
- }
- i.H = t.H;
- i.H.F = i;
- i = i.H;
- }
- };
- LinkList.prototype.sort = function(i) {
- if (this.o <= 1) return;
- var t = [];
- this.forEach((function(i) {
- return t.push(i);
- }));
- t.sort(i);
- var n = this.K;
- t.forEach((function(i) {
- n.L = i;
- n = n.H;
- }));
- };
- LinkList.prototype.pushFront = function(i) {
- this.o += 1;
- var t = new LinkNode(i);
- if (!this.K) {
- this.K = this.U = t;
- this.U.H = this.J;
- this.J.F = this.U;
- } else {
- t.H = this.K;
- this.K.F = t;
- this.K = t;
- }
- this.J.H = this.K;
- this.K.F = this.J;
- };
- LinkList.prototype.popFront = function() {
- if (!this.K) return;
- this.o -= 1;
- if (this.K === this.U) {
- this.K = this.U = undefined;
- this.J.F = this.U;
- } else {
- this.K = this.K.H;
- this.K.F = this.J;
- }
- this.J.H = this.K;
- };
- LinkList.prototype.merge = function(i) {
- var t = this;
- if (!this.K) {
- i.forEach((function(i) {
- return t.pushBack(i);
- }));
- return;
- }
- var n = this.K;
- i.forEach((function(i) {
- while (n && n !== t.J && n.L <= i) {
- n = n.H;
- }
- if (n === t.J) {
- t.pushBack(i);
- n = t.U;
- } else if (n === t.K) {
- t.pushFront(i);
- n = t.K;
- } else {
- t.o += 1;
- var r = n.F;
- r.H = new LinkNode(i);
- r.H.F = r;
- r.H.H = n;
- n.F = r.H;
- }
- }));
- };
- LinkList.prototype[Symbol.iterator] = function() {
- return function() {
- var i;
- return __generator(this, (function(t) {
- switch (t.label) {
- case 0:
- if (!this.K) return [ 2 ];
- i = this.K;
- t.label = 1;
- case 1:
- if (!(i !== this.J)) return [ 3, 3 ];
- return [ 4, i.L ];
- case 2:
- t.sent();
- i = i.H;
- return [ 3, 1 ];
- case 3:
- return [ 2 ];
- }
- }));
- }.bind(this)();
- };
- return LinkList;
- }(SequentialContainer);
- export default LinkList;
|