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> ¶ms); 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