| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514 |
- "use strict";
- Object.defineProperty(exports, "t", {
- value: true
- });
- exports.default = void 0;
- var _TreeNode = require("./TreeNode");
- var _ContainerBase = require("../../ContainerBase");
- var _throwError = require("../../../utils/throwError");
- class TreeContainer extends _ContainerBase.Container {
- constructor(e = function(e, t) {
- if (e < t) return -1;
- if (e > t) return 1;
- return 0;
- }, t = false) {
- super();
- this.Y = undefined;
- this.v = e;
- if (t) {
- this.re = _TreeNode.TreeNodeEnableIndex;
- this.M = function(e, t, i) {
- const s = this.ne(e, t, i);
- if (s) {
- let e = s.tt;
- while (e !== this.h) {
- e.rt += 1;
- e = e.tt;
- }
- const t = this.he(s);
- if (t) {
- const {parentNode: e, grandParent: i, curNode: s} = t;
- e.ie();
- i.ie();
- s.ie();
- }
- }
- return this.i;
- };
- this.V = function(e) {
- let t = this.fe(e);
- while (t !== this.h) {
- t.rt -= 1;
- t = t.tt;
- }
- };
- } else {
- this.re = _TreeNode.TreeNode;
- this.M = function(e, t, i) {
- const s = this.ne(e, t, i);
- if (s) this.he(s);
- return this.i;
- };
- this.V = this.fe;
- }
- this.h = new this.re;
- }
- X(e, t) {
- let i = this.h;
- while (e) {
- const s = this.v(e.u, t);
- if (s < 0) {
- e = e.W;
- } else if (s > 0) {
- i = e;
- e = e.U;
- } else return e;
- }
- return i;
- }
- Z(e, t) {
- let i = this.h;
- while (e) {
- const s = this.v(e.u, t);
- if (s <= 0) {
- e = e.W;
- } else {
- i = e;
- e = e.U;
- }
- }
- return i;
- }
- $(e, t) {
- let i = this.h;
- while (e) {
- const s = this.v(e.u, t);
- if (s < 0) {
- i = e;
- e = e.W;
- } else if (s > 0) {
- e = e.U;
- } else return e;
- }
- return i;
- }
- rr(e, t) {
- let i = this.h;
- while (e) {
- const s = this.v(e.u, t);
- if (s < 0) {
- i = e;
- e = e.W;
- } else {
- e = e.U;
- }
- }
- return i;
- }
- ue(e) {
- while (true) {
- const t = e.tt;
- if (t === this.h) return;
- if (e.ee === 1) {
- e.ee = 0;
- return;
- }
- if (e === t.U) {
- const i = t.W;
- if (i.ee === 1) {
- i.ee = 0;
- t.ee = 1;
- if (t === this.Y) {
- this.Y = t.te();
- } else t.te();
- } else {
- if (i.W && i.W.ee === 1) {
- i.ee = t.ee;
- t.ee = 0;
- i.W.ee = 0;
- if (t === this.Y) {
- this.Y = t.te();
- } else t.te();
- return;
- } else if (i.U && i.U.ee === 1) {
- i.ee = 1;
- i.U.ee = 0;
- i.se();
- } else {
- i.ee = 1;
- e = t;
- }
- }
- } else {
- const i = t.U;
- if (i.ee === 1) {
- i.ee = 0;
- t.ee = 1;
- if (t === this.Y) {
- this.Y = t.se();
- } else t.se();
- } else {
- if (i.U && i.U.ee === 1) {
- i.ee = t.ee;
- t.ee = 0;
- i.U.ee = 0;
- if (t === this.Y) {
- this.Y = t.se();
- } else t.se();
- return;
- } else if (i.W && i.W.ee === 1) {
- i.ee = 1;
- i.W.ee = 0;
- i.te();
- } else {
- i.ee = 1;
- e = t;
- }
- }
- }
- }
- }
- fe(e) {
- if (this.i === 1) {
- this.clear();
- return this.h;
- }
- let t = e;
- while (t.U || t.W) {
- if (t.W) {
- t = t.W;
- while (t.U) t = t.U;
- } else {
- t = t.U;
- }
- [e.u, t.u] = [ t.u, e.u ];
- [e.l, t.l] = [ t.l, e.l ];
- e = t;
- }
- if (this.h.U === t) {
- this.h.U = t.tt;
- } else if (this.h.W === t) {
- this.h.W = t.tt;
- }
- this.ue(t);
- const i = t.tt;
- if (t === i.U) {
- i.U = undefined;
- } else i.W = undefined;
- this.i -= 1;
- this.Y.ee = 0;
- return i;
- }
- oe(e, t) {
- if (e === undefined) return false;
- const i = this.oe(e.U, t);
- if (i) return true;
- if (t(e)) return true;
- return this.oe(e.W, t);
- }
- he(e) {
- while (true) {
- const t = e.tt;
- if (t.ee === 0) return;
- const i = t.tt;
- if (t === i.U) {
- const s = i.W;
- if (s && s.ee === 1) {
- s.ee = t.ee = 0;
- if (i === this.Y) return;
- i.ee = 1;
- e = i;
- continue;
- } else if (e === t.W) {
- e.ee = 0;
- if (e.U) e.U.tt = t;
- if (e.W) e.W.tt = i;
- t.W = e.U;
- i.U = e.W;
- e.U = t;
- e.W = i;
- if (i === this.Y) {
- this.Y = e;
- this.h.tt = e;
- } else {
- const t = i.tt;
- if (t.U === i) {
- t.U = e;
- } else t.W = e;
- }
- e.tt = i.tt;
- t.tt = e;
- i.tt = e;
- i.ee = 1;
- return {
- parentNode: t,
- grandParent: i,
- curNode: e
- };
- } else {
- t.ee = 0;
- if (i === this.Y) {
- this.Y = i.se();
- } else i.se();
- i.ee = 1;
- }
- } else {
- const s = i.U;
- if (s && s.ee === 1) {
- s.ee = t.ee = 0;
- if (i === this.Y) return;
- i.ee = 1;
- e = i;
- continue;
- } else if (e === t.U) {
- e.ee = 0;
- if (e.U) e.U.tt = i;
- if (e.W) e.W.tt = t;
- i.W = e.U;
- t.U = e.W;
- e.U = i;
- e.W = t;
- if (i === this.Y) {
- this.Y = e;
- this.h.tt = e;
- } else {
- const t = i.tt;
- if (t.U === i) {
- t.U = e;
- } else t.W = e;
- }
- e.tt = i.tt;
- t.tt = e;
- i.tt = e;
- i.ee = 1;
- return {
- parentNode: t,
- grandParent: i,
- curNode: e
- };
- } else {
- t.ee = 0;
- if (i === this.Y) {
- this.Y = i.te();
- } else i.te();
- i.ee = 1;
- }
- }
- return;
- }
- }
- ne(e, t, i) {
- if (this.Y === undefined) {
- this.i += 1;
- this.Y = new this.re(e, t);
- this.Y.ee = 0;
- this.Y.tt = this.h;
- this.h.tt = this.Y;
- this.h.U = this.Y;
- this.h.W = this.Y;
- return;
- }
- let s;
- const r = this.h.U;
- const n = this.v(r.u, e);
- if (n === 0) {
- r.l = t;
- return;
- } else if (n > 0) {
- r.U = new this.re(e, t);
- r.U.tt = r;
- s = r.U;
- this.h.U = s;
- } else {
- const r = this.h.W;
- const n = this.v(r.u, e);
- if (n === 0) {
- r.l = t;
- return;
- } else if (n < 0) {
- r.W = new this.re(e, t);
- r.W.tt = r;
- s = r.W;
- this.h.W = s;
- } else {
- if (i !== undefined) {
- const r = i.o;
- if (r !== this.h) {
- const i = this.v(r.u, e);
- if (i === 0) {
- r.l = t;
- return;
- } else if (i > 0) {
- const i = r.L();
- const n = this.v(i.u, e);
- if (n === 0) {
- i.l = t;
- return;
- } else if (n < 0) {
- s = new this.re(e, t);
- if (i.W === undefined) {
- i.W = s;
- s.tt = i;
- } else {
- r.U = s;
- s.tt = r;
- }
- }
- }
- }
- }
- if (s === undefined) {
- s = this.Y;
- while (true) {
- const i = this.v(s.u, e);
- if (i > 0) {
- if (s.U === undefined) {
- s.U = new this.re(e, t);
- s.U.tt = s;
- s = s.U;
- break;
- }
- s = s.U;
- } else if (i < 0) {
- if (s.W === undefined) {
- s.W = new this.re(e, t);
- s.W.tt = s;
- s = s.W;
- break;
- }
- s = s.W;
- } else {
- s.l = t;
- return;
- }
- }
- }
- }
- }
- this.i += 1;
- return s;
- }
- I(e, t) {
- while (e) {
- const i = this.v(e.u, t);
- if (i < 0) {
- e = e.W;
- } else if (i > 0) {
- e = e.U;
- } else return e;
- }
- return e || this.h;
- }
- clear() {
- this.i = 0;
- this.Y = undefined;
- this.h.tt = undefined;
- this.h.U = this.h.W = undefined;
- }
- updateKeyByIterator(e, t) {
- const i = e.o;
- if (i === this.h) {
- (0, _throwError.throwIteratorAccessError)();
- }
- if (this.i === 1) {
- i.u = t;
- return true;
- }
- if (i === this.h.U) {
- if (this.v(i.B().u, t) > 0) {
- i.u = t;
- return true;
- }
- return false;
- }
- if (i === this.h.W) {
- if (this.v(i.L().u, t) < 0) {
- i.u = t;
- return true;
- }
- return false;
- }
- const s = i.L().u;
- if (this.v(s, t) >= 0) return false;
- const r = i.B().u;
- if (this.v(r, t) <= 0) return false;
- i.u = t;
- return true;
- }
- eraseElementByPos(e) {
- if (e < 0 || e > this.i - 1) {
- throw new RangeError;
- }
- let t = 0;
- const i = this;
- this.oe(this.Y, (function(s) {
- if (e === t) {
- i.V(s);
- return true;
- }
- t += 1;
- return false;
- }));
- return this.i;
- }
- eraseElementByKey(e) {
- if (this.i === 0) return false;
- const t = this.I(this.Y, e);
- if (t === this.h) return false;
- this.V(t);
- return true;
- }
- eraseElementByIterator(e) {
- const t = e.o;
- if (t === this.h) {
- (0, _throwError.throwIteratorAccessError)();
- }
- const i = t.W === undefined;
- const s = e.iteratorType === 0;
- if (s) {
- if (i) e.next();
- } else {
- if (!i || t.U === undefined) e.next();
- }
- this.V(t);
- return e;
- }
- forEach(e) {
- let t = 0;
- for (const i of this) e(i, t++, this);
- }
- getElementByPos(e) {
- if (e < 0 || e > this.i - 1) {
- throw new RangeError;
- }
- let t;
- let i = 0;
- for (const s of this) {
- if (i === e) {
- t = s;
- break;
- }
- i += 1;
- }
- return t;
- }
- getHeight() {
- if (this.i === 0) return 0;
- const traversal = function(e) {
- if (!e) return 0;
- return Math.max(traversal(e.U), traversal(e.W)) + 1;
- };
- return traversal(this.Y);
- }
- }
- var _default = TreeContainer;
- exports.default = _default;
- //# sourceMappingURL=index.js.map
|