diff options
author | bfredl <bjorn.linse@gmail.com> | 2022-05-01 10:27:18 +0200 |
---|---|---|
committer | Famiu Haque <famiuhaque@protonmail.com> | 2022-05-09 19:53:47 +0600 |
commit | 77863b8e96324bc9e575af7f3f1b7e5de90fbadb (patch) | |
tree | 82ed4be2c03641114b88a2770124bace9dc90214 | |
parent | 8658e8235751f92ce133ec1cd58a7b701340100c (diff) | |
download | rneovim-77863b8e96324bc9e575af7f3f1b7e5de90fbadb.tar.gz rneovim-77863b8e96324bc9e575af7f3f1b7e5de90fbadb.tar.bz2 rneovim-77863b8e96324bc9e575af7f3f1b7e5de90fbadb.zip |
feat(keyset): allow hash conflicts
-rw-r--r-- | src/nvim/generators/hashy.lua | 24 |
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 |