IOTConnect-Web/node_modules/js-sdsl/dist/cjs/container/TreeContainer/Base/index.js

515 lines
14 KiB
JavaScript
Raw Permalink Normal View History

2024-05-09 01:49:52 +00:00
"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