debt - use SearchTree over Trie'ish

This commit is contained in:
Johannes Rieken
2017-10-02 14:31:18 +02:00
parent 49d115a21b
commit 8414d5c03e
10 changed files with 49 additions and 195 deletions

View File

@@ -5,7 +5,7 @@
'use strict';
import { Emitter } from 'vs/base/common/event';
import { StringTrieMap } from 'vs/base/common/map';
import { TernarySearchTree } from 'vs/base/common/map';
import { score } from 'vs/editor/common/modes/languageSelector';
import * as Platform from 'vs/base/common/platform';
import * as errors from 'vs/base/common/errors';
@@ -674,7 +674,7 @@ export function initializeExtensionApi(extensionService: ExtHostExtensionService
return extensionService.getExtensionPathIndex().then(trie => defineAPI(apiFactory, trie));
}
function defineAPI(factory: IExtensionApiFactory, extensionPaths: StringTrieMap<IExtensionDescription>): void {
function defineAPI(factory: IExtensionApiFactory, extensionPaths: TernarySearchTree<IExtensionDescription>): void {
// each extension is meant to get its own api implementation
const extApiImpl = new Map<string, typeof vscode>();

View File

@@ -18,7 +18,7 @@ import { IExtensionMemento, ExtensionsActivator, ActivatedExtension, IExtensionA
import { Barrier } from 'vs/workbench/services/extensions/node/barrier';
import { ExtHostThreadService } from 'vs/workbench/services/thread/node/extHostThreadService';
import { realpath } from 'fs';
import { StringTrieMap } from 'vs/base/common/map';
import { TernarySearchTree } from 'vs/base/common/map';
class ExtensionMemento implements IExtensionMemento {
@@ -116,7 +116,7 @@ export class ExtHostExtensionService implements ExtHostExtensionServiceShape {
private readonly _storagePath: ExtensionStoragePath;
private readonly _proxy: MainThreadExtensionServiceShape;
private _activator: ExtensionsActivator;
private _extensionPathIndex: TPromise<StringTrieMap<IExtensionDescription>>;
private _extensionPathIndex: TPromise<TernarySearchTree<IExtensionDescription>>;
/**
* This class is constructed manually because it is a service, so it doesn't use any ctor injection
*/
@@ -204,9 +204,9 @@ export class ExtHostExtensionService implements ExtHostExtensionServiceShape {
}
// create trie to enable fast 'filename -> extension id' look up
public getExtensionPathIndex(): TPromise<StringTrieMap<IExtensionDescription>> {
public getExtensionPathIndex(): TPromise<TernarySearchTree<IExtensionDescription>> {
if (!this._extensionPathIndex) {
const trie = new StringTrieMap<IExtensionDescription>();
const tree = TernarySearchTree.forPaths<IExtensionDescription>();
const extensions = this.getAllExtensionDescriptions().map(ext => {
if (!ext.main) {
return undefined;
@@ -216,13 +216,13 @@ export class ExtHostExtensionService implements ExtHostExtensionServiceShape {
if (err) {
reject(err);
} else {
trie.set(path, ext);
tree.set(path, ext);
resolve(void 0);
}
});
});
});
this._extensionPathIndex = TPromise.join(extensions).then(() => trie);
this._extensionPathIndex = TPromise.join(extensions).then(() => tree);
}
return this._extensionPathIndex;
}

View File

@@ -13,7 +13,7 @@ import { Workspace, WorkspaceFolder } from 'vs/platform/workspace/common/workspa
import { IWorkspaceData, ExtHostWorkspaceShape, MainContext, MainThreadWorkspaceShape, IMainContext } from './extHost.protocol';
import * as vscode from 'vscode';
import { compare } from 'vs/base/common/strings';
import { TernarySearchTree, PathSegments } from 'vs/base/common/map';
import { TernarySearchTree } from 'vs/base/common/map';
import { IRelativePattern } from 'vs/base/common/glob';
class Workspace2 extends Workspace {
@@ -23,7 +23,7 @@ class Workspace2 extends Workspace {
}
private readonly _workspaceFolders: vscode.WorkspaceFolder[] = [];
private readonly _structure = new TernarySearchTree<vscode.WorkspaceFolder>(new PathSegments());
private readonly _structure = TernarySearchTree.forPaths<vscode.WorkspaceFolder>();
private constructor(data: IWorkspaceData) {
super(data.id, data.name, data.folders.map(folder => new WorkspaceFolder(folder)));