aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/qreg.h
diff options
context:
space:
mode:
authorRobin Haberkorn <rhaberkorn@fmsbw.de>2026-08-23 00:28:23 +0200
committerRobin Haberkorn <rhaberkorn@fmsbw.de>2026-08-23 00:28:23 +0200
commit32122651bdb51006edce2be3586dd09179bed52f (patch)
tree6fa0bb17ec74693e25eebe8e05a9e04828c3c446 /src/qreg.h
parent2e097cec409182c3cb39b74489387480bf8a278f (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.h33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/qreg.h b/src/qreg.h
index ca35e78..1eb2cf8 100644
--- a/src/qreg.h
+++ b/src/qreg.h
@@ -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);