From ad59da70ca893f933364cc8058f149be88ed1df7 Mon Sep 17 00:00:00 2001
From: Andrea Dell'Acqua <dellacqu@mail.cern.ch>
Date: Tue, 7 Dec 2021 17:54:00 +0100
Subject: [PATCH] Adding namespace to all evaluators and adapting clients

---
 .../ExpressionEvaluator/Evaluator.h           | 19 +++----------------
 .../ExpressionEvaluator/ExpressionEvaluator.h |  8 ++++++--
 .../ExpressionEvaluator/ExprtkEvaluator.h     |  6 +++++-
 .../ExpressionEvaluator/IEvaluator.h          |  8 ++++++++
 .../ExpressionEvaluator/src/Evaluator.cxx     |  2 ++
 .../src/ExpressionEvaluator.cxx               |  2 ++
 .../src/ExprtkEvaluator.cxx                   |  2 ++
 .../ExpressionEvaluator/src/setStdMath.cxx    |  2 +-
 .../src/setSystemOfUnits.cxx                  |  2 +-
 .../GDMLtoGM/GDMLInterface/GDMLController.h   |  4 ++--
 GeoModelTools/GDMLtoGM/src/GDMLController.cxx |  4 ++--
 .../GDMLtoGM/src/constantHandler.cxx          |  2 +-
 .../GeoModelXml/GeoModelXml/Gmx2Geo.h         |  4 ++--
 .../GeoModelXml/GeoModelXml/GmxUtil.h         |  2 +-
 .../GeoModelXml/GeoModelXml/PositionIndex.h   |  4 ++--
 .../GeoModelXML/GeoModelXml/src/Gmx2Geo.cxx   |  6 +++---
 .../GeoModelXML/GeoModelXml/src/GmxUtil.cxx   |  2 +-
 .../GeoModelXml/src/PositionIndex.cxx         |  6 +++---
 18 files changed, 47 insertions(+), 38 deletions(-)

diff --git a/GeoModelTools/ExpressionEvaluator/ExpressionEvaluator/Evaluator.h b/GeoModelTools/ExpressionEvaluator/ExpressionEvaluator/Evaluator.h
index 6578a1dbc..a1b75a8f1 100755
--- a/GeoModelTools/ExpressionEvaluator/ExpressionEvaluator/Evaluator.h
+++ b/GeoModelTools/ExpressionEvaluator/ExpressionEvaluator/Evaluator.h
@@ -6,24 +6,11 @@
 #define HEP_EVALUATOR_H
 
 #include <string>
+
 #include "ExpressionEvaluator/IEvaluator.h"
 
-// namespace HepTool {
+namespace GeoModelTools {
 
-/**
- * Evaluator of arithmetic expressions with an extendable dictionary.
- * Example:
- * @code
- *   #include "CLHEP/Evaluator/Evaluator.h"
- *   HepTool::Evaluator eval;
- *   eval.setStdMath();
- *   double res = eval.evaluate("sin(30*degree)");
- *   if (eval.status() != HepTool::Evaluator::OK) eval.print_error();
- * @endcode
- *
- * @author Evgeni Chernyaev <Evgueni.Tcherniaev@cern.ch>
- * @ingroup evaluator
- */
 class Evaluator: public IEvaluator {
  public: 
 
@@ -260,6 +247,6 @@ private:
   // Evaluator & operator=(const Evaluator &); // assignment is not allowed
 };
 
-//  } // namespace HepTool
+}
 
 #endif /* HEP_EVALUATOR_H */
diff --git a/GeoModelTools/ExpressionEvaluator/ExpressionEvaluator/ExpressionEvaluator.h b/GeoModelTools/ExpressionEvaluator/ExpressionEvaluator/ExpressionEvaluator.h
index 00cef79de..f57dea50b 100644
--- a/GeoModelTools/ExpressionEvaluator/ExpressionEvaluator/ExpressionEvaluator.h
+++ b/GeoModelTools/ExpressionEvaluator/ExpressionEvaluator/ExpressionEvaluator.h
@@ -7,12 +7,14 @@
 #ifndef EXPRESSION_EVALUATOR_H
 #define EXPRESSION_EVALUATOR_H 1
 
-#include "ExpressionEvaluator/ExprtkEvaluator.h"
-
 #include <string>
 #include <vector>
 #include <map>
 
+#include "ExpressionEvaluator/ExprtkEvaluator.h"
+
+namespace GeoModelTools {
+
 class ExpressionEvaluator
 {
 public:
@@ -39,4 +41,6 @@ private:
   void replace_substring(std::string& , const std::string , const std::string );
 };
 
+}
+
 #endif // GDML_EXPRESSION_EVALUATOR_H
diff --git a/GeoModelTools/ExpressionEvaluator/ExpressionEvaluator/ExprtkEvaluator.h b/GeoModelTools/ExpressionEvaluator/ExpressionEvaluator/ExprtkEvaluator.h
index cfb598083..709ab972d 100755
--- a/GeoModelTools/ExpressionEvaluator/ExpressionEvaluator/ExprtkEvaluator.h
+++ b/GeoModelTools/ExpressionEvaluator/ExpressionEvaluator/ExprtkEvaluator.h
@@ -21,6 +21,9 @@ typedef exprtk::parser<T>             parser_t;
 typedef std::map<std::string,std::vector<double> > vectorMap;
 typedef std::map<std::string,double> variableMap;
 
+
+namespace GeoModelTools { 
+
 /*
  Evaluator based on exprtk (see https://www.partow.net/programming/exprtk/index.html)
 */
@@ -41,7 +44,7 @@ public:
 
   double evaluate(const char * expression);
 
-  int status() const;
+int status() const;
 
   int error_position() const;
 
@@ -100,5 +103,6 @@ private:
 
 };
 
+}
 
 #endif
diff --git a/GeoModelTools/ExpressionEvaluator/ExpressionEvaluator/IEvaluator.h b/GeoModelTools/ExpressionEvaluator/ExpressionEvaluator/IEvaluator.h
index 82ed3b78a..4c2a86769 100755
--- a/GeoModelTools/ExpressionEvaluator/ExpressionEvaluator/IEvaluator.h
+++ b/GeoModelTools/ExpressionEvaluator/ExpressionEvaluator/IEvaluator.h
@@ -7,6 +7,7 @@
 
 #include <string>
 
+namespace GeoModelTools {
 
 /**
  * IEvaluator: base class for Evaluator
@@ -14,6 +15,11 @@
 class IEvaluator {
  public: 
 
+  enum {
+    OK,                         /**< Everything OK */
+    ERROR
+  };
+
   IEvaluator() {;}
 
   /**
@@ -75,4 +81,6 @@ private:
   // IEvaluator & operator=(const IEvaluator &); // assignment is not allowed
 };
 
+}
+
 #endif /* HEP_EVALUATOR_H */
diff --git a/GeoModelTools/ExpressionEvaluator/src/Evaluator.cxx b/GeoModelTools/ExpressionEvaluator/src/Evaluator.cxx
index 9e3145d16..e27a0418e 100755
--- a/GeoModelTools/ExpressionEvaluator/src/Evaluator.cxx
+++ b/GeoModelTools/ExpressionEvaluator/src/Evaluator.cxx
@@ -16,6 +16,8 @@
 #include <errno.h>
 #include <stdlib.h>	// for strtod()
 
+using namespace GeoModelTools;
+
 //---------------------------------------------------------------------------
 // Fix non ISO C++ compliant cast from pointer to function
 // to void*, which is a pointer to an object
diff --git a/GeoModelTools/ExpressionEvaluator/src/ExpressionEvaluator.cxx b/GeoModelTools/ExpressionEvaluator/src/ExpressionEvaluator.cxx
index 2ad4a6516..63c4489f1 100644
--- a/GeoModelTools/ExpressionEvaluator/src/ExpressionEvaluator.cxx
+++ b/GeoModelTools/ExpressionEvaluator/src/ExpressionEvaluator.cxx
@@ -10,6 +10,8 @@
 #include <vector>
 #include <iostream>
 
+using namespace GeoModelTools;
+
 ExpressionEvaluator::ExpressionEvaluator()
 {
   m_calc.clear();
diff --git a/GeoModelTools/ExpressionEvaluator/src/ExprtkEvaluator.cxx b/GeoModelTools/ExpressionEvaluator/src/ExprtkEvaluator.cxx
index c28044b62..324dd3373 100755
--- a/GeoModelTools/ExpressionEvaluator/src/ExprtkEvaluator.cxx
+++ b/GeoModelTools/ExpressionEvaluator/src/ExprtkEvaluator.cxx
@@ -4,6 +4,8 @@
 
 #include <iostream>
 
+using namespace GeoModelTools;
+
 ExprtkEvaluator::ExprtkEvaluator()
 {
   //  std::cout<<" ########### new ExprtkEvaluator being created "<<std::endl;
diff --git a/GeoModelTools/ExpressionEvaluator/src/setStdMath.cxx b/GeoModelTools/ExpressionEvaluator/src/setStdMath.cxx
index 79d1a6655..7726eb408 100755
--- a/GeoModelTools/ExpressionEvaluator/src/setStdMath.cxx
+++ b/GeoModelTools/ExpressionEvaluator/src/setStdMath.cxx
@@ -28,7 +28,7 @@ static double eval_log10(double a)           { return std::log10(a); }
 
 //namespace HepTool {
 
-void Evaluator::setStdMath() {
+void GeoModelTools::Evaluator::setStdMath() {
 
   //   S E T   S T A N D A R D   C O N S T A N T S
 
diff --git a/GeoModelTools/ExpressionEvaluator/src/setSystemOfUnits.cxx b/GeoModelTools/ExpressionEvaluator/src/setSystemOfUnits.cxx
index adc7e33e4..8b25e8b75 100644
--- a/GeoModelTools/ExpressionEvaluator/src/setSystemOfUnits.cxx
+++ b/GeoModelTools/ExpressionEvaluator/src/setSystemOfUnits.cxx
@@ -7,7 +7,7 @@
 
 //  namespace HepTool {
 
-void IEvaluator::setSystemOfUnits(double meter,
+void GeoModelTools::IEvaluator::setSystemOfUnits(double meter,
 				 double kilogram,
 				 double second,
 				 double ampere,
diff --git a/GeoModelTools/GDMLtoGM/GDMLInterface/GDMLController.h b/GeoModelTools/GDMLtoGM/GDMLInterface/GDMLController.h
index 4d3d26577..e2a707e59 100644
--- a/GeoModelTools/GDMLtoGM/GDMLInterface/GDMLController.h
+++ b/GeoModelTools/GDMLtoGM/GDMLInterface/GDMLController.h
@@ -34,7 +34,7 @@ typedef std::map<std::string, GeoElement*, std::less<std::string> > elementStore
 class GDMLController {
 public:
 	GDMLController(std::string);
-	ExpressionEvaluator* Evaluator();
+	GeoModelTools::ExpressionEvaluator* Evaluator();
 	GeoModelTools::XMLHandlerStore* XMLStore();
 
 	void saveIsotope(std::string, isotope);
@@ -71,7 +71,7 @@ protected:
 	void setConstant(const char*, double);
 
 	std::string controllerName;
-	ExpressionEvaluator* theEvaluator;
+	GeoModelTools::ExpressionEvaluator* theEvaluator;
 	GeoModelTools::XMLHandlerStore* theXMLStore;
 
 	isotopeStore theIsotopes;
diff --git a/GeoModelTools/GDMLtoGM/src/GDMLController.cxx b/GeoModelTools/GDMLtoGM/src/GDMLController.cxx
index 92b9bfe3e..914cb4ab8 100644
--- a/GeoModelTools/GDMLtoGM/src/GDMLController.cxx
+++ b/GeoModelTools/GDMLtoGM/src/GDMLController.cxx
@@ -24,12 +24,12 @@ std::string stripPointer(const std::string str)
 
 GDMLController::GDMLController(std::string name): controllerName(name) {
 	theXMLStore=GeoModelTools::XMLHandlerStore::GetHandlerStore();
-	theEvaluator=ExpressionEvaluator::GetEvaluator();
+	theEvaluator=GeoModelTools::ExpressionEvaluator::GetEvaluator();
 
 	registerHandlers();
 }
 
-ExpressionEvaluator* GDMLController::Evaluator()
+GeoModelTools::ExpressionEvaluator* GDMLController::Evaluator()
 {
 	return theEvaluator;
 }
diff --git a/GeoModelTools/GDMLtoGM/src/constantHandler.cxx b/GeoModelTools/GDMLtoGM/src/constantHandler.cxx
index 24eca0754..1a69afd6b 100644
--- a/GeoModelTools/GDMLtoGM/src/constantHandler.cxx
+++ b/GeoModelTools/GDMLtoGM/src/constantHandler.cxx
@@ -22,5 +22,5 @@ void constantHandler::ElementHandle()
 		std::cout<<" Warning, <quantity /> tag requires an unit attribute to be defined!!!!"<<std::endl;
 	std::string type=getAttributeAsString("type","density");
   }
-  ExpressionEvaluator::GetEvaluator()->RegisterConstant(name,value*lunit);
+  GeoModelTools::ExpressionEvaluator::GetEvaluator()->RegisterConstant(name,value*lunit);
 }
diff --git a/GeoModelTools/GeoModelXML/GeoModelXml/GeoModelXml/Gmx2Geo.h b/GeoModelTools/GeoModelXML/GeoModelXml/GeoModelXml/Gmx2Geo.h
index 2ea56c331..02a66de20 100644
--- a/GeoModelTools/GeoModelXML/GeoModelXml/GeoModelXml/Gmx2Geo.h
+++ b/GeoModelTools/GeoModelXML/GeoModelXml/GeoModelXml/Gmx2Geo.h
@@ -52,7 +52,7 @@ XERCES_CPP_NAMESPACE_BEGIN
 class DOMNode;
 XERCES_CPP_NAMESPACE_END
 
-class Evaluator;
+class IEvaluator;
 
 #define processorList std::map<std::string,ElementProcessor*> 
 
@@ -64,7 +64,7 @@ private:
     Gmx2Geo(const Gmx2Geo &right);
     Gmx2Geo & operator=(const Gmx2Geo &right);
 
-    int doDefines(xercesc::DOMDocument *doc, Evaluator &eval);
+    int doDefines(xercesc::DOMDocument *doc, GeoModelTools::IEvaluator &eval);
     int doPositionIndex(xercesc::DOMDocument *doc, GmxUtil &gmxUtil);
     int doReadoutGeometry(xercesc::DOMDocument *doc, GmxUtil &gmxUtil);
     void addParam(xercesc::DOMNode *node, std::map<std::string, std::string> &params);
diff --git a/GeoModelTools/GeoModelXML/GeoModelXml/GeoModelXml/GmxUtil.h b/GeoModelTools/GeoModelXML/GeoModelXml/GeoModelXml/GmxUtil.h
index a82983d4c..b27cc1619 100644
--- a/GeoModelTools/GeoModelXML/GeoModelXml/GeoModelXml/GmxUtil.h
+++ b/GeoModelTools/GeoModelXML/GeoModelXml/GeoModelXml/GmxUtil.h
@@ -66,7 +66,7 @@ public:
     GmxInterface *gmxInterface();
     double evaluate(char const *expression);
     std::string debracket(std::string expression);
-    Evaluator eval;
+    GeoModelTools::Evaluator eval;
     PositionIndex positionIndex;
     MaterialManager* matManager=0;
     ProcessorRegistry processorRegistry;
diff --git a/GeoModelTools/GeoModelXML/GeoModelXml/GeoModelXml/PositionIndex.h b/GeoModelTools/GeoModelXML/GeoModelXml/GeoModelXml/PositionIndex.h
index 31a722b30..e6fcf4e02 100644
--- a/GeoModelTools/GeoModelXML/GeoModelXml/GeoModelXml/PositionIndex.h
+++ b/GeoModelTools/GeoModelXML/GeoModelXml/GeoModelXml/PositionIndex.h
@@ -20,7 +20,7 @@
 #include <map>
 #include <string>
 
-class Evaluator;
+class IEvaluator;
 
 class PositionIndex {
 public:
@@ -39,7 +39,7 @@ public:
     std::string formula(const std::string& name);
     void setFormula(const std::string& name, const std::string& formula);
 
-    void indices(std::map<std::string, int> &index, Evaluator &eval);
+    void indices(std::map<std::string, int> &index, GeoModelTools::IEvaluator &eval);
 
 private:
     int m_level;
diff --git a/GeoModelTools/GeoModelXML/GeoModelXml/src/Gmx2Geo.cxx b/GeoModelTools/GeoModelXML/GeoModelXml/src/Gmx2Geo.cxx
index b7e5c7fcb..a674ffc52 100644
--- a/GeoModelTools/GeoModelXML/GeoModelXml/src/Gmx2Geo.cxx
+++ b/GeoModelTools/GeoModelXML/GeoModelXml/src/Gmx2Geo.cxx
@@ -17,7 +17,7 @@
 
 #include "GeoModelKernel/GeoPhysVol.h"
 
-#include "ExpressionEvaluator/Evaluator.h"
+#include "ExpressionEvaluator/IEvaluator.h"
 
 #include "xercesc/util/XMLString.hpp"
 #include "GeoModelXml/GeoNodeList.h"
@@ -111,7 +111,7 @@ Gmx2Geo::Gmx2Geo(const string& xmlFile, GeoPhysVol *addHere, GmxInterface &gmxIn
     XMLPlatformUtils::Terminate();
 }
 
-int Gmx2Geo::doDefines(DOMDocument *doc, Evaluator &eval) {
+int Gmx2Geo::doDefines(DOMDocument *doc, GeoModelTools::IEvaluator &eval) {
 //
 //    Add all defines to the CLHEP::Evaluator
 //
@@ -214,7 +214,7 @@ const DOMElement *element;
             char *name = XMLString::transcode(var->getAttribute(name_tmp));
             char *val = XMLString::transcode(var->getAttribute(value_tmp));
             double evaluated = eval.evaluate(val);
-            if (eval.status() != Evaluator::OK) {
+            if (eval.status() != GeoModelTools::IEvaluator::OK) {
                 msglog << MSG::FATAL << "GeoModelXml Error processing CLHEP Evaluator expression. Error name " <<
                 eval.error_name() << endl << "Message: ";
                 eval.print_error();
diff --git a/GeoModelTools/GeoModelXML/GeoModelXml/src/GmxUtil.cxx b/GeoModelTools/GeoModelXML/GeoModelXml/src/GmxUtil.cxx
index 6b9b86a75..6ca7f8a6b 100644
--- a/GeoModelTools/GeoModelXML/GeoModelXml/src/GmxUtil.cxx
+++ b/GeoModelTools/GeoModelXML/GeoModelXml/src/GmxUtil.cxx
@@ -105,7 +105,7 @@ double GmxUtil::evaluate(char const *expression) {
 //   And evaluate the result
 //
     double result = eval.evaluate(noBrackets.c_str());
-    if (eval.status() != Evaluator::OK) {
+    if (eval.status() != GeoModelTools::Evaluator::OK) {
         throw runtime_error(string("evaluate: invalid expression. Last good expression was <" + lastGoodExpression + ">"));
     }
     lastGoodExpression = strExpression;
diff --git a/GeoModelTools/GeoModelXML/GeoModelXml/src/PositionIndex.cxx b/GeoModelTools/GeoModelXML/GeoModelXml/src/PositionIndex.cxx
index c1833bb35..486a8322d 100644
--- a/GeoModelTools/GeoModelXML/GeoModelXml/src/PositionIndex.cxx
+++ b/GeoModelTools/GeoModelXML/GeoModelXml/src/PositionIndex.cxx
@@ -6,7 +6,7 @@
 #include "OutputDirector.h"
 #include <vector>
 #include <string>
-#include "ExpressionEvaluator/Evaluator.h"
+#include "ExpressionEvaluator/IEvaluator.h"
 #include "GeoModelXml/PositionIndex.h"
 
 using namespace std;
@@ -68,7 +68,7 @@ void PositionIndex::setFormula(const std::string& name, const std::string& formu
     m_formula[name] = formula;
 }
 
-void PositionIndex::indices(map<string, int> &index, Evaluator &eval) {
+void PositionIndex::indices(map<string, int> &index, GeoModelTools::IEvaluator &eval) {
     index.clear(); // In case caller uses it many times
 //
 //    Set Copy Number of each Level (CNL_i) up to current level
@@ -97,7 +97,7 @@ void PositionIndex::indices(map<string, int> &index, Evaluator &eval) {
     for (vector <string>::iterator n = m_name.begin(); n < m_name.end(); ++n) {
         string name = *n;
         index[name] = (int) eval.evaluate(m_formula[name].c_str());
-        if (eval.status() != Evaluator::OK) {
+        if (eval.status() != GeoModelTools::IEvaluator::OK) {
             msglog << MSG::FATAL <<
                    "GeoModelXml Error processing Evaluator expression for PositionIndex. Error name " <<
                     eval.error_name() << endl << "Message: ";
-- 
GitLab