mirror of
https://github.com/neovim/neovim.git
synced 2025-10-01 23:48:32 +00:00
rstream: Add rbuffer_read_ptr/rbuffer_write_ptr functions
rbuffer_data was renamed to rbuffer_read_ptr, and it represents the next read position in a RBuffer instance. Similarly, rbuffer_write_ptr was added to represent the next write position. Also, rbuffer_data was being used for writing(in alloc_cb), replace that by rbuffer_write_ptr.
This commit is contained in:
@@ -152,7 +152,7 @@ String input_buffer_save(void)
|
|||||||
{
|
{
|
||||||
size_t inbuf_size = rbuffer_pending(input_buffer);
|
size_t inbuf_size = rbuffer_pending(input_buffer);
|
||||||
String rv = {
|
String rv = {
|
||||||
.data = xmemdup(rbuffer_data(input_buffer), inbuf_size),
|
.data = xmemdup(rbuffer_read_ptr(input_buffer), inbuf_size),
|
||||||
.size = inbuf_size
|
.size = inbuf_size
|
||||||
};
|
};
|
||||||
rbuffer_consumed(input_buffer, inbuf_size);
|
rbuffer_consumed(input_buffer, inbuf_size);
|
||||||
@@ -242,7 +242,7 @@ static void convert_input(void)
|
|||||||
|
|
||||||
bool convert = input_conv.vc_type != CONV_NONE;
|
bool convert = input_conv.vc_type != CONV_NONE;
|
||||||
// Set unconverted data/length
|
// Set unconverted data/length
|
||||||
char *data = rbuffer_data(read_buffer);
|
char *data = rbuffer_read_ptr(read_buffer);
|
||||||
size_t data_length = rbuffer_pending(read_buffer);
|
size_t data_length = rbuffer_pending(read_buffer);
|
||||||
size_t converted_length = data_length;
|
size_t converted_length = data_length;
|
||||||
|
|
||||||
@@ -270,7 +270,7 @@ static void convert_input(void)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *inbuf = rbuffer_data(input_buffer);
|
char *inbuf = rbuffer_read_ptr(input_buffer);
|
||||||
size_t count = rbuffer_pending(input_buffer), consume_count = 0;
|
size_t count = rbuffer_pending(input_buffer), consume_count = 0;
|
||||||
|
|
||||||
for (int i = count - 1; i >= 0; i--) {
|
for (int i = count - 1; i >= 0; i--) {
|
||||||
|
@@ -54,8 +54,9 @@ RBuffer *rbuffer_new(size_t capacity)
|
|||||||
/// Advances `rbuffer` read pointers to consume data. If the associated
|
/// Advances `rbuffer` read pointers to consume data. If the associated
|
||||||
/// RStream had stopped because the buffer was full, this will restart it.
|
/// RStream had stopped because the buffer was full, this will restart it.
|
||||||
///
|
///
|
||||||
/// This is called automatically by rbuffer_read, but when using `rbuffer_data`
|
/// This is called automatically by rbuffer_read, but when using
|
||||||
/// directly, this needs to called after the data was consumed.
|
/// `rbuffer_read_ptr` directly, this needs to called after the data was
|
||||||
|
/// consumed.
|
||||||
void rbuffer_consumed(RBuffer *rbuffer, size_t count)
|
void rbuffer_consumed(RBuffer *rbuffer, size_t count)
|
||||||
{
|
{
|
||||||
rbuffer->rpos += count;
|
rbuffer->rpos += count;
|
||||||
@@ -105,7 +106,7 @@ size_t rbuffer_read(RBuffer *rbuffer, char *buffer, size_t count)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (read_count > 0) {
|
if (read_count > 0) {
|
||||||
memcpy(buffer, rbuffer_data(rbuffer), read_count);
|
memcpy(buffer, rbuffer_read_ptr(rbuffer), read_count);
|
||||||
rbuffer_consumed(rbuffer, read_count);
|
rbuffer_consumed(rbuffer, read_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -127,7 +128,7 @@ size_t rbuffer_write(RBuffer *rbuffer, char *buffer, size_t count)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (write_count > 0) {
|
if (write_count > 0) {
|
||||||
memcpy(rbuffer_data(rbuffer), buffer, write_count);
|
memcpy(rbuffer_write_ptr(rbuffer), buffer, write_count);
|
||||||
rbuffer_produced(rbuffer, write_count);
|
rbuffer_produced(rbuffer, write_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -136,11 +137,18 @@ size_t rbuffer_write(RBuffer *rbuffer, char *buffer, size_t count)
|
|||||||
|
|
||||||
/// Returns a pointer to a raw buffer containing the first byte available for
|
/// Returns a pointer to a raw buffer containing the first byte available for
|
||||||
/// reading.
|
/// reading.
|
||||||
char *rbuffer_data(RBuffer *rbuffer)
|
char *rbuffer_read_ptr(RBuffer *rbuffer)
|
||||||
{
|
{
|
||||||
return rbuffer->data + rbuffer->rpos;
|
return rbuffer->data + rbuffer->rpos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns a pointer to a raw buffer containing the first byte available for
|
||||||
|
/// write.
|
||||||
|
char *rbuffer_write_ptr(RBuffer *rbuffer)
|
||||||
|
{
|
||||||
|
return rbuffer->data + rbuffer->wpos;
|
||||||
|
}
|
||||||
|
|
||||||
/// Returns the number of bytes ready for consumption in `rbuffer`
|
/// Returns the number of bytes ready for consumption in `rbuffer`
|
||||||
///
|
///
|
||||||
/// @param rbuffer The `RBuffer` instance
|
/// @param rbuffer The `RBuffer` instance
|
||||||
@@ -337,7 +345,7 @@ static void alloc_cb(uv_handle_t *handle, size_t suggested, uv_buf_t *buf)
|
|||||||
RStream *rstream = handle_get_rstream(handle);
|
RStream *rstream = handle_get_rstream(handle);
|
||||||
|
|
||||||
buf->len = rbuffer_available(rstream->buffer);
|
buf->len = rbuffer_available(rstream->buffer);
|
||||||
buf->base = rbuffer_data(rstream->buffer);
|
buf->base = rbuffer_write_ptr(rstream->buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Callback invoked by libuv after it copies the data into the buffer provided
|
// Callback invoked by libuv after it copies the data into the buffer provided
|
||||||
@@ -375,8 +383,8 @@ static void fread_idle_cb(uv_idle_t *handle)
|
|||||||
uv_fs_t req;
|
uv_fs_t req;
|
||||||
RStream *rstream = handle_get_rstream((uv_handle_t *)handle);
|
RStream *rstream = handle_get_rstream((uv_handle_t *)handle);
|
||||||
|
|
||||||
rstream->uvbuf.len = rstream->buffer->capacity - rstream->buffer->wpos;
|
rstream->uvbuf.len = rbuffer_available(rstream->buffer);
|
||||||
rstream->uvbuf.base = rstream->buffer->data + rstream->buffer->wpos;
|
rstream->uvbuf.base = rbuffer_write_ptr(rstream->buffer);
|
||||||
|
|
||||||
// the offset argument to uv_fs_read is int64_t, could someone really try
|
// the offset argument to uv_fs_read is int64_t, could someone really try
|
||||||
// to read more than 9 quintillion (9e18) bytes?
|
// to read more than 9 quintillion (9e18) bytes?
|
||||||
|
Reference in New Issue
Block a user