[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[groff] 12/21: [troff]: Slightly refactor (unsigned r/o regs).
From: |
G. Branden Robinson |
Subject: |
[groff] 12/21: [troff]: Slightly refactor (unsigned r/o regs). |
Date: |
Sat, 2 Mar 2024 01:25:02 -0500 (EST) |
gbranden pushed a commit to branch master
in repository groff.
commit 845e3f34fd01378bf0de60e942e0a061187dcd9d
Author: G. Branden Robinson <g.branden.robinson@gmail.com>
AuthorDate: Fri Mar 1 20:26:38 2024 -0600
[troff]: Slightly refactor (unsigned r/o regs).
* src/roff/troff/env.cpp: Add support for read-only numeric registers
backed by unsigned integer values. Define new type alias
`UNSIGNED_FUNCP`. Define new C++ prepreprocessor macro
`init_unsigned_env_reg`, paralleling `init_int_env_reg`.
(class unsigned_env_reg): Add new class; just like `int_env_reg`
except it's for use with "unsigned int" member variables.
(unsigned_env_reg::unsigned_env_reg)
(unsigned_env_reg::get_value)
(unsigned_env_reg::get_string): Implement.
squash Trivially
---
ChangeLog | 12 ++++++++++++
src/roff/troff/env.cpp | 27 +++++++++++++++++++++++++++
2 files changed, 39 insertions(+)
diff --git a/ChangeLog b/ChangeLog
index d162956c7..09f627dc6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2024-03-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/env.cpp: Add support for read-only numeric
+ registers backed by unsigned integer values. Define new type
+ alias `UNSIGNED_FUNCP`. Define new C++ prepreprocessor macro
+ `init_unsigned_env_reg`, paralleling `init_int_env_reg`.
+ (class unsigned_env_reg): Add new class; just like `int_env_reg`
+ except it's for use with "unsigned int" member variables.
+ (unsigned_env_reg::unsigned_env_reg)
+ (unsigned_env_reg::get_value)
+ (unsigned_env_reg::get_string): Implement.
+
2024-03-01 G. Branden Robinson <g.branden.robinson@gmail.com>
* src/roff/troff/env.cpp (environment::print_env): Report
diff --git a/src/roff/troff/env.cpp b/src/roff/troff/env.cpp
index 5fa218353..f69e0c460 100644
--- a/src/roff/troff/env.cpp
+++ b/src/roff/troff/env.cpp
@@ -3097,6 +3097,7 @@ void environment::add_padding()
}
typedef int (environment::*INT_FUNCP)();
+typedef unsigned (environment::*UNSIGNED_FUNCP)();
typedef vunits (environment::*VUNITS_FUNCP)();
typedef hunits (environment::*HUNITS_FUNCP)();
typedef const char *(environment::*STRING_FUNCP)();
@@ -3109,6 +3110,14 @@ class int_env_reg : public reg {
bool get_value(units *val);
};
+class unsigned_env_reg : public reg {
+ UNSIGNED_FUNCP func;
+ public:
+ unsigned_env_reg(UNSIGNED_FUNCP);
+ const char *get_string();
+ bool get_value(unsigned *val);
+};
+
class vunits_env_reg : public reg {
VUNITS_FUNCP func;
public:
@@ -3148,6 +3157,21 @@ const char *int_env_reg::get_string()
return i_to_a((curenv->*func)());
}
+unsigned_env_reg::unsigned_env_reg(UNSIGNED_FUNCP f) : func(f)
+{
+}
+
+bool unsigned_env_reg::get_value(unsigned *val)
+{
+ *val = (curenv->*func)();
+ return true;
+}
+
+const char *unsigned_env_reg::get_string()
+{
+ return ui_to_a((curenv->*func)());
+}
+
vunits_env_reg::vunits_env_reg(VUNITS_FUNCP f) : func(f)
{
}
@@ -3461,6 +3485,9 @@ void print_env()
#define init_int_env_reg(name, func) \
register_dictionary.define(name, new int_env_reg(&environment::func))
+#define init_unsigned_env_reg(name, func) \
+ register_dictionary.define(name, new unsigned_env_reg(&environment::func))
+
#define init_vunits_env_reg(name, func) \
register_dictionary.define(name, new vunits_env_reg(&environment::func))
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [groff] 12/21: [troff]: Slightly refactor (unsigned r/o regs).,
G. Branden Robinson <=