groff-commit
[Top][All Lists]
Advanced

[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))
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]