00001 #include "funcao.H"
00002
00003 #include "formula.H"
00004 #include "erros.H"
00005
00006 #include <Extra/string.H>
00007
00008 using namespace std;
00009
00010 double Calculo::Funcao::operator()(MapaDeConstantes const& constantes,
00011 MapaDeFuncoes const& funcoes,
00012 vector<double> const& argumentos) const
00013 {
00014 if(argumentos.size() != parametros.size())
00015 throw ErroDeCalculo(string("número inválido de argumentos (é ") +
00016 argumentos.size() + " e devia ser " +
00017 parametros.size() + ')');
00018
00019 map<string, double> constantes_com_locais = constantes;
00020 for(vector<string>::size_type i = 0; i != parametros.size(); ++i)
00021 constantes_com_locais[parametros[i]] = argumentos[i];
00022
00023 return formula.valor(constantes_com_locais, funcoes);
00024 }