| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600 |
- var __extends = this && this.t || function() {
- var extendStatics = function(e, r) {
- extendStatics = Object.setPrototypeOf || {
- __proto__: []
- } instanceof Array && function(e, r) {
- e.__proto__ = r;
- } || function(e, r) {
- for (var i in r) if (Object.prototype.hasOwnProperty.call(r, i)) e[i] = r[i];
- };
- return extendStatics(e, r);
- };
- return function(e, r) {
- if (typeof r !== "function" && r !== null) throw new TypeError("Class extends value " + String(r) + " is not a constructor or null");
- extendStatics(e, r);
- function __() {
- this.constructor = e;
- }
- e.prototype = r === null ? Object.create(r) : (__.prototype = r.prototype, new __);
- };
- }();
- var __read = this && this.q || function(e, r) {
- var i = typeof Symbol === "function" && e[Symbol.iterator];
- if (!i) return e;
- var t = i.call(e), n, s = [], f;
- try {
- while ((r === void 0 || r-- > 0) && !(n = t.next()).done) s.push(n.value);
- } catch (e) {
- f = {
- error: e
- };
- } finally {
- try {
- if (n && !n.done && (i = t["return"])) i.call(t);
- } finally {
- if (f) throw f.error;
- }
- }
- return s;
- };
- var __values = this && this.V || function(e) {
- var r = typeof Symbol === "function" && Symbol.iterator, i = r && e[r], t = 0;
- if (i) return i.call(e);
- if (e && typeof e.length === "number") return {
- next: function() {
- if (e && t >= e.length) e = void 0;
- return {
- value: e && e[t++],
- done: !e
- };
- }
- };
- throw new TypeError(r ? "Object is not iterable." : "Symbol.iterator is not defined.");
- };
- import { TreeNode, TreeNodeEnableIndex } from "./TreeNode";
- import { Container } from "../../ContainerBase";
- import { throwIteratorAccessError } from "../../../utils/throwError";
- var TreeContainer = function(e) {
- __extends(TreeContainer, e);
- function TreeContainer(r, i) {
- if (r === void 0) {
- r = function(e, r) {
- if (e < r) return -1;
- if (e > r) return 1;
- return 0;
- };
- }
- if (i === void 0) {
- i = false;
- }
- var t = e.call(this) || this;
- t.W = undefined;
- t.$ = r;
- if (i) {
- t.re = TreeNodeEnableIndex;
- t.v = function(e, r, i) {
- var t = this.se(e, r, i);
- if (t) {
- var n = t.rr;
- while (n !== this.h) {
- n.tr += 1;
- n = n.rr;
- }
- var s = this.fe(t);
- if (s) {
- var f = s, h = f.parentNode, u = f.grandParent, a = f.curNode;
- h.ie();
- u.ie();
- a.ie();
- }
- }
- return this.M;
- };
- t.G = function(e) {
- var r = this.he(e);
- while (r !== this.h) {
- r.tr -= 1;
- r = r.rr;
- }
- };
- } else {
- t.re = TreeNode;
- t.v = function(e, r, i) {
- var t = this.se(e, r, i);
- if (t) this.fe(t);
- return this.M;
- };
- t.G = t.he;
- }
- t.h = new t.re;
- return t;
- }
- TreeContainer.prototype.U = function(e, r) {
- var i = this.h;
- while (e) {
- var t = this.$(e.u, r);
- if (t < 0) {
- e = e.N;
- } else if (t > 0) {
- i = e;
- e = e.K;
- } else return e;
- }
- return i;
- };
- TreeContainer.prototype.X = function(e, r) {
- var i = this.h;
- while (e) {
- var t = this.$(e.u, r);
- if (t <= 0) {
- e = e.N;
- } else {
- i = e;
- e = e.K;
- }
- }
- return i;
- };
- TreeContainer.prototype.Y = function(e, r) {
- var i = this.h;
- while (e) {
- var t = this.$(e.u, r);
- if (t < 0) {
- i = e;
- e = e.N;
- } else if (t > 0) {
- e = e.K;
- } else return e;
- }
- return i;
- };
- TreeContainer.prototype.Z = function(e, r) {
- var i = this.h;
- while (e) {
- var t = this.$(e.u, r);
- if (t < 0) {
- i = e;
- e = e.N;
- } else {
- e = e.K;
- }
- }
- return i;
- };
- TreeContainer.prototype.ue = function(e) {
- while (true) {
- var r = e.rr;
- if (r === this.h) return;
- if (e.ee === 1) {
- e.ee = 0;
- return;
- }
- if (e === r.K) {
- var i = r.N;
- if (i.ee === 1) {
- i.ee = 0;
- r.ee = 1;
- if (r === this.W) {
- this.W = r.ne();
- } else r.ne();
- } else {
- if (i.N && i.N.ee === 1) {
- i.ee = r.ee;
- r.ee = 0;
- i.N.ee = 0;
- if (r === this.W) {
- this.W = r.ne();
- } else r.ne();
- return;
- } else if (i.K && i.K.ee === 1) {
- i.ee = 1;
- i.K.ee = 0;
- i.te();
- } else {
- i.ee = 1;
- e = r;
- }
- }
- } else {
- var i = r.K;
- if (i.ee === 1) {
- i.ee = 0;
- r.ee = 1;
- if (r === this.W) {
- this.W = r.te();
- } else r.te();
- } else {
- if (i.K && i.K.ee === 1) {
- i.ee = r.ee;
- r.ee = 0;
- i.K.ee = 0;
- if (r === this.W) {
- this.W = r.te();
- } else r.te();
- return;
- } else if (i.N && i.N.ee === 1) {
- i.ee = 1;
- i.N.ee = 0;
- i.ne();
- } else {
- i.ee = 1;
- e = r;
- }
- }
- }
- }
- };
- TreeContainer.prototype.he = function(e) {
- var r, i;
- if (this.M === 1) {
- this.clear();
- return this.h;
- }
- var t = e;
- while (t.K || t.N) {
- if (t.N) {
- t = t.N;
- while (t.K) t = t.K;
- } else {
- t = t.K;
- }
- r = __read([ t.u, e.u ], 2), e.u = r[0], t.u = r[1];
- i = __read([ t.p, e.p ], 2), e.p = i[0], t.p = i[1];
- e = t;
- }
- if (this.h.K === t) {
- this.h.K = t.rr;
- } else if (this.h.N === t) {
- this.h.N = t.rr;
- }
- this.ue(t);
- var n = t.rr;
- if (t === n.K) {
- n.K = undefined;
- } else n.N = undefined;
- this.M -= 1;
- this.W.ee = 0;
- return n;
- };
- TreeContainer.prototype.ae = function(e, r) {
- if (e === undefined) return false;
- var i = this.ae(e.K, r);
- if (i) return true;
- if (r(e)) return true;
- return this.ae(e.N, r);
- };
- TreeContainer.prototype.fe = function(e) {
- while (true) {
- var r = e.rr;
- if (r.ee === 0) return;
- var i = r.rr;
- if (r === i.K) {
- var t = i.N;
- if (t && t.ee === 1) {
- t.ee = r.ee = 0;
- if (i === this.W) return;
- i.ee = 1;
- e = i;
- continue;
- } else if (e === r.N) {
- e.ee = 0;
- if (e.K) e.K.rr = r;
- if (e.N) e.N.rr = i;
- r.N = e.K;
- i.K = e.N;
- e.K = r;
- e.N = i;
- if (i === this.W) {
- this.W = e;
- this.h.rr = e;
- } else {
- var n = i.rr;
- if (n.K === i) {
- n.K = e;
- } else n.N = e;
- }
- e.rr = i.rr;
- r.rr = e;
- i.rr = e;
- i.ee = 1;
- return {
- parentNode: r,
- grandParent: i,
- curNode: e
- };
- } else {
- r.ee = 0;
- if (i === this.W) {
- this.W = i.te();
- } else i.te();
- i.ee = 1;
- }
- } else {
- var t = i.K;
- if (t && t.ee === 1) {
- t.ee = r.ee = 0;
- if (i === this.W) return;
- i.ee = 1;
- e = i;
- continue;
- } else if (e === r.K) {
- e.ee = 0;
- if (e.K) e.K.rr = i;
- if (e.N) e.N.rr = r;
- i.N = e.K;
- r.K = e.N;
- e.K = i;
- e.N = r;
- if (i === this.W) {
- this.W = e;
- this.h.rr = e;
- } else {
- var n = i.rr;
- if (n.K === i) {
- n.K = e;
- } else n.N = e;
- }
- e.rr = i.rr;
- r.rr = e;
- i.rr = e;
- i.ee = 1;
- return {
- parentNode: r,
- grandParent: i,
- curNode: e
- };
- } else {
- r.ee = 0;
- if (i === this.W) {
- this.W = i.ne();
- } else i.ne();
- i.ee = 1;
- }
- }
- return;
- }
- };
- TreeContainer.prototype.se = function(e, r, i) {
- if (this.W === undefined) {
- this.M += 1;
- this.W = new this.re(e, r);
- this.W.ee = 0;
- this.W.rr = this.h;
- this.h.rr = this.W;
- this.h.K = this.W;
- this.h.N = this.W;
- return;
- }
- var t;
- var n = this.h.K;
- var s = this.$(n.u, e);
- if (s === 0) {
- n.p = r;
- return;
- } else if (s > 0) {
- n.K = new this.re(e, r);
- n.K.rr = n;
- t = n.K;
- this.h.K = t;
- } else {
- var f = this.h.N;
- var h = this.$(f.u, e);
- if (h === 0) {
- f.p = r;
- return;
- } else if (h < 0) {
- f.N = new this.re(e, r);
- f.N.rr = f;
- t = f.N;
- this.h.N = t;
- } else {
- if (i !== undefined) {
- var u = i.o;
- if (u !== this.h) {
- var a = this.$(u.u, e);
- if (a === 0) {
- u.p = r;
- return;
- } else if (a > 0) {
- var o = u.L();
- var l = this.$(o.u, e);
- if (l === 0) {
- o.p = r;
- return;
- } else if (l < 0) {
- t = new this.re(e, r);
- if (o.N === undefined) {
- o.N = t;
- t.rr = o;
- } else {
- u.K = t;
- t.rr = u;
- }
- }
- }
- }
- }
- if (t === undefined) {
- t = this.W;
- while (true) {
- var v = this.$(t.u, e);
- if (v > 0) {
- if (t.K === undefined) {
- t.K = new this.re(e, r);
- t.K.rr = t;
- t = t.K;
- break;
- }
- t = t.K;
- } else if (v < 0) {
- if (t.N === undefined) {
- t.N = new this.re(e, r);
- t.N.rr = t;
- t = t.N;
- break;
- }
- t = t.N;
- } else {
- t.p = r;
- return;
- }
- }
- }
- }
- }
- this.M += 1;
- return t;
- };
- TreeContainer.prototype.g = function(e, r) {
- while (e) {
- var i = this.$(e.u, r);
- if (i < 0) {
- e = e.N;
- } else if (i > 0) {
- e = e.K;
- } else return e;
- }
- return e || this.h;
- };
- TreeContainer.prototype.clear = function() {
- this.M = 0;
- this.W = undefined;
- this.h.rr = undefined;
- this.h.K = this.h.N = undefined;
- };
- TreeContainer.prototype.updateKeyByIterator = function(e, r) {
- var i = e.o;
- if (i === this.h) {
- throwIteratorAccessError();
- }
- if (this.M === 1) {
- i.u = r;
- return true;
- }
- if (i === this.h.K) {
- if (this.$(i.m().u, r) > 0) {
- i.u = r;
- return true;
- }
- return false;
- }
- if (i === this.h.N) {
- if (this.$(i.L().u, r) < 0) {
- i.u = r;
- return true;
- }
- return false;
- }
- var t = i.L().u;
- if (this.$(t, r) >= 0) return false;
- var n = i.m().u;
- if (this.$(n, r) <= 0) return false;
- i.u = r;
- return true;
- };
- TreeContainer.prototype.eraseElementByPos = function(e) {
- if (e < 0 || e > this.M - 1) {
- throw new RangeError;
- }
- var r = 0;
- var i = this;
- this.ae(this.W, (function(t) {
- if (e === r) {
- i.G(t);
- return true;
- }
- r += 1;
- return false;
- }));
- return this.M;
- };
- TreeContainer.prototype.eraseElementByKey = function(e) {
- if (this.M === 0) return false;
- var r = this.g(this.W, e);
- if (r === this.h) return false;
- this.G(r);
- return true;
- };
- TreeContainer.prototype.eraseElementByIterator = function(e) {
- var r = e.o;
- if (r === this.h) {
- throwIteratorAccessError();
- }
- var i = r.N === undefined;
- var t = e.iteratorType === 0;
- if (t) {
- if (i) e.next();
- } else {
- if (!i || r.K === undefined) e.next();
- }
- this.G(r);
- return e;
- };
- TreeContainer.prototype.forEach = function(e) {
- var r, i;
- var t = 0;
- try {
- for (var n = __values(this), s = n.next(); !s.done; s = n.next()) {
- var f = s.value;
- e(f, t++, this);
- }
- } catch (e) {
- r = {
- error: e
- };
- } finally {
- try {
- if (s && !s.done && (i = n.return)) i.call(n);
- } finally {
- if (r) throw r.error;
- }
- }
- };
- TreeContainer.prototype.getElementByPos = function(e) {
- var r, i;
- if (e < 0 || e > this.M - 1) {
- throw new RangeError;
- }
- var t;
- var n = 0;
- try {
- for (var s = __values(this), f = s.next(); !f.done; f = s.next()) {
- var h = f.value;
- if (n === e) {
- t = h;
- break;
- }
- n += 1;
- }
- } catch (e) {
- r = {
- error: e
- };
- } finally {
- try {
- if (f && !f.done && (i = s.return)) i.call(s);
- } finally {
- if (r) throw r.error;
- }
- }
- return t;
- };
- TreeContainer.prototype.getHeight = function() {
- if (this.M === 0) return 0;
- var traversal = function(e) {
- if (!e) return 0;
- return Math.max(traversal(e.K), traversal(e.N)) + 1;
- };
- return traversal(this.W);
- };
- return TreeContainer;
- }(Container);
- export default TreeContainer;
- //# sourceMappingURL=index.js.map
|