Mercurial > vim
diff src/structs.h @ 15247:336728a577f5 v8.1.0632
patch 8.1.0632: using sign group names is inefficient
commit https://github.com/vim/vim/commit/7a2d9892b7158edf8dc48e9bcaaae70a40787b37
Author: Bram Moolenaar <Bram@vim.org>
Date: Mon Dec 24 20:23:49 2018 +0100
patch 8.1.0632: using sign group names is inefficient
Problem: Using sign group names is inefficient.
Solution: Store group names in a hash table and use a reference to them.
Also remove unnecessary use of ":exe" from the tests. (Yegappan
Lakshmanan, closes #3715)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Mon, 24 Dec 2018 20:30:04 +0100 |
parents | 83ff85896a14 |
children | 19e79a1ed6b6 |
line wrap: on
line diff
--- a/src/structs.h +++ b/src/structs.h @@ -733,6 +733,17 @@ typedef struct proptype_S #if defined(FEAT_SIGNS) || defined(PROTO) +// Sign group +typedef struct signgroup_S +{ + short_u refcount; // number of signs in this group + char_u sg_name[1]; // sign group name +} signgroup_T; + +// Macros to get the sign group structure from the group name +#define SGN_KEY_OFF offsetof(signgroup_T, sg_name) +#define HI2SG(hi) ((signgroup_T *)((hi)->hi_key - SGN_KEY_OFF)) + typedef struct signlist signlist_T; struct signlist @@ -740,7 +751,7 @@ struct signlist int id; /* unique identifier for each placed sign */ linenr_T lnum; /* line number which has this sign */ int typenr; /* typenr of sign */ - char_u *group; /* sign group */ + signgroup_T *group; /* sign group */ int priority; /* priority for highlighting */ signlist_T *next; /* next signlist entry */ signlist_T *prev; /* previous entry -- for easy reordering */