From 8b6d343fcf46fdd1f17ce3ea32fa02ea1f3ac7f0 Mon Sep 17 00:00:00 2001 From: ZLY201 <951711127@qq.com> Date: Wed, 31 Aug 2022 23:39:47 +0800 Subject: [PATCH] perf: migrate rbTree to js-sdsl --- lib/rules/indent.js | 34 +++++++++++++++++++--------------- package.json | 2 +- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/lib/rules/indent.js b/lib/rules/indent.js index b974a6ab150..b15ed88e602 100644 --- a/lib/rules/indent.js +++ b/lib/rules/indent.js @@ -12,7 +12,7 @@ // Requirements //------------------------------------------------------------------------------ -const createTree = require("functional-red-black-tree"); +const { OrderedMap } = require("js-sdsl"); const astUtils = require("./utils/ast-utils"); @@ -135,7 +135,8 @@ class BinarySearchTree { * Creates an empty tree */ constructor() { - this._rbTree = createTree(); + this._rbTree = new OrderedMap(); + this._rbTreeEnd = this._rbTree.end(); } /** @@ -145,13 +146,7 @@ class BinarySearchTree { * @returns {void} */ insert(key, value) { - const iterator = this._rbTree.find(key); - - if (iterator.valid) { - this._rbTree = iterator.update(value); - } else { - this._rbTree = this._rbTree.insert(key, value); - } + this._rbTree.setElement(key, value); } /** @@ -160,9 +155,9 @@ class BinarySearchTree { * @returns {{key: number, value: *}|null} The found entry, or null if no such entry exists. */ findLe(key) { - const iterator = this._rbTree.le(key); + const iterator = this._rbTree.reverseLowerBound(key); - return iterator && { key: iterator.key, value: iterator.value }; + return { key: iterator.pointer[0], value: iterator.pointer[1] }; } /** @@ -177,11 +172,20 @@ class BinarySearchTree { if (start === end) { return; } - const iterator = this._rbTree.ge(start); + const iterator = this._rbTree.lowerBound(start); - while (iterator.valid && iterator.key < end) { - this._rbTree = this._rbTree.remove(iterator.key); - iterator.next(); + if (iterator.equals(this._rbTreeEnd)) { + return; + } + + if (end > this._rbTree.back()[0]) { + while (!iterator.equals(this._rbTreeEnd)) { + this._rbTree.eraseElementByIterator(iterator); + } + } else { + while (iterator.pointer[0] < end) { + this._rbTree.eraseElementByIterator(iterator); + } } } } diff --git a/package.json b/package.json index c21dad41b8e..4bd529da3e1 100644 --- a/package.json +++ b/package.json @@ -74,7 +74,6 @@ "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", - "functional-red-black-tree": "^1.0.1", "glob-parent": "^6.0.1", "globals": "^13.15.0", "globby": "^11.1.0", @@ -83,6 +82,7 @@ "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "js-sdsl": "^4.1.4-beta.0", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1",