aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/math.c
diff options
context:
space:
mode:
authorLuuk van Baal <luukvbaal@gmail.com>2024-04-10 11:42:46 +0200
committerLuuk van Baal <luukvbaal@gmail.com>2024-05-02 15:57:06 +0200
commit037ea6e786b5d05f4a8965e4c2ba6aa60ec7c01a (patch)
treed59f33ff739409f1a280d2c3f9b8140a814c9e38 /src/nvim/math.c
parent7b14eb543d43344e2498335dc93a68d200469516 (diff)
downloadrneovim-037ea6e786b5d05f4a8965e4c2ba6aa60ec7c01a.tar.gz
rneovim-037ea6e786b5d05f4a8965e4c2ba6aa60ec7c01a.tar.bz2
rneovim-037ea6e786b5d05f4a8965e4c2ba6aa60ec7c01a.zip
feat(api): add nvim__redraw for more granular redrawing
Experimental and subject to future changes. Add a way to redraw certain elements that are not redrawn while Nvim is waiting for input, or currently have no API to do so. This API covers all that can be done with the :redraw* commands, in addition to the following new features: - Immediately move the cursor to a (non-current) window. - Target a specific window or buffer to mark for redraw. - Mark a buffer range for redraw (replaces nvim__buf_redraw_range()). - Redraw the 'statuscolumn'.
Diffstat (limited to 'src/nvim/math.c')
-rw-r--r--src/nvim/math.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/nvim/math.c b/src/nvim/math.c
index 47a667416c..1ccf4d7806 100644
--- a/src/nvim/math.c
+++ b/src/nvim/math.c
@@ -77,6 +77,23 @@ int xctz(uint64_t x)
#endif
}
+/// Count number of set bits in bit field.
+int popcount(uint64_t x)
+{
+ // Use compiler builtin if possible.
+#if defined(__clang__) || defined(__GNUC__)
+ return __builtin_popcountll(x);
+#else
+ int count = 0;
+ for (; x != 0; x >>= 1) {
+ if (x & 1) {
+ count++;
+ }
+ }
+ return count;
+#endif
+}
+
/// For overflow detection, add a digit safely to an int value.
int vim_append_digit_int(int *value, int digit)
{