diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2017-07-11 22:28:08 +0200 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2017-07-11 22:38:20 +0200 |
| commit | 3ca61b3354c02e7f961e3cd6808a94fd9b740586 (patch) | |
| tree | bfe5e89e393c9c1f78ff5549e6c054420888e741 /vis-registers.c | |
| parent | ebee314027fb8ba47052dc016bc44758fa58f5fc (diff) | |
| download | vis-3ca61b3354c02e7f961e3cd6808a94fd9b740586.tar.gz vis-3ca61b3354c02e7f961e3cd6808a94fd9b740586.tar.xz | |
vis: cleanup register related API
Also expose all register slots through the Lua API.
Diffstat (limited to 'vis-registers.c')
| -rw-r--r-- | vis-registers.c | 38 |
1 files changed, 27 insertions, 11 deletions
diff --git a/vis-registers.c b/vis-registers.c index 742194b..503c50b 100644 --- a/vis-registers.c +++ b/vis-registers.c @@ -226,23 +226,39 @@ static Register *register_from(Vis *vis, enum VisRegister id) { return NULL; } -bool vis_register_put(Vis *vis, enum VisRegister id, const char *data, size_t len) { +bool vis_register_set(Vis *vis, enum VisRegister id, Array *data) { Register *reg = register_from(vis, id); if (!reg) return false; - return register_put(vis, reg, data, len); -} - -const char *vis_register_get(Vis *vis, enum VisRegister id, size_t *len) { - return vis_register_slot_get(vis, id, 0, len); + size_t len = array_length(data); + for (size_t i = 0; i < len; i++) { + Buffer *buf = register_buffer(reg, i); + if (!buf) + return false; + TextString *string = array_get(data, i); + if (!buffer_put(buf, string->data, string->len)) + return false; + } + return register_resize(reg, len); } -const char *vis_register_slot_get(Vis *vis, enum VisRegister id, size_t slot, size_t *len) { +Array vis_register_get(Vis *vis, enum VisRegister id) { + Array data; + array_init_sized(&data, sizeof(TextString)); Register *reg = register_from(vis, id); - if (reg) - return register_slot_get(vis, reg, slot, len); - *len = 0; - return NULL; + if (reg) { + size_t len = array_length(®->values); + array_reserve(&data, len); + for (size_t i = 0; i < len; i++) { + Buffer *buf = array_get(®->values, i); + TextString string = { + .data = buffer_content(buf), + .len = buffer_length(buf), + }; + array_add(&data, &string); + } + } + return data; } const RegisterDef vis_registers[] = { |
