aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbfredl <bjorn.linse@gmail.com>2022-05-01 10:27:18 +0200
committerFamiu Haque <famiuhaque@protonmail.com>2022-05-09 19:53:47 +0600
commit77863b8e96324bc9e575af7f3f1b7e5de90fbadb (patch)
tree82ed4be2c03641114b88a2770124bace9dc90214
parent8658e8235751f92ce133ec1cd58a7b701340100c (diff)
downloadrneovim-77863b8e96324bc9e575af7f3f1b7e5de90fbadb.tar.gz
rneovim-77863b8e96324bc9e575af7f3f1b7e5de90fbadb.tar.bz2
rneovim-77863b8e96324bc9e575af7f3f1b7e5de90fbadb.zip
feat(keyset): allow hash conflicts
-rw-r--r--src/nvim/generators/hashy.lua24
1 files changed, 15 insertions, 9 deletions
diff --git a/src/nvim/generators/hashy.lua b/src/nvim/generators/hashy.lua
index fac24c810a..b10bafb9f9 100644
--- a/src/nvim/generators/hashy.lua
+++ b/src/nvim/generators/hashy.lua
@@ -77,7 +77,7 @@ function M.switcher(put, tab, maxlen, worst_buck_size)
put "break;\n"
end
put " default: break;\n"
- put " }\n "
+ put " }\n "
else
local startidx = #neworder
table.insert(neworder, posbuck[keys[1]][1])
@@ -85,7 +85,7 @@ function M.switcher(put, tab, maxlen, worst_buck_size)
put("low = "..startidx.."; ")
if bucky then put("high = "..endidx.."; ") end
end
- put " break;\n"
+ put "break;\n"
end
end
put " default: break;\n"
@@ -105,17 +105,23 @@ function M.hashy_hash(name, strings, access)
end
local neworder = M.switcher(put, len_pos_buckets, maxlen, worst_buck_size)
if worst_buck_size > 1 then
- error [[ not implemented yet ]] -- TODO(bfredl)
+ put ([[
+ for (int i = low; i < high; i++) {
+ if (!memcmp(str, ]]..access("i")..[[, len)) {
+ return i;
+ }
+ }
+ return -1;
+]])
else
- put [[
- if (low < 0) {
+ put ([[
+ if (low < 0 || memcmp(str, ]]..access("low")..[[, len)) {
return -1;
}
- ]]
- put("if(memcmp(str, "..access("low")..", len)) {\n return -1;\n }\n")
- put " return low;\n"
- put "}\n\n"
+ return low;
+]])
end
+ put "}\n\n"
return neworder, table.concat(stats)
end