From 2fc3552dcd56d4cd6f36fac8f31ab41cf2000105 Mon Sep 17 00:00:00 2001 From: Markus Frank <Markus.Frank@cern.ch> Date: Wed, 13 Oct 2021 13:46:35 +0200 Subject: [PATCH] Remove internal classes from evaluator. Use STL provided classes --- DDParsers/src/Evaluator/Evaluator.cpp | 114 +++++++++++++------------- 1 file changed, 56 insertions(+), 58 deletions(-) diff --git a/DDParsers/src/Evaluator/Evaluator.cpp b/DDParsers/src/Evaluator/Evaluator.cpp index eb2619f83..419f5e98a 100644 --- a/DDParsers/src/Evaluator/Evaluator.cpp +++ b/DDParsers/src/Evaluator/Evaluator.cpp @@ -18,8 +18,6 @@ #include <string> #include <unordered_map> -using namespace std; - // Disable some diagnostics, which we know, but need to ignore #if defined(__GNUC__) && !defined(__APPLE__) && !defined(__llvm__) /* This is OK: @@ -49,17 +47,17 @@ using namespace std; struct Item { enum { UNKNOWN, VARIABLE, EXPRESSION, FUNCTION, STRING } what; double variable; - string expression; + std::string expression; void *function; explicit Item() : what(UNKNOWN), variable(0),expression(), function(0) {} explicit Item(double x) : what(VARIABLE), variable(x),expression(), function(0) {} - explicit Item(string x) : what(EXPRESSION),variable(0),expression(x),function(0) {} + explicit Item(std::string x) : what(EXPRESSION),variable(0),expression(x),function(0) {} explicit Item(void *x) : what(FUNCTION), variable(0),expression(), function(x) {} }; //typedef char * pchar; -typedef unordered_map<string,Item> dic_type; +typedef std::unordered_map<std::string,Item> dic_type; /// Internal expression evaluator helper class struct EVAL::Object::Struct { @@ -79,7 +77,7 @@ struct EVAL::Object::Struct { theStruct->theCond.notify_one(); } Struct* theStruct; - unique_lock<mutex> theLg; + std::unique_lock<std::mutex> theLg; }; struct WriteLock { @@ -96,14 +94,14 @@ struct EVAL::Object::Struct { theStruct->theCond.notify_all(); } Struct* theStruct; - unique_lock<mutex> theLg; + std::unique_lock<std::mutex> theLg; }; dic_type theDictionary; int theReadersWaiting = 0; bool theWriterWaiting = false; - condition_variable theCond; - mutex theLock; + std::condition_variable theCond; + std::mutex theLock; }; namespace { @@ -148,7 +146,7 @@ enum { ENDL, LBRA, OR, AND, EQ, NE, GE, GT, LE, LT, static int engine(char const*, char const*, double &, char const* &, const dic_type &); -static int variable(const string & name, double & result, +static int variable(const std::string & name, double & result, const dic_type & dictionary) /*********************************************************************** * * @@ -186,7 +184,7 @@ static int variable(const string & name, double & result, } } -static int execute_function(const string & name, stack<double> & par, +static int execute_function(const std::string & name, std::stack<double> & par, double & result, const dic_type & dictionary) /*********************************************************************** * * @@ -288,7 +286,7 @@ static int operand(char const* begin, char const* end, double & result, if ( !(c == '_' || c == ':') && !isalnum(c)) break; pointer++; } - string name(begin, pointer-begin); + std::string name(begin, pointer-begin); // G E T V A R I A B L E @@ -301,8 +299,8 @@ static int operand(char const* begin, char const* end, double & result, // G E T F U N C T I O N - stack<char const*> pos; // position stack - stack<double> par; // parameter stack + std::stack<char const*> pos; // position stack + std::stack<double> par; // parameter stack double value; char const* par_begin = pointer+1; char const* par_end; @@ -365,7 +363,7 @@ static int operand(char const* begin, char const* end, double & result, * val - stack of values. * * * ***********************************************************************/ -static int maker(int op, stack<double> & val) +static int maker(int op, std::stack<double> & val) { if (val.size() < 2) return EVAL::ERROR_SYNTAX_ERROR; double val2 = val.top(); val.pop(); @@ -476,9 +474,9 @@ static int engine(char const* begin, char const* end, double & result, { 4, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 } // ^ }; - stack<int> op; // operator stack - stack<char const*> pos; // position stack - stack<double> val; // value stack + std::stack<int> op; // operator stack + std::stack<char const*> pos; // position stack + std::stack<double> val; // value stack double value; char const* pointer = begin; int iWhat, iCur, iPrev = 0, iTop, EVAL_STATUS; @@ -628,7 +626,7 @@ static int setItem(const char * prefix, const char * name, // A D D I T E M T O T H E D I C T I O N A R Y - string item_name = prefix + string(pointer,n); + std::string item_name = prefix + std::string(pointer,n); EVAL::Object::Struct::WriteLock guard(imp); dic_type::iterator iter = imp->theDictionary.find(item_name); if (iter != imp->theDictionary.end()) { @@ -644,7 +642,7 @@ static int setItem(const char * prefix, const char * name, } //--------------------------------------------------------------------------- - static void print_error_status(ostream& os, int status, char const* extra) { + static void print_error_status(std::ostream& os, int status, char const* extra) { static char prefix[] = "Evaluator::Object : "; const char* opt = (extra ? extra : ""); switch (status) { @@ -733,21 +731,21 @@ int Evaluator::Object::EvalStatus::error_position(const char* expression) const //--------------------------------------------------------------------------- void Evaluator::Object::EvalStatus::print_error() const { - stringstream str; + std::stringstream str; print_error(str); if ( str.str().empty() ) return; - cerr << str.str() << endl; + std::cerr << str.str() << std::endl; } //--------------------------------------------------------------------------- -void Evaluator::Object::EvalStatus::print_error(ostream& os) const { +void Evaluator::Object::EvalStatus::print_error(std::ostream& os) const { print_error_status(os, theStatus, thePosition); } //--------------------------------------------------------------------------- int Evaluator::Object::setEnviron(const char* name, const char* value) { - string prefix = "${"; - string item_name = prefix + string(name) + string("}"); + std::string prefix = "${"; + std::string item_name = prefix + std::string(name) + std::string("}"); //Need to take lock before creating Item since since Item to be destroyed // before the lock in order avoid ::string ref count thread problem @@ -772,22 +770,22 @@ int Evaluator::Object::setEnviron(const char* name, const char* value) { } //--------------------------------------------------------------------------- -pair<const char*,int> Evaluator::Object::getEnviron(const char* name) const { +std::pair<const char*,int> Evaluator::Object::getEnviron(const char* name) const { Struct::ReadLock guard(imp); Struct const* cImp = imp; dic_type::const_iterator iter = cImp->theDictionary.find(name); if (iter != cImp->theDictionary.end()) { - return make_pair(iter->second.expression.c_str(), EVAL::OK); + return std::make_pair(iter->second.expression.c_str(), EVAL::OK); } if ( ::strlen(name) > 3 ) { // Need to remove braces from ${xxxx} for call to getenv() - string env_name(name+2,::strlen(name)-3); + std::string env_name(name+2,::strlen(name)-3); const char* env_str = ::getenv(env_name.c_str()); if ( 0 != env_str ) { - return make_pair(env_str, EVAL::OK); + return std::make_pair(env_str, EVAL::OK); } } - return make_pair(nullptr,EVAL::ERROR_UNKNOWN_VARIABLE); + return std::make_pair(nullptr,EVAL::ERROR_UNKNOWN_VARIABLE); } //--------------------------------------------------------------------------- @@ -808,7 +806,7 @@ int Evaluator::Object::setVariable(const char * name, const char * expression) } void Evaluator::Object::setVariableNoLock(const char * name, double value) { - string item_name = name; + std::string item_name = name; Item item(value); imp->theDictionary[item_name] = item; } @@ -838,13 +836,13 @@ int Evaluator::Object::setFunction(const char * name, double (*fun)(double,doubl } void Evaluator::Object::setFunctionNoLock(const char * name,double (*fun)(double)) { - string item_name = "1"+string(name); + std::string item_name = "1"+std::string(name); Item item(FCN(fun).ptr); imp->theDictionary[item_name] = item; } void Evaluator::Object::setFunctionNoLock(const char * name, double (*fun)(double,double)) { - string item_name = "2"+string(name); + std::string item_name = "2"+std::string(name); Item item(FCN(fun).ptr); imp->theDictionary[item_name] = item; } @@ -857,7 +855,7 @@ bool Evaluator::Object::findVariable(const char * name) const { if (n == 0) return false; Struct::ReadLock guard(imp); return - (imp->theDictionary.find(string(pointer,n)) == imp->theDictionary.end()) ? + (imp->theDictionary.find(std::string(pointer,n)) == imp->theDictionary.end()) ? false : true; } @@ -868,7 +866,7 @@ bool Evaluator::Object::findFunction(const char * name, int npar) const { const char * pointer; int n; REMOVE_BLANKS; if (n == 0) return false; Struct::ReadLock guard(imp); - return (imp->theDictionary.find(sss[npar]+string(pointer,n)) == + return (imp->theDictionary.find(sss[npar]+std::string(pointer,n)) == imp->theDictionary.end()) ? false : true; } @@ -878,7 +876,7 @@ void Evaluator::Object::removeVariable(const char * name) { const char * pointer; int n; REMOVE_BLANKS; if (n == 0) return; Struct::WriteLock guard(imp); - imp->theDictionary.erase(string(pointer,n)); + imp->theDictionary.erase(std::string(pointer,n)); } //--------------------------------------------------------------------------- @@ -888,7 +886,7 @@ void Evaluator::Object::removeFunction(const char * name, int npar) { const char * pointer; int n; REMOVE_BLANKS; if (n == 0) return; Struct::WriteLock guard(imp); - imp->theDictionary.erase(sss[npar]+string(pointer,n)); + imp->theDictionary.erase(sss[npar]+std::string(pointer,n)); } //--------------------------------------------------------------------------- @@ -908,30 +906,30 @@ Evaluator::~Evaluator() { } //--------------------------------------------------------------------------- -pair<int,double> Evaluator::evaluate(const string& expression) const { +std::pair<int,double> Evaluator::evaluate(const std::string& expression) const { auto result = object->evaluate(expression.c_str()); - return make_pair(result.status(),result.result()); + return std::make_pair(result.status(),result.result()); } //--------------------------------------------------------------------------- -pair<int,double> Evaluator::evaluate(const string& expression, ostream& os) const { +std::pair<int,double> Evaluator::evaluate(const std::string& expression, std::ostream& os) const { auto result = object->evaluate(expression.c_str()); int status = result.status(); if ( status != OK ) { result.print_error(os); } - return make_pair(result.status(),result.result()); + return std::make_pair(result.status(),result.result()); } //--------------------------------------------------------------------------- -int Evaluator::setEnviron(const string& name, const string& value) const { +int Evaluator::setEnviron(const std::string& name, const std::string& value) const { int result = object->setEnviron(name.c_str(), value.c_str()); return result; } //--------------------------------------------------------------------------- -pair<int,string> Evaluator::getEnviron(const string& name) const { - pair<int,string> result; +std::pair<int,std::string> Evaluator::getEnviron(const std::string& name) const { + std::pair<int,std::string> result; auto env_status = object->getEnviron(name.c_str()); result.first = env_status.second; if( env_status.first ) result.second = env_status.first; @@ -939,8 +937,8 @@ pair<int,string> Evaluator::getEnviron(const string& name) const { } //--------------------------------------------------------------------------- -pair<int,string> Evaluator::getEnviron(const string& name, ostream& os) const { - pair<int,string> result; +std::pair<int,std::string> Evaluator::getEnviron(const std::string& name, std::ostream& os) const { + std::pair<int,std::string> result; auto env_status = object->getEnviron(name.c_str()); result.first = env_status.second; if ( env_status.first ) { @@ -953,13 +951,13 @@ pair<int,string> Evaluator::getEnviron(const string& name, ostream& os) const } //--------------------------------------------------------------------------- -int Evaluator::setVariable(const string& name, double value) const { +int Evaluator::setVariable(const std::string& name, double value) const { int result = object->setVariable(name.c_str(), value); return result; } //--------------------------------------------------------------------------- -int Evaluator::setVariable(const string& name, double value, ostream& os) const { +int Evaluator::setVariable(const std::string& name, double value, std::ostream& os) const { int result = object->setVariable(name.c_str(), value); if ( result != OK ) { print_error_status(os, result, name.c_str()); @@ -968,13 +966,13 @@ int Evaluator::setVariable(const string& name, double value, ostream& os) const } //--------------------------------------------------------------------------- -int Evaluator::setVariable(const string& name, const string& value) const { +int Evaluator::setVariable(const std::string& name, const std::string& value) const { int result = object->setVariable(name.c_str(), value.c_str()); return result; } //--------------------------------------------------------------------------- -int Evaluator::setVariable(const string& name, const string& value, ostream& os) const { +int Evaluator::setVariable(const std::string& name, const std::string& value, std::ostream& os) const { int result = object->setVariable(name.c_str(), value.c_str()); if ( result != OK ) { print_error_status(os, result, name.c_str()); @@ -983,50 +981,50 @@ int Evaluator::setVariable(const string& name, const string& value, ostream& os) } //--------------------------------------------------------------------------- -bool Evaluator::findVariable(const string& name) const { +bool Evaluator::findVariable(const std::string& name) const { bool ret; ret = object->findVariable(name.c_str()); return ret; } //--------------------------------------------------------------------------- -int Evaluator::setFunction(const string& name, double (*fun)()) const { +int Evaluator::setFunction(const std::string& name, double (*fun)()) const { int result = object->setFunction(name.c_str(), fun); return result; } //--------------------------------------------------------------------------- -int Evaluator::setFunction(const string& name, double (*fun)(double)) const { +int Evaluator::setFunction(const std::string& name, double (*fun)(double)) const { int result = object->setFunction(name.c_str(), fun); return result; } //--------------------------------------------------------------------------- -int Evaluator::setFunction(const string& name, double (*fun)(double, double)) const { +int Evaluator::setFunction(const std::string& name, double (*fun)(double, double)) const { int result = object->setFunction(name.c_str(), fun); return result; } //--------------------------------------------------------------------------- -int Evaluator::setFunction(const string& name, double (*fun)(double, double, double)) const { +int Evaluator::setFunction(const std::string& name, double (*fun)(double, double, double)) const { int result = object->setFunction(name.c_str(), fun); return result; } //--------------------------------------------------------------------------- -int Evaluator::setFunction(const string& name, double (*fun)(double, double, double, double)) const { +int Evaluator::setFunction(const std::string& name, double (*fun)(double, double, double, double)) const { int result = object->setFunction(name.c_str(), fun); return result; } //--------------------------------------------------------------------------- -int Evaluator::setFunction(const string& name, double (*fun)(double, double, double, double, double)) const { +int Evaluator::setFunction(const std::string& name, double (*fun)(double, double, double, double, double)) const { int result =object->setFunction(name.c_str(), fun); return result; } //--------------------------------------------------------------------------- -bool Evaluator::findFunction(const string& name, int npar) const { +bool Evaluator::findFunction(const std::string& name, int npar) const { bool ret; ret = object->findFunction(name.c_str(), npar); return ret; -- GitLab