diff --git a/GeoModelTools/ExpressionEvaluator/ExpressionEvaluator/IEvaluator.h b/GeoModelTools/ExpressionEvaluator/ExpressionEvaluator/IEvaluator.h index 10c1392509fe9b6f3a09d084c8ffb791f89b9d27..898188f566357273eebe3752552b4de7662de0d5 100755 --- a/GeoModelTools/ExpressionEvaluator/ExpressionEvaluator/IEvaluator.h +++ b/GeoModelTools/ExpressionEvaluator/ExpressionEvaluator/IEvaluator.h @@ -21,6 +21,21 @@ class IEvaluator { */ ~IEvaluator() {;} + enum { + OK, /**< Everything OK */ + WARNING_EXISTING_VARIABLE, /**< Redefinition of existing variable */ + WARNING_EXISTING_FUNCTION, /**< Redefinition of existing function */ + WARNING_BLANK_STRING, /**< Empty input string */ + ERROR_NOT_A_NAME, /**< Not allowed sysmbol in the name of variable or function */ + ERROR_SYNTAX_ERROR, /**< Systax error */ + ERROR_UNPAIRED_PARENTHESIS, /**< Unpaired parenthesis */ + ERROR_UNEXPECTED_SYMBOL, /**< Unexpected sysbol */ + ERROR_UNKNOWN_VARIABLE, /**< Non-existing variable */ + ERROR_UNKNOWN_FUNCTION, /**< Non-existing function */ + ERROR_EMPTY_PARAMETER, /**< Function call has empty parameter */ + ERROR_CALCULATION_ERROR /**< Error during calculation */ + }; + virtual double evaluate(const char * expression) = 0; virtual int status() const {return 0;} diff --git a/GeoModelTools/GeoModelXML/GeoModelXml/GeoModelXml/Gmx2Geo.h b/GeoModelTools/GeoModelXML/GeoModelXml/GeoModelXml/Gmx2Geo.h index 5cb7628ecb69c8d1c269574c398fcdab11d48915..088b1e1345a516727062fb942f52a7a7e56cc19e 100644 --- a/GeoModelTools/GeoModelXML/GeoModelXml/GeoModelXml/Gmx2Geo.h +++ b/GeoModelTools/GeoModelXML/GeoModelXml/GeoModelXml/Gmx2Geo.h @@ -51,7 +51,7 @@ XERCES_CPP_NAMESPACE_BEGIN class DOMNode; XERCES_CPP_NAMESPACE_END -class Evaluator; +class IEvaluator; class Gmx2Geo { public: @@ -61,7 +61,7 @@ private: Gmx2Geo(const Gmx2Geo &right); Gmx2Geo & operator=(const Gmx2Geo &right); - int doDefines(xercesc::DOMDocument *doc, Evaluator &eval); + int doDefines(xercesc::DOMDocument *doc, 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 04df4d4545b19887948d38c812e8f2d4ba7ffeb1..6231baad44f9d35c1f1c7e524ce4fe52cb0a48bb 100644 --- a/GeoModelTools/GeoModelXML/GeoModelXml/GeoModelXml/GmxUtil.h +++ b/GeoModelTools/GeoModelXML/GeoModelXml/GeoModelXml/GmxUtil.h @@ -9,11 +9,9 @@ // to element handlers instead of a (changing??) list. // #include <string> -#ifndef STANDALONE_GMX -#include "CLHEP/Evaluator/Evaluator.h" -#else -#include "ExpressionEvaluator/Evaluator.h" -#endif + +#include "ExpressionEvaluator/ExprtkEvaluator.h" + #include "GeoModelXml/MaterialManager.h" #include "GeoModelXml/ProcessorRegistry.h" #include "GeoModelXml/Element2GeoItemRegistry.h" @@ -38,9 +36,7 @@ #include "GeoModelXml/MakeTransformationref.h" #include "GeoModelXml/MakeTranslation.h" #include "GeoModelXml/MakeRotation.h" -#ifndef STANDALONE_GMX -#include "GeoModelXml/MakeScaling.h" -#endif +// #include "GeoModelXml/MakeScaling.h" #include "GeoModelXml/shape/MakeSimplePolygonBrep.h" #include "GeoModelXml/shape/MakeEllipticalTube.h" @@ -73,11 +69,9 @@ public: GmxInterface *gmxInterface(); double evaluate(char const *expression); std::string debracket(std::string expression); -#ifndef STANDALONE_GMX - HepTool::Evaluator eval; -#else - Evaluator eval; -#endif + + ExprtkEvaluator 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 59a730ac5861a86125fa867409459fefc1c05931..bf544162cdfe659a8dee4f8776cc3bf0b1d55e69 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(std::string name); void setFormula(std::string name, std::string formula); - void indices(std::map<std::string, int> &index, Evaluator &eval); + void indices(std::map<std::string, int> &index, IEvaluator &eval); private: int m_level; diff --git a/GeoModelTools/GeoModelXML/GeoModelXml/src/Gmx2Geo.cxx b/GeoModelTools/GeoModelXML/GeoModelXml/src/Gmx2Geo.cxx index a6f28adb549d7080cb6781b942c2f3bedf76f89c..e85cd245d3b92083c54a84097dce80e063073d4b 100644 --- a/GeoModelTools/GeoModelXML/GeoModelXml/src/Gmx2Geo.cxx +++ b/GeoModelTools/GeoModelXML/GeoModelXml/src/Gmx2Geo.cxx @@ -104,7 +104,7 @@ Gmx2Geo::Gmx2Geo(const string xmlFile, GeoPhysVol *addHere, GmxInterface &gmxInt XMLPlatformUtils::Terminate(); } -int Gmx2Geo::doDefines(DOMDocument *doc, Evaluator &eval) { +int Gmx2Geo::doDefines(DOMDocument *doc, IEvaluator &eval) { // // Add all defines to the CLHEP::Evaluator // diff --git a/GeoModelTools/GeoModelXML/GeoModelXml/src/GmxUtil.cxx b/GeoModelTools/GeoModelXML/GeoModelXml/src/GmxUtil.cxx index 599efd360dd43b16dc0499432a2eca9972408f1b..fd4f138164c64a88e349aecc99ac51e47f9cada1 100644 --- a/GeoModelTools/GeoModelXML/GeoModelXml/src/GmxUtil.cxx +++ b/GeoModelTools/GeoModelXML/GeoModelXml/src/GmxUtil.cxx @@ -117,7 +117,7 @@ double GmxUtil::evaluate(char const *expression) { #ifndef STANDALONE_GMX if (eval.status() != HepTool::Evaluator::OK) { #else - if (eval.status() != Evaluator::OK) { + if (eval.status() != IEvaluator::OK) { #endif #ifndef STANDALONE_GMX msglog << MSG::FATAL << "GeoModelXml Error processing Evaluator expression. Error name <" << diff --git a/GeoModelTools/GeoModelXML/GeoModelXml/src/PositionIndex.cxx b/GeoModelTools/GeoModelXML/GeoModelXml/src/PositionIndex.cxx index 7a2b3ad659ec29447be38a2f2fd0b6892f8a1daa..33e1f899b69ab89e358aad61fc4604d7ddd429b8 100644 --- a/GeoModelTools/GeoModelXML/GeoModelXml/src/PositionIndex.cxx +++ b/GeoModelTools/GeoModelXML/GeoModelXml/src/PositionIndex.cxx @@ -68,7 +68,7 @@ void PositionIndex::setFormula(std::string name, std::string formula) { m_formula[name] = formula; } -void PositionIndex::indices(map<string, int> &index, Evaluator &eval) { +void PositionIndex::indices(map<string, int> &index, IEvaluator &eval) { index.clear(); // In case caller uses it many times // // Set Copy Number of each Level (CNL_i) up to current level