diff options
Diffstat (limited to 'src/nvim/rbuffer_defs.h')
-rw-r--r-- | src/nvim/rbuffer_defs.h | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/nvim/rbuffer_defs.h b/src/nvim/rbuffer_defs.h new file mode 100644 index 0000000000..51dc349846 --- /dev/null +++ b/src/nvim/rbuffer_defs.h @@ -0,0 +1,45 @@ +#pragma once + +#include <stddef.h> + +#include "nvim/func_attr.h" + +typedef struct rbuffer RBuffer; +/// Type of function invoked during certain events: +/// - When the RBuffer switches to the full state +/// - When the RBuffer switches to the non-full state +typedef void (*rbuffer_callback)(RBuffer *buf, void *data); + +struct rbuffer { + rbuffer_callback full_cb, nonfull_cb; + void *data; + size_t size; + // helper memory used to by rbuffer_reset if required + char *temp; + char *end_ptr, *read_ptr, *write_ptr; + char start_ptr[]; +}; + +static inline size_t rbuffer_size(RBuffer *buf) + REAL_FATTR_ALWAYS_INLINE REAL_FATTR_NONNULL_ALL; + +static inline size_t rbuffer_size(RBuffer *buf) +{ + return buf->size; +} + +static inline size_t rbuffer_capacity(RBuffer *buf) + REAL_FATTR_ALWAYS_INLINE REAL_FATTR_NONNULL_ALL; + +static inline size_t rbuffer_capacity(RBuffer *buf) +{ + return (size_t)(buf->end_ptr - buf->start_ptr); +} + +static inline size_t rbuffer_space(RBuffer *buf) + REAL_FATTR_ALWAYS_INLINE REAL_FATTR_NONNULL_ALL; + +static inline size_t rbuffer_space(RBuffer *buf) +{ + return rbuffer_capacity(buf) - buf->size; +} |