diff options
| author | Robin Haberkorn <rhaberkorn@fmsbw.de> | 2026-08-23 00:28:23 +0200 |
|---|---|---|
| committer | Robin Haberkorn <rhaberkorn@fmsbw.de> | 2026-08-23 00:28:23 +0200 |
| commit | 32122651bdb51006edce2be3586dd09179bed52f (patch) | |
| tree | 6fa0bb17ec74693e25eebe8e05a9e04828c3c446 /src/qreg.h | |
| parent | 2e097cec409182c3cb39b74489387480bf8a278f (diff) | |
introduced helper functions teco_qreg_table_get_string() and teco_qreg_table_get_integer()
* Simplifies the common task of querying an integer or string from a Q-Register table.
* Undefined Q-Regs are reported as TECO_ERROR_QREGUNDEF, so you can theoretically
handle this case. In practice however, it requires less boilerplating to
just call teco_qreg_table_find() manually.
* It also doesn't make sense to use these functions when getting and setting
a register at the same time as you will want to avoid repeated lookups.
Diffstat (limited to 'src/qreg.h')
| -rw-r--r-- | src/qreg.h | 33 |
1 files changed, 33 insertions, 0 deletions
@@ -16,6 +16,8 @@ */ #pragma once +#include <string.h> + #include <glib.h> //#include <rb3ptr.h> @@ -24,6 +26,7 @@ #include "view.h" #include "doc.h" #include "undo.h" +#include "error.h" #include "string-utils.h" #include "rb3str.h" @@ -212,6 +215,36 @@ teco_qreg_table_find(teco_qreg_table_t *table, const gchar *name, gsize len) return (teco_qreg_t *)teco_rb3str_find(&table->tree, TRUE, name, len); } +/** @memberof teco_qreg_table_t */ +static inline gboolean +teco_qreg_table_get_string(teco_qreg_table_t *table, const gchar *name, + gchar **str, gsize *len, GError **error) +{ + teco_qreg_t *reg = teco_qreg_table_find(table, name, strlen(name)); + if (!reg) { + g_set_error(error, TECO_ERROR, TECO_ERROR_QREGUNDEF, + "Q-Register \"%s\" is undefined.", name); + return FALSE; + } + + return reg->vtable->get_string(reg, str, len, NULL, error); +} + +/** @memberof teco_qreg_table_t */ +static inline gboolean +teco_qreg_table_get_integer(teco_qreg_table_t *table, const gchar *name, + teco_int_t *ret, GError **error) +{ + teco_qreg_t *reg = teco_qreg_table_find(table, name, strlen(name)); + if (!reg) { + g_set_error(error, TECO_ERROR, TECO_ERROR_QREGUNDEF, + "Q-Register \"%s\" is undefined.", name); + return FALSE; + } + + return reg->vtable->get_integer(reg, ret, error); +} + teco_qreg_t *teco_qreg_table_edit_name(teco_qreg_table_t *table, const gchar *name, gsize len, GError **error); |
