diff --git a/parser.src/NumericalConstants.cc b/parser.src/NumericalConstants.cc index 38bc49186d9e9bf0fe4b89b02580da11371a7495..b964e6eb8efe083fa37cb93ce992dcb3299b4917 100644 --- a/parser.src/NumericalConstants.cc +++ b/parser.src/NumericalConstants.cc @@ -10,12 +10,13 @@ using namespace std; #include "NumericalConstants.hh" //------------------------------------------------------------------------------ vector<string> NumericalConstants::mNumericalConstants; +map<string, int, less<string> > NumericalConstants::numConstantsIndex; + //------------------------------------------------------------------------------ NumericalConstants::NumericalConstants() { - mNumericalConstants.push_back("0.0"); - mNumericalConstants.push_back("1.0"); - + AddConstant("0.0"); + AddConstant("1.0"); } //------------------------------------------------------------------------------ @@ -27,12 +28,15 @@ NumericalConstants::~NumericalConstants() //------------------------------------------------------------------------------ int NumericalConstants::AddConstant(string iConst) { - if (iConst == "0.0") - return 0; - else if (iConst == "1.0") - return 1; + map<string, int, less<string> >::iterator iter = numConstantsIndex.find(iConst); + + if (iter != numConstantsIndex.end()) + return iter->second; + + int id = (int) mNumericalConstants.size(); mNumericalConstants.push_back(iConst); - return (int) mNumericalConstants.size()-1; + numConstantsIndex[iConst] = id; + return id; } //------------------------------------------------------------------------------ diff --git a/parser.src/include/NumericalConstants.hh b/parser.src/include/NumericalConstants.hh index ccba024b0e6075b90da3c4eb9a62a5cee56c5e67..7fcb1b3b851723ca1757125afa1e8989910aeb17 100644 --- a/parser.src/include/NumericalConstants.hh +++ b/parser.src/include/NumericalConstants.hh @@ -9,6 +9,7 @@ //------------------------------------------------------------------------------ #include <string> #include <vector> +#include <map> //------------------------------------------------------------------------------ /*! \class NumericalConstants @@ -19,6 +20,8 @@ class NumericalConstants private : /*! Vector of numerical constants */ static std::vector<std::string> mNumericalConstants; + //! Map matching constants to their id + static std::map<std::string, int, std::less<std::string> > numConstantsIndex; public : /*! Construcor */ NumericalConstants();