diff options
author | zeertzjq <zeertzjq@outlook.com> | 2025-03-10 06:56:02 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-03-10 06:56:02 +0800 |
commit | 15f2da55a8ded9f1b7737cdd2d38c286fc581fd2 (patch) | |
tree | c2f43ab9e06fb3fc08ccc22d1842094739e938fc /src/nvim/autocmd.c | |
parent | 37786ccfcf07706c7524cdeef321bb4defba45b2 (diff) | |
download | rneovim-15f2da55a8ded9f1b7737cdd2d38c286fc581fd2.tar.gz rneovim-15f2da55a8ded9f1b7737cdd2d38c286fc581fd2.tar.bz2 rneovim-15f2da55a8ded9f1b7737cdd2d38c286fc581fd2.zip |
perf(events): use hashy for event name lookup (#32802)
Diffstat (limited to 'src/nvim/autocmd.c')
-rw-r--r-- | src/nvim/autocmd.c | 22 |
1 files changed, 8 insertions, 14 deletions
diff --git a/src/nvim/autocmd.c b/src/nvim/autocmd.c index 51d952ed3e..28c3906ce3 100644 --- a/src/nvim/autocmd.c +++ b/src/nvim/autocmd.c @@ -618,36 +618,30 @@ bool is_aucmd_win(win_T *win) event_T event_name2nr(const char *start, char **end) { const char *p; - int i; // the event name ends with end of line, '|', a blank or a comma for (p = start; *p && !ascii_iswhite(*p) && *p != ',' && *p != '|'; p++) {} - for (i = 0; event_names[i].name != NULL; i++) { - int len = (int)event_names[i].len; - if (len == p - start && STRNICMP(event_names[i].name, start, len) == 0) { - break; - } - } + + int hash_idx = event_name2nr_hash(start, (size_t)(p - start)); if (*p == ',') { p++; } *end = (char *)p; - if (event_names[i].name == NULL) { + if (hash_idx < 0) { return NUM_EVENTS; } - return (event_T)abs(event_names[i].event); + return (event_T)abs(event_names[event_hash[hash_idx]].event); } /// Return the event number for event name "str". /// Return NUM_EVENTS if the event name was not found. event_T event_name2nr_str(String str) { - for (int i = 0; event_names[i].name != NULL; i++) { - if (str.size == event_names[i].len && STRNICMP(str.data, event_names[i].name, str.size) == 0) { - return (event_T)abs(event_names[i].event); - } + int hash_idx = event_name2nr_hash(str.data, str.size); + if (hash_idx < 0) { + return NUM_EVENTS; } - return NUM_EVENTS; + return (event_T)abs(event_names[event_hash[hash_idx]].event); } /// Return the name for event |