From 9ff865e84b71feebd0f35b738c9d376f86ae9702 Mon Sep 17 00:00:00 2001 From: sebastien <sebastien@ac1d8469-bf42-47a9-8791-bf33cf982152> Date: Thu, 23 Nov 2006 19:10:41 +0000 Subject: [PATCH] v4 parser NumericalConstants.{cc,hh}: optimization to avoid multiple IDs for the same constant git-svn-id: https://www.dynare.org/svn/dynare/dynare_v4@1094 ac1d8469-bf42-47a9-8791-bf33cf982152 --- parser.src/NumericalConstants.cc | 20 ++++++++++++-------- parser.src/include/NumericalConstants.hh | 3 +++ 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/parser.src/NumericalConstants.cc b/parser.src/NumericalConstants.cc index 38bc49186d..b964e6eb8e 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 ccba024b0e..7fcb1b3b85 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(); -- GitLab