diff options
author | Guido Cella <guido@guidocella.xyz> | 2023-12-26 19:40:41 +0100 |
---|---|---|
committer | sfan5 <sfan5@live.de> | 2023-12-26 20:12:24 +0100 |
commit | 19a37f625fcd502acea42b4f27029c8be724d40c (patch) | |
tree | 8dfcb4ccf8dd76e287c41a7108c57527bcf52fa1 /player/lua | |
parent | 4d7763e6a65a2020aba505e378e83f49648bfa24 (diff) | |
download | mpv-19a37f625fcd502acea42b4f27029c8be724d40c.tar.bz2 mpv-19a37f625fcd502acea42b4f27029c8be724d40c.tar.xz |
console.lua: refactor find_common_prefix
Reuse common_prefix_length() to make find_common_prefix() shorter and
faster by not creating many temporary strings.
The decrease in the average time to run find_common_prefix() over 1000
calls I measured is:
set \<Tab>: 1e-4s -> 1e-5s
set s\Tab>: 1e-5s -> 5e-6s
Diffstat (limited to 'player/lua')
-rw-r--r-- | player/lua/console.lua | 23 |
1 files changed, 7 insertions, 16 deletions
diff --git a/player/lua/console.lua b/player/lua/console.lua index b4e722105f..767abc9dd2 100644 --- a/player/lua/console.lua +++ b/player/lua/console.lua @@ -911,19 +911,11 @@ function build_completers() end -- Find the longest common case-sensitive prefix of the entries in "list". -local function find_common_prefix(part, list) - local prefix = nil - - for _, candidate in ipairs(list) do - if prefix and prefix ~= candidate then - local prefix_len = part:len() - while prefix:sub(1, prefix_len + 1) == candidate:sub(1, prefix_len + 1) do - prefix_len = prefix_len + 1 - end - prefix = candidate:sub(1, prefix_len) - else - prefix = candidate - end +local function find_common_prefix(list) + local prefix = list[1] + + for i = 2, #list do + prefix = prefix:sub(1, common_prefix_length(prefix, list[i])) end return prefix @@ -940,7 +932,7 @@ local function complete_match(part, list) end end - local prefix = find_common_prefix(part, completions) + local prefix = find_common_prefix(completions) if opts.case_sensitive then return completions, prefix @@ -957,8 +949,7 @@ local function complete_match(part, list) end end - local lower_case_prefix = find_common_prefix(lower_case_part, - lower_case_completions) + local lower_case_prefix = find_common_prefix(lower_case_completions) -- Behave like GNU readline with completion-ignore-case On. -- part = 'fooBA', completions = {'foobarbaz', 'fooBARqux'} => |