Index: third_party/WebKit/Source/devtools/front_end/common/Trie.js |
diff --git a/third_party/WebKit/Source/devtools/front_end/common/Trie.js b/third_party/WebKit/Source/devtools/front_end/common/Trie.js |
index 808622e712c3f114f94109f1362657265fab5852..f24b454a3b583d9a735cfec4d10d6d986ac876f0 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/common/Trie.js |
+++ b/third_party/WebKit/Source/devtools/front_end/common/Trie.js |
@@ -1,144 +1,135 @@ |
// Copyright 2016 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
- |
/** |
- * @constructor |
+ * @unrestricted |
*/ |
-WebInspector.Trie = function() |
-{ |
+WebInspector.Trie = class { |
+ constructor() { |
this.clear(); |
-}; |
- |
-WebInspector.Trie.prototype = { |
- /** |
- * @param {string} word |
- */ |
- add: function(word) |
- { |
- var node = this._root; |
- ++this._wordsInSubtree[this._root]; |
- for (var i = 0; i < word.length; ++i) { |
- var edge = word[i]; |
- var next = this._edges[node][edge]; |
- if (!next) { |
- if (this._freeNodes.length) { |
- // No need to reset any fields since they were properly cleaned up in remove(). |
- next = this._freeNodes.pop(); |
- } else { |
- next = this._size++; |
- this._isWord.push(false); |
- this._wordsInSubtree.push(0); |
- this._edges.push({ __proto__: null }); |
- } |
- this._edges[node][edge] = next; |
- } |
- ++this._wordsInSubtree[next]; |
- node = next; |
- } |
- this._isWord[node] = true; |
- }, |
+ } |
- /** |
- * @param {string} word |
- * @return {boolean} |
- */ |
- remove: function(word) |
- { |
- if (!this.has(word)) |
- return false; |
- var node = this._root; |
- --this._wordsInSubtree[this._root]; |
- for (var i = 0; i < word.length; ++i) { |
- var edge = word[i]; |
- var next = this._edges[node][edge]; |
- if (!--this._wordsInSubtree[next]) { |
- delete this._edges[node][edge]; |
- this._freeNodes.push(next); |
- } |
- node = next; |
+ /** |
+ * @param {string} word |
+ */ |
+ add(word) { |
+ var node = this._root; |
+ ++this._wordsInSubtree[this._root]; |
+ for (var i = 0; i < word.length; ++i) { |
+ var edge = word[i]; |
+ var next = this._edges[node][edge]; |
+ if (!next) { |
+ if (this._freeNodes.length) { |
+ // No need to reset any fields since they were properly cleaned up in remove(). |
+ next = this._freeNodes.pop(); |
+ } else { |
+ next = this._size++; |
+ this._isWord.push(false); |
+ this._wordsInSubtree.push(0); |
+ this._edges.push({__proto__: null}); |
} |
- this._isWord[node] = false; |
- return true; |
- }, |
+ this._edges[node][edge] = next; |
+ } |
+ ++this._wordsInSubtree[next]; |
+ node = next; |
+ } |
+ this._isWord[node] = true; |
+ } |
- /** |
- * @param {string} word |
- * @return {boolean} |
- */ |
- has: function(word) |
- { |
- var node = this._root; |
- for (var i = 0; i < word.length; ++i) { |
- node = this._edges[node][word[i]]; |
- if (!node) |
- return false; |
- } |
- return this._isWord[node]; |
- }, |
+ /** |
+ * @param {string} word |
+ * @return {boolean} |
+ */ |
+ remove(word) { |
+ if (!this.has(word)) |
+ return false; |
+ var node = this._root; |
+ --this._wordsInSubtree[this._root]; |
+ for (var i = 0; i < word.length; ++i) { |
+ var edge = word[i]; |
+ var next = this._edges[node][edge]; |
+ if (!--this._wordsInSubtree[next]) { |
+ delete this._edges[node][edge]; |
+ this._freeNodes.push(next); |
+ } |
+ node = next; |
+ } |
+ this._isWord[node] = false; |
+ return true; |
+ } |
- /** |
- * @param {string=} prefix |
- * @return {!Array<string>} |
- */ |
- words: function(prefix) |
- { |
- prefix = prefix || ""; |
- var node = this._root; |
- for (var i = 0; i < prefix.length; ++i) { |
- node = this._edges[node][prefix[i]]; |
- if (!node) |
- return []; |
- } |
- var results = []; |
- this._dfs(node, prefix, results); |
- return results; |
- }, |
+ /** |
+ * @param {string} word |
+ * @return {boolean} |
+ */ |
+ has(word) { |
+ var node = this._root; |
+ for (var i = 0; i < word.length; ++i) { |
+ node = this._edges[node][word[i]]; |
+ if (!node) |
+ return false; |
+ } |
+ return this._isWord[node]; |
+ } |
- /** |
- * @param {number} node |
- * @param {string} prefix |
- * @param {!Array<string>} results |
- */ |
- _dfs: function(node, prefix, results) |
- { |
- if (this._isWord[node]) |
- results.push(prefix); |
- var edges = this._edges[node]; |
- for (var edge in edges) |
- this._dfs(edges[edge], prefix + edge, results); |
- }, |
+ /** |
+ * @param {string=} prefix |
+ * @return {!Array<string>} |
+ */ |
+ words(prefix) { |
+ prefix = prefix || ''; |
+ var node = this._root; |
+ for (var i = 0; i < prefix.length; ++i) { |
+ node = this._edges[node][prefix[i]]; |
+ if (!node) |
+ return []; |
+ } |
+ var results = []; |
+ this._dfs(node, prefix, results); |
+ return results; |
+ } |
- /** |
- * @param {string} word |
- * @param {boolean} fullWordOnly |
- * @return {string} |
- */ |
- longestPrefix: function(word, fullWordOnly) |
- { |
- var node = this._root; |
- var wordIndex = 0; |
- for (var i = 0; i < word.length; ++i) { |
- node = this._edges[node][word[i]]; |
- if (!node) |
- break; |
- if (!fullWordOnly || this._isWord[node]) |
- wordIndex = i + 1; |
- } |
- return word.substring(0, wordIndex); |
- }, |
+ /** |
+ * @param {number} node |
+ * @param {string} prefix |
+ * @param {!Array<string>} results |
+ */ |
+ _dfs(node, prefix, results) { |
+ if (this._isWord[node]) |
+ results.push(prefix); |
+ var edges = this._edges[node]; |
+ for (var edge in edges) |
+ this._dfs(edges[edge], prefix + edge, results); |
+ } |
- clear: function() |
- { |
- this._size = 1; |
- this._root = 0; |
- /** @type {!Array<!Object<string, number>>} */ |
- this._edges = [{ __proto__: null }]; |
- /** @type {!Array<boolean>} */ |
- this._isWord = [false]; |
- /** @type {!Array<number>} */ |
- this._wordsInSubtree = [0]; |
- /** @type {!Array<number>} */ |
- this._freeNodes = []; |
+ /** |
+ * @param {string} word |
+ * @param {boolean} fullWordOnly |
+ * @return {string} |
+ */ |
+ longestPrefix(word, fullWordOnly) { |
+ var node = this._root; |
+ var wordIndex = 0; |
+ for (var i = 0; i < word.length; ++i) { |
+ node = this._edges[node][word[i]]; |
+ if (!node) |
+ break; |
+ if (!fullWordOnly || this._isWord[node]) |
+ wordIndex = i + 1; |
} |
+ return word.substring(0, wordIndex); |
+ } |
+ |
+ clear() { |
+ this._size = 1; |
+ this._root = 0; |
+ /** @type {!Array<!Object<string, number>>} */ |
+ this._edges = [{__proto__: null}]; |
+ /** @type {!Array<boolean>} */ |
+ this._isWord = [false]; |
+ /** @type {!Array<number>} */ |
+ this._wordsInSubtree = [0]; |
+ /** @type {!Array<number>} */ |
+ this._freeNodes = []; |
+ } |
}; |