node-ejs-renderer/node_modules/sonic-forest/lib/splay/util.js

155 lines
2.9 KiB
JavaScript
Raw Permalink Normal View History

2024-06-09 13:55:01 -04:00
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.rlSplay = exports.lrSplay = exports.llSplay = exports.rrSplay = exports.lSplay = exports.rSplay = exports.splay = void 0;
const splay = (root, node, repeat) => {
const p = node.p;
if (!p)
return root;
const pp = p.p;
const l2 = p.l === node;
if (!pp) {
if (l2)
(0, exports.rSplay)(node, p);
else
(0, exports.lSplay)(node, p);
return node;
}
const l1 = pp.l === p;
if (l1) {
if (l2) {
root = (0, exports.llSplay)(root, node, p, pp);
}
else {
root = (0, exports.lrSplay)(root, node, p, pp);
}
}
else {
if (l2) {
root = (0, exports.rlSplay)(root, node, p, pp);
}
else {
root = (0, exports.rrSplay)(root, node, p, pp);
}
}
if (repeat > 1)
return (0, exports.splay)(root, node, repeat - 1);
return root;
};
exports.splay = splay;
const rSplay = (c2, c1) => {
const b = c2.r;
c2.p = undefined;
c2.r = c1;
c1.p = c2;
c1.l = b;
if (b)
b.p = c1;
};
exports.rSplay = rSplay;
const lSplay = (c2, c1) => {
const b = c2.l;
c2.p = undefined;
c2.l = c1;
c1.p = c2;
c1.r = b;
if (b)
b.p = c1;
};
exports.lSplay = lSplay;
const rrSplay = (root, c3, c2, c1) => {
const b = c2.l;
const c = c3.l;
const p = c1.p;
c3.p = p;
c3.l = c2;
c2.p = c3;
c2.l = c1;
c2.r = c;
c1.p = c2;
c1.r = b;
if (b)
b.p = c1;
if (c)
c.p = c2;
if (!p)
root = c3;
else if (p.l === c1)
p.l = c3;
else
p.r = c3;
return root;
};
exports.rrSplay = rrSplay;
const llSplay = (root, c3, c2, c1) => {
const b = c2.r;
const c = c3.r;
const p = c1.p;
c3.p = p;
c3.r = c2;
c2.p = c3;
c2.l = c;
c2.r = c1;
c1.p = c2;
c1.l = b;
if (b)
b.p = c1;
if (c)
c.p = c2;
if (!p)
root = c3;
else if (p.l === c1)
p.l = c3;
else
p.r = c3;
return root;
};
exports.llSplay = llSplay;
const lrSplay = (root, c3, c2, c1) => {
const c = c3.l;
const d = c3.r;
const p = c1.p;
c3.p = p;
c3.l = c2;
c3.r = c1;
c2.p = c3;
c2.r = c;
c1.p = c3;
c1.l = d;
if (c)
c.p = c2;
if (d)
d.p = c1;
if (!p)
root = c3;
else if (p.l === c1)
p.l = c3;
else
p.r = c3;
return root;
};
exports.lrSplay = lrSplay;
const rlSplay = (root, c3, c2, c1) => {
const c = c3.r;
const d = c3.l;
const p = c1.p;
c3.p = p;
c3.l = c1;
c3.r = c2;
c2.p = c3;
c2.l = c;
c1.p = c3;
c1.r = d;
if (c)
c.p = c2;
if (d)
d.p = c1;
if (!p)
root = c3;
else if (p.l === c1)
p.l = c3;
else
p.r = c3;
return root;
};
exports.rlSplay = rlSplay;