From 10cbe7e8d838982c00f66b73d6ea2cd278e83332 Mon Sep 17 00:00:00 2001 From: Giovanni Bussi <giovanni.bussi@gmail.com> Date: Mon, 27 Aug 2018 09:23:05 +0200 Subject: [PATCH] Changed opMap construction opMap is now constructed in a single statement. This avoids problems possibly arising with multiple threads accessing for the first time to this method simultaneously. opMap is then made const for clarity. --- src/lepton/Parser.cpp | 61 +++++++++++++++++++++---------------------- 1 file changed, 30 insertions(+), 31 deletions(-) diff --git a/src/lepton/Parser.cpp b/src/lepton/Parser.cpp index 664e3ceda..3096c361b 100644 --- a/src/lepton/Parser.cpp +++ b/src/lepton/Parser.cpp @@ -336,37 +336,36 @@ Operation* Parser::getOperatorOperation(const std::string& name) { Operation* Parser::getFunctionOperation(const std::string& name, const map<string, CustomFunction*>& customFunctions) { - static map<string, Operation::Id> opMap; - if (opMap.size() == 0) { - opMap["sqrt"] = Operation::SQRT; - opMap["exp"] = Operation::EXP; - opMap["log"] = Operation::LOG; - opMap["sin"] = Operation::SIN; - opMap["cos"] = Operation::COS; - opMap["sec"] = Operation::SEC; - opMap["csc"] = Operation::CSC; - opMap["tan"] = Operation::TAN; - opMap["cot"] = Operation::COT; - opMap["asin"] = Operation::ASIN; - opMap["acos"] = Operation::ACOS; - opMap["atan"] = Operation::ATAN; - opMap["sinh"] = Operation::SINH; - opMap["cosh"] = Operation::COSH; - opMap["tanh"] = Operation::TANH; - opMap["erf"] = Operation::ERF; - opMap["erfc"] = Operation::ERFC; - opMap["step"] = Operation::STEP; - opMap["delta"] = Operation::DELTA; - opMap["square"] = Operation::SQUARE; - opMap["cube"] = Operation::CUBE; - opMap["recip"] = Operation::RECIPROCAL; - opMap["min"] = Operation::MIN; - opMap["max"] = Operation::MAX; - opMap["abs"] = Operation::ABS; - opMap["floor"] = Operation::FLOOR; - opMap["ceil"] = Operation::CEIL; - opMap["select"] = Operation::SELECT; - } + const static map<string, Operation::Id> opMap ={ + { "sqrt" , Operation::SQRT }, + { "exp" , Operation::EXP }, + { "log" , Operation::LOG }, + { "sin" , Operation::SIN }, + { "cos" , Operation::COS }, + { "sec" , Operation::SEC }, + { "csc" , Operation::CSC }, + { "tan" , Operation::TAN }, + { "cot" , Operation::COT }, + { "asin" , Operation::ASIN }, + { "acos" , Operation::ACOS }, + { "atan" , Operation::ATAN }, + { "sinh" , Operation::SINH }, + { "cosh" , Operation::COSH }, + { "tanh" , Operation::TANH }, + { "erf" , Operation::ERF }, + { "erfc" , Operation::ERFC }, + { "step" , Operation::STEP }, + { "delta" , Operation::DELTA }, + { "square" , Operation::SQUARE }, + { "cube", Operation::CUBE }, + { "recip" , Operation::RECIPROCAL }, + { "min" , Operation::MIN }, + { "max" , Operation::MAX }, + { "abs" , Operation::ABS }, + { "floor" , Operation::FLOOR }, + { "ceil" , Operation::CEIL }, + { "select" , Operation::SELECT }, + }; string trimmed = name.substr(0, name.size()-1); // First check custom functions. -- GitLab