aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/rbuffer.c
diff options
context:
space:
mode:
authorbfredl <bjorn.linse@gmail.com>2022-06-02 23:01:21 +0200
committerGitHub <noreply@github.com>2022-06-02 23:01:21 +0200
commit9745941ef620da86bf18f965f85e8fc2ce8206b5 (patch)
tree083649c7f958c9292b4fe6307d97d08e52358156 /src/nvim/rbuffer.c
parent26966688aa622b448e3ef46d8f1155d57b099211 (diff)
parentd5f047bee04a42f40425c34061c84b39af846e1f (diff)
downloadrneovim-9745941ef620da86bf18f965f85e8fc2ce8206b5.tar.gz
rneovim-9745941ef620da86bf18f965f85e8fc2ce8206b5.tar.bz2
rneovim-9745941ef620da86bf18f965f85e8fc2ce8206b5.zip
Merge pull request #18730 from bfredl/apiconvert
convert API types using mpack instead of msgpack
Diffstat (limited to 'src/nvim/rbuffer.c')
-rw-r--r--src/nvim/rbuffer.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/nvim/rbuffer.c b/src/nvim/rbuffer.c
index d280e08c03..6407ac172e 100644
--- a/src/nvim/rbuffer.c
+++ b/src/nvim/rbuffer.c
@@ -154,6 +154,23 @@ void rbuffer_consumed(RBuffer *buf, size_t count)
}
}
+/// Use instead of rbuffer_consumed to use rbuffer in a linear, non-cyclic fashion.
+///
+/// This is generally usefull if we can guarantee to parse all input
+/// except some small incomplete token, like when parsing msgpack.
+void rbuffer_consumed_compact(RBuffer *buf, size_t count)
+ FUNC_ATTR_NONNULL_ALL
+{
+ assert(buf->read_ptr <= buf->write_ptr);
+ rbuffer_consumed(buf, count);
+ if (buf->read_ptr > buf->start_ptr) {
+ assert((size_t)(buf->read_ptr - buf->write_ptr) == buf->size);
+ memmove(buf->start_ptr, buf->read_ptr, buf->size);
+ buf->read_ptr = buf->start_ptr;
+ buf->write_ptr = buf->read_ptr + buf->size;
+ }
+}
+
// Higher level functions for copying from/to RBuffer instances and data
// pointers
size_t rbuffer_write(RBuffer *buf, const char *src, size_t src_size)