aboutsummaryrefslogtreecommitdiff
path: root/register.c
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2016-01-30 19:46:18 +0100
committerMarc André Tanner <mat@brain-dump.org>2016-01-30 19:59:48 +0100
commitf0e0c0991c5a3d50582678e1b05d83d375057709 (patch)
treebf0f29bbdbe8f495b4d95eb0fe533915fcccacef /register.c
parent979ab795bc9d19524be524c79265c6b952199a22 (diff)
downloadvis-f0e0c0991c5a3d50582678e1b05d83d375057709.tar.gz
vis-f0e0c0991c5a3d50582678e1b05d83d375057709.tar.xz
Cleanup register implementation
Diffstat (limited to 'register.c')
-rw-r--r--register.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/register.c b/register.c
index b1a4453..30ad19c 100644
--- a/register.c
+++ b/register.c
@@ -7,22 +7,26 @@
#include "util.h"
void register_release(Register *reg) {
- buffer_release((Buffer*)reg);
+ buffer_release(&reg->buf);
+}
+
+const char *register_get(Register *reg, size_t *len) {
+ *len = reg->buf.len;
+ return reg->buf.data;
}
bool register_put(Register *reg, Text *txt, Filerange *range) {
- size_t len = range->end - range->start;
- if (!buffer_grow((Buffer*)reg, len))
+ size_t len = text_range_size(range);
+ if (!buffer_grow(&reg->buf, len))
return false;
- reg->len = text_bytes_get(txt, range->start, len, reg->data);
+ reg->buf.len = text_bytes_get(txt, range->start, len, reg->buf.data);
return true;
}
bool register_append(Register *reg, Text *txt, Filerange *range) {
- size_t rem = reg->size - reg->len;
- size_t len = range->end - range->start;
- if (len > rem && !buffer_grow((Buffer*)reg, reg->size + len - rem))
+ size_t len = text_range_size(range);
+ if (!buffer_grow(&reg->buf, reg->buf.len + len))
return false;
- reg->len += text_bytes_get(txt, range->start, len, reg->data + reg->len);
+ reg->buf.len += text_bytes_get(txt, range->start, len, reg->buf.data + reg->buf.len);
return true;
}