[gnome-calculator] Unify constant handling
- From: Robert Roth <robertroth src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-calculator] Unify constant handling
- Date: Thu, 4 Jun 2020 16:13:02 +0000 (UTC)
commit fe52724d23aaf9ae790948217de710c7371b562f
Author: Robert Roth <robert roth off gmail com>
Date: Thu Jun 4 19:12:25 2020 +0300
Unify constant handling
lib/equation.vala | 27 ++++++++++++++++-----------
1 file changed, 16 insertions(+), 11 deletions(-)
---
diff --git a/lib/equation.vala b/lib/equation.vala
index ed416458..98cbd8b8 100644
--- a/lib/equation.vala
+++ b/lib/equation.vala
@@ -157,6 +157,18 @@ private class EquationParser : Parser
{
private Equation equation;
+ private static HashTable<string, Number> CONSTANTS;
+
+ static construct {
+ CONSTANTS = new HashTable<string, Number> (str_hash, str_equal);
+ CONSTANTS.insert ("e", new Number.eulers ());
+ CONSTANTS.insert ("pi", new Number.pi ());
+ CONSTANTS.insert ("tau", new Number.tau ());
+ CONSTANTS.insert ("π", new Number.pi ());
+ CONSTANTS.insert ("τ", new Number.tau ());
+ CONSTANTS.insert ("i", new Number.i ());
+ }
+
public EquationParser (Equation equation, string expression)
{
base (expression, equation.base, equation.wordlen, equation.angle_units);
@@ -165,8 +177,7 @@ private class EquationParser : Parser
protected override bool variable_is_defined (string name)
{
- /* FIXME: Make more generic */
- if (name == "e" || name == "i" || name == "π" || name == "pi" || name == "τ" || name == "tau")
+ if (CONSTANTS.contains (name))
return true;
return equation.variable_is_defined (name);
@@ -174,14 +185,8 @@ private class EquationParser : Parser
protected override Number? get_variable (string name)
{
- if (name == "e")
- return new Number.eulers ();
- else if (name == "i")
- return new Number.i ();
- else if (name == "π" || name == "pi")
- return new Number.pi ();
- else if (name == "τ" || name == "tau")
- return new Number.tau ();
+ if (CONSTANTS.contains (name))
+ return CONSTANTS.@get (name);
else
return equation.get_variable (name);
}
@@ -189,7 +194,7 @@ private class EquationParser : Parser
protected override void set_variable (string name, Number x)
{
// Reserved words, e, π, mod, and, or, xor, not, abs, log, ln, sqrt, int, frac, sin, cos, ...
- if (name == "e" || name == "i" || name == "π")
+ if (CONSTANTS.contains (name))
return; // FALSE
equation.set_variable (name, x);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]