diff options
Diffstat (limited to 'src/nvim/rbuffer.h')
-rw-r--r-- | src/nvim/rbuffer.h | 34 |
1 files changed, 10 insertions, 24 deletions
diff --git a/src/nvim/rbuffer.h b/src/nvim/rbuffer.h index 55e9849d3d..942e1f2365 100644 --- a/src/nvim/rbuffer.h +++ b/src/nvim/rbuffer.h @@ -16,6 +16,8 @@ #include <stddef.h> #include <stdint.h> +#include "nvim/rbuffer_defs.h" // IWYU pragma: keep + // Macros that simplify working with the read/write pointers directly by hiding // ring buffer wrap logic. Some examples: // @@ -36,50 +38,34 @@ // Note that the rbuffer_{produced,consumed} calls are necessary or these macros // create infinite loops #define RBUFFER_UNTIL_EMPTY(buf, rptr, rcnt) \ - for (size_t rcnt = 0, _r = 1; _r; _r = 0) /* NOLINT(readability/braces) */ \ - for (char *rptr = rbuffer_read_ptr(buf, &rcnt); /* NOLINT(readability/braces) */ \ + for (size_t rcnt = 0, _r = 1; _r; _r = 0) \ + for (char *rptr = rbuffer_read_ptr(buf, &rcnt); \ buf->size; \ rptr = rbuffer_read_ptr(buf, &rcnt)) #define RBUFFER_UNTIL_FULL(buf, wptr, wcnt) \ - for (size_t wcnt = 0, _r = 1; _r; _r = 0) /* NOLINT(readability/braces) */ \ - for (char *wptr = rbuffer_write_ptr(buf, &wcnt); /* NOLINT(readability/braces) */ \ + for (size_t wcnt = 0, _r = 1; _r; _r = 0) \ + for (char *wptr = rbuffer_write_ptr(buf, &wcnt); \ rbuffer_space(buf); \ wptr = rbuffer_write_ptr(buf, &wcnt)) // Iteration #define RBUFFER_EACH(buf, c, i) \ - for (size_t i = 0; /* NOLINT(readability/braces) */ \ + for (size_t i = 0; \ i < buf->size; \ i = buf->size) \ - for (char c = 0; /* NOLINT(readability/braces) */ \ + for (char c = 0; \ i < buf->size ? ((int)(c = *rbuffer_get(buf, i))) || 1 : 0; \ i++) #define RBUFFER_EACH_REVERSE(buf, c, i) \ - for (size_t i = buf->size; /* NOLINT(readability/braces) */ \ + for (size_t i = buf->size; \ i != SIZE_MAX; \ i = SIZE_MAX) \ - for (char c = 0; /* NOLINT(readability/braces) */ \ + for (char c = 0; \ i-- > 0 ? ((int)(c = *rbuffer_get(buf, i))) || 1 : 0; \ ) -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[]; -}; - #ifdef INCLUDE_GENERATED_DECLARATIONS # include "rbuffer.h.generated.h" #endif |