index.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525
  1. var __extends = this && this.t || function() {
  2. var extendStatics = function(e, i) {
  3. extendStatics = Object.setPrototypeOf || {
  4. __proto__: []
  5. } instanceof Array && function(e, i) {
  6. e.__proto__ = i;
  7. } || function(e, i) {
  8. for (var r in i) if (Object.prototype.hasOwnProperty.call(i, r)) e[r] = i[r];
  9. };
  10. return extendStatics(e, i);
  11. };
  12. return function(e, i) {
  13. if (typeof i !== "function" && i !== null) throw new TypeError("Class extends value " + String(i) + " is not a constructor or null");
  14. extendStatics(e, i);
  15. function __() {
  16. this.constructor = e;
  17. }
  18. e.prototype = i === null ? Object.create(i) : (__.prototype = i.prototype, new __);
  19. };
  20. }();
  21. var __read = this && this._ || function(e, i) {
  22. var r = typeof Symbol === "function" && e[Symbol.iterator];
  23. if (!r) return e;
  24. var t = r.call(e), n, s = [], f;
  25. try {
  26. while ((i === void 0 || i-- > 0) && !(n = t.next()).done) s.push(n.value);
  27. } catch (e) {
  28. f = {
  29. error: e
  30. };
  31. } finally {
  32. try {
  33. if (n && !n.done && (r = t["return"])) r.call(t);
  34. } finally {
  35. if (f) throw f.error;
  36. }
  37. }
  38. return s;
  39. };
  40. import { Container } from "../../ContainerBase";
  41. import { TreeNode, TreeNodeEnableIndex } from "./TreeNode";
  42. var TreeContainer = function(e) {
  43. __extends(TreeContainer, e);
  44. function TreeContainer(i, r) {
  45. if (i === void 0) {
  46. i = function(e, i) {
  47. if (e < i) return -1;
  48. if (e > i) return 1;
  49. return 0;
  50. };
  51. }
  52. if (r === void 0) {
  53. r = false;
  54. }
  55. var t = e.call(this) || this;
  56. t.rr = undefined;
  57. t.ie = function(e, i) {
  58. if (e === undefined) return false;
  59. var r = t.ie(e.Y, i);
  60. if (r) return true;
  61. if (i(e)) return true;
  62. return t.ie(e.Z, i);
  63. };
  64. t.A = i;
  65. if (r) {
  66. t.re = TreeNodeEnableIndex;
  67. t.ir = function(e, i, r) {
  68. var t = this.te(e, i, r);
  69. if (t) {
  70. var n = t.tt;
  71. while (n !== this.J) {
  72. n.rt += 1;
  73. n = n.tt;
  74. }
  75. var s = this.ne(t);
  76. if (s) {
  77. var f = s, h = f.parentNode, u = f.grandParent, a = f.curNode;
  78. h.recount();
  79. u.recount();
  80. a.recount();
  81. }
  82. }
  83. };
  84. t.se = function(e) {
  85. var i = this.fe(e);
  86. while (i !== this.J) {
  87. i.rt -= 1;
  88. i = i.tt;
  89. }
  90. };
  91. } else {
  92. t.re = TreeNode;
  93. t.ir = function(e, i, r) {
  94. var t = this.te(e, i, r);
  95. if (t) this.ne(t);
  96. };
  97. t.se = t.fe;
  98. }
  99. t.J = new t.re;
  100. return t;
  101. }
  102. TreeContainer.prototype.$ = function(e, i) {
  103. var r;
  104. while (e) {
  105. var t = this.A(e.W, i);
  106. if (t < 0) {
  107. e = e.Z;
  108. } else if (t > 0) {
  109. r = e;
  110. e = e.Y;
  111. } else return e;
  112. }
  113. return r === undefined ? this.J : r;
  114. };
  115. TreeContainer.prototype.er = function(e, i) {
  116. var r;
  117. while (e) {
  118. var t = this.A(e.W, i);
  119. if (t <= 0) {
  120. e = e.Z;
  121. } else {
  122. r = e;
  123. e = e.Y;
  124. }
  125. }
  126. return r === undefined ? this.J : r;
  127. };
  128. TreeContainer.prototype.tr = function(e, i) {
  129. var r;
  130. while (e) {
  131. var t = this.A(e.W, i);
  132. if (t < 0) {
  133. r = e;
  134. e = e.Z;
  135. } else if (t > 0) {
  136. e = e.Y;
  137. } else return e;
  138. }
  139. return r === undefined ? this.J : r;
  140. };
  141. TreeContainer.prototype.nr = function(e, i) {
  142. var r;
  143. while (e) {
  144. var t = this.A(e.W, i);
  145. if (t < 0) {
  146. r = e;
  147. e = e.Z;
  148. } else {
  149. e = e.Y;
  150. }
  151. }
  152. return r === undefined ? this.J : r;
  153. };
  154. TreeContainer.prototype.he = function(e) {
  155. while (true) {
  156. var i = e.tt;
  157. if (i === this.J) return;
  158. if (e.ee === 1) {
  159. e.ee = 0;
  160. return;
  161. }
  162. if (e === i.Y) {
  163. var r = i.Z;
  164. if (r.ee === 1) {
  165. r.ee = 0;
  166. i.ee = 1;
  167. if (i === this.rr) {
  168. this.rr = i.rotateLeft();
  169. } else i.rotateLeft();
  170. } else {
  171. if (r.Z && r.Z.ee === 1) {
  172. r.ee = i.ee;
  173. i.ee = 0;
  174. r.Z.ee = 0;
  175. if (i === this.rr) {
  176. this.rr = i.rotateLeft();
  177. } else i.rotateLeft();
  178. return;
  179. } else if (r.Y && r.Y.ee === 1) {
  180. r.ee = 1;
  181. r.Y.ee = 0;
  182. r.rotateRight();
  183. } else {
  184. r.ee = 1;
  185. e = i;
  186. }
  187. }
  188. } else {
  189. var r = i.Y;
  190. if (r.ee === 1) {
  191. r.ee = 0;
  192. i.ee = 1;
  193. if (i === this.rr) {
  194. this.rr = i.rotateRight();
  195. } else i.rotateRight();
  196. } else {
  197. if (r.Y && r.Y.ee === 1) {
  198. r.ee = i.ee;
  199. i.ee = 0;
  200. r.Y.ee = 0;
  201. if (i === this.rr) {
  202. this.rr = i.rotateRight();
  203. } else i.rotateRight();
  204. return;
  205. } else if (r.Z && r.Z.ee === 1) {
  206. r.ee = 1;
  207. r.Z.ee = 0;
  208. r.rotateLeft();
  209. } else {
  210. r.ee = 1;
  211. e = i;
  212. }
  213. }
  214. }
  215. }
  216. };
  217. TreeContainer.prototype.fe = function(e) {
  218. var i, r;
  219. if (this.o === 1) {
  220. this.clear();
  221. return this.J;
  222. }
  223. var t = e;
  224. while (t.Y || t.Z) {
  225. if (t.Z) {
  226. t = t.Z;
  227. while (t.Y) t = t.Y;
  228. } else {
  229. t = t.Y;
  230. }
  231. i = __read([ t.W, e.W ], 2), e.W = i[0], t.W = i[1];
  232. r = __read([ t.L, e.L ], 2), e.L = r[0], t.L = r[1];
  233. e = t;
  234. }
  235. if (this.J.Y === t) {
  236. this.J.Y = t.tt;
  237. } else if (this.J.Z === t) {
  238. this.J.Z = t.tt;
  239. }
  240. this.he(t);
  241. var n = t.tt;
  242. if (t === n.Y) {
  243. n.Y = undefined;
  244. } else n.Z = undefined;
  245. this.o -= 1;
  246. this.rr.ee = 0;
  247. return n;
  248. };
  249. TreeContainer.prototype.ne = function(e) {
  250. while (true) {
  251. var i = e.tt;
  252. if (i.ee === 0) return;
  253. var r = i.tt;
  254. if (i === r.Y) {
  255. var t = r.Z;
  256. if (t && t.ee === 1) {
  257. t.ee = i.ee = 0;
  258. if (r === this.rr) return;
  259. r.ee = 1;
  260. e = r;
  261. continue;
  262. } else if (e === i.Z) {
  263. e.ee = 0;
  264. if (e.Y) e.Y.tt = i;
  265. if (e.Z) e.Z.tt = r;
  266. i.Z = e.Y;
  267. r.Y = e.Z;
  268. e.Y = i;
  269. e.Z = r;
  270. if (r === this.rr) {
  271. this.rr = e;
  272. this.J.tt = e;
  273. } else {
  274. var n = r.tt;
  275. if (n.Y === r) {
  276. n.Y = e;
  277. } else n.Z = e;
  278. }
  279. e.tt = r.tt;
  280. i.tt = e;
  281. r.tt = e;
  282. r.ee = 1;
  283. return {
  284. parentNode: i,
  285. grandParent: r,
  286. curNode: e
  287. };
  288. } else {
  289. i.ee = 0;
  290. if (r === this.rr) {
  291. this.rr = r.rotateRight();
  292. } else r.rotateRight();
  293. r.ee = 1;
  294. }
  295. } else {
  296. var t = r.Y;
  297. if (t && t.ee === 1) {
  298. t.ee = i.ee = 0;
  299. if (r === this.rr) return;
  300. r.ee = 1;
  301. e = r;
  302. continue;
  303. } else if (e === i.Y) {
  304. e.ee = 0;
  305. if (e.Y) e.Y.tt = r;
  306. if (e.Z) e.Z.tt = i;
  307. r.Z = e.Y;
  308. i.Y = e.Z;
  309. e.Y = r;
  310. e.Z = i;
  311. if (r === this.rr) {
  312. this.rr = e;
  313. this.J.tt = e;
  314. } else {
  315. var n = r.tt;
  316. if (n.Y === r) {
  317. n.Y = e;
  318. } else n.Z = e;
  319. }
  320. e.tt = r.tt;
  321. i.tt = e;
  322. r.tt = e;
  323. r.ee = 1;
  324. return {
  325. parentNode: i,
  326. grandParent: r,
  327. curNode: e
  328. };
  329. } else {
  330. i.ee = 0;
  331. if (r === this.rr) {
  332. this.rr = r.rotateLeft();
  333. } else r.rotateLeft();
  334. r.ee = 1;
  335. }
  336. }
  337. return;
  338. }
  339. };
  340. TreeContainer.prototype.te = function(e, i, r) {
  341. if (this.rr === undefined) {
  342. this.o += 1;
  343. this.rr = new this.re(e, i);
  344. this.rr.ee = 0;
  345. this.rr.tt = this.J;
  346. this.J.tt = this.rr;
  347. this.J.Y = this.rr;
  348. this.J.Z = this.rr;
  349. return;
  350. }
  351. var t;
  352. var n = this.J.Y;
  353. var s = this.A(n.W, e);
  354. if (s === 0) {
  355. n.L = i;
  356. return;
  357. } else if (s > 0) {
  358. n.Y = new this.re(e, i);
  359. n.Y.tt = n;
  360. t = n.Y;
  361. this.J.Y = t;
  362. } else {
  363. var f = this.J.Z;
  364. var h = this.A(f.W, e);
  365. if (h === 0) {
  366. f.L = i;
  367. return;
  368. } else if (h < 0) {
  369. f.Z = new this.re(e, i);
  370. f.Z.tt = f;
  371. t = f.Z;
  372. this.J.Z = t;
  373. } else {
  374. if (r !== undefined) {
  375. var u = r.D;
  376. if (u !== this.J) {
  377. var a = this.A(u.W, e);
  378. if (a === 0) {
  379. u.L = i;
  380. return;
  381. } else if (a > 0) {
  382. var o = u.pre();
  383. var l = this.A(o.W, e);
  384. if (l === 0) {
  385. o.L = i;
  386. return;
  387. } else if (l < 0) {
  388. t = new this.re(e, i);
  389. if (o.Z === undefined) {
  390. o.Z = t;
  391. t.tt = o;
  392. } else {
  393. u.Y = t;
  394. t.tt = u;
  395. }
  396. }
  397. }
  398. }
  399. }
  400. if (t === undefined) {
  401. t = this.rr;
  402. while (true) {
  403. var d = this.A(t.W, e);
  404. if (d > 0) {
  405. if (t.Y === undefined) {
  406. t.Y = new this.re(e, i);
  407. t.Y.tt = t;
  408. t = t.Y;
  409. break;
  410. }
  411. t = t.Y;
  412. } else if (d < 0) {
  413. if (t.Z === undefined) {
  414. t.Z = new this.re(e, i);
  415. t.Z.tt = t;
  416. t = t.Z;
  417. break;
  418. }
  419. t = t.Z;
  420. } else {
  421. t.L = i;
  422. return;
  423. }
  424. }
  425. }
  426. }
  427. }
  428. this.o += 1;
  429. return t;
  430. };
  431. TreeContainer.prototype.clear = function() {
  432. this.o = 0;
  433. this.rr = undefined;
  434. this.J.tt = undefined;
  435. this.J.Y = this.J.Z = undefined;
  436. };
  437. TreeContainer.prototype.updateKeyByIterator = function(e, i) {
  438. var r = e.D;
  439. if (r === this.J) {
  440. throw new TypeError("Invalid iterator!");
  441. }
  442. if (this.o === 1) {
  443. r.W = i;
  444. return true;
  445. }
  446. if (r === this.J.Y) {
  447. if (this.A(r.next().W, i) > 0) {
  448. r.W = i;
  449. return true;
  450. }
  451. return false;
  452. }
  453. if (r === this.J.Z) {
  454. if (this.A(r.pre().W, i) < 0) {
  455. r.W = i;
  456. return true;
  457. }
  458. return false;
  459. }
  460. var t = r.pre().W;
  461. if (this.A(t, i) >= 0) return false;
  462. var n = r.next().W;
  463. if (this.A(n, i) <= 0) return false;
  464. r.W = i;
  465. return true;
  466. };
  467. TreeContainer.prototype.eraseElementByPos = function(e) {
  468. var i = this;
  469. if (e < 0 || e > this.o - 1) {
  470. throw new RangeError;
  471. }
  472. var r = 0;
  473. this.ie(this.rr, (function(t) {
  474. if (e === r) {
  475. i.se(t);
  476. return true;
  477. }
  478. r += 1;
  479. return false;
  480. }));
  481. };
  482. TreeContainer.prototype.ar = function(e, i) {
  483. while (e) {
  484. var r = this.A(e.W, i);
  485. if (r < 0) {
  486. e = e.Z;
  487. } else if (r > 0) {
  488. e = e.Y;
  489. } else return e;
  490. }
  491. return e;
  492. };
  493. TreeContainer.prototype.eraseElementByKey = function(e) {
  494. if (!this.o) return;
  495. var i = this.ar(this.rr, e);
  496. if (i === undefined) return;
  497. this.se(i);
  498. };
  499. TreeContainer.prototype.eraseElementByIterator = function(e) {
  500. var i = e.D;
  501. if (i === this.J) {
  502. throw new RangeError("Invalid iterator");
  503. }
  504. if (i.Z === undefined) {
  505. e = e.next();
  506. }
  507. this.se(i);
  508. return e;
  509. };
  510. TreeContainer.prototype.getHeight = function() {
  511. if (!this.o) return 0;
  512. var traversal = function(e) {
  513. if (!e) return 0;
  514. return Math.max(traversal(e.Y), traversal(e.Z)) + 1;
  515. };
  516. return traversal(this.rr);
  517. };
  518. return TreeContainer;
  519. }(Container);
  520. export default TreeContainer;