From 04c45a7eebccdd85003beaf1e966b392a6d432f2 Mon Sep 17 00:00:00 2001 From: Jeff Welch Date: Fri, 10 Sep 2010 00:06:57 -0500 Subject: [PATCH] Optimized the autocomplete search so that it uses a binary search instead of a linear search. --- src/__init__.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/__init__.py b/src/__init__.py index 159eb44..417c9cd 100644 --- a/src/__init__.py +++ b/src/__init__.py @@ -4,6 +4,7 @@ from subprocess import Popen, PIPE from threading import Thread +from bisect import bisect import ansicolor as clr import cmd_util as cu import ctags @@ -500,9 +501,11 @@ def tab_complete(text, state): return None if state == 0: self.autocomplete_cache = [] - for identifier in self.autocomplete_identifiers: - if identifier.startswith(text): - self.autocomplete_cache.append(identifier) + pos = bisect(self.autocomplete_identifiers, text) + + while self.autocomplete_identifiers[pos].startswith(text): + self.autocomplete_cache.append(self.autocomplete_identifiers[pos]) + pos = pos + 1 if self.function_signatures.has_key(text): for sig in self.function_signatures[text]: @@ -723,7 +726,7 @@ def php_open(self): p_line = self.p.stdout.readline().rstrip() if p_line == "#end_autocomplete_identifiers": break - self.autocomplete_identifiers.append(p_line) + self.autocomplete_identifiers.insert(bisect(self.autocomplete_identifiers, p_line), p_line) def wait_for_comm_finish(self, defer_output=False): try: