From: Timo Heister Date: Mon, 24 Apr 2017 15:19:46 +0000 (-0400) Subject: hide muparser definition X-Git-Tag: v9.0.0-rc1~1648^2 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7c59dd99def68d79ea265a1b1741cecd6b0b4fe0;p=dealii.git hide muparser definition --- diff --git a/include/deal.II/base/function_parser.h b/include/deal.II/base/function_parser.h index c0d63888ce..0a29c3c7b5 100644 --- a/include/deal.II/base/function_parser.h +++ b/include/deal.II/base/function_parser.h @@ -25,12 +25,12 @@ #include #include #include +#include -#ifdef DEAL_II_WITH_MUPARSER -DEAL_II_DISABLE_EXTRA_DIAGNOSTICS -#include -DEAL_II_ENABLE_EXTRA_DIAGNOSTICS -#endif +namespace mu +{ + class Parser; +} DEAL_II_NAMESPACE_OPEN @@ -313,9 +313,11 @@ private: mutable Threads::ThreadLocalStorage > vars; /** - * The muParser objects for each thread (and one for each component) + * The muParser objects for each thread (and one for each component). We are + * storing unique_ptr so that we don't need to include the definition of + * mu::Parser in this header. */ - mutable Threads::ThreadLocalStorage > fp; + mutable Threads::ThreadLocalStorage > > fp; /** * An array to keep track of all the constants, required to initialize fp in diff --git a/source/base/function_parser.cc b/source/base/function_parser.cc index 6f53c6cc7a..5b951aef00 100644 --- a/source/base/function_parser.cc +++ b/source/base/function_parser.cc @@ -231,34 +231,36 @@ void FunctionParser::init_muparser() const // initialize the objects for the current thread (fp.get() and // vars.get()) - fp.get().resize(this->n_components); + fp.get().reserve(this->n_components); vars.get().resize(var_names.size()); for (unsigned int component=0; componentn_components; ++component) { + fp.get().emplace_back(new mu::Parser()); + for (std::map< std::string, double >::const_iterator constant = constants.begin(); constant != constants.end(); ++constant) { - fp.get()[component].DefineConst(constant->first.c_str(), constant->second); + fp.get()[component]->DefineConst(constant->first.c_str(), constant->second); } for (unsigned int iv=0; ivDefineVar(var_names[iv].c_str(), &vars.get()[iv]); // define some compatibility functions: - fp.get()[component].DefineFun("if",internal::mu_if, true); - fp.get()[component].DefineOprt("|", internal::mu_or, 1); - fp.get()[component].DefineOprt("&", internal::mu_and, 2); - fp.get()[component].DefineFun("int", internal::mu_int, true); - fp.get()[component].DefineFun("ceil", internal::mu_ceil, true); - fp.get()[component].DefineFun("cot", internal::mu_cot, true); - fp.get()[component].DefineFun("csc", internal::mu_csc, true); - fp.get()[component].DefineFun("floor", internal::mu_floor, true); - fp.get()[component].DefineFun("sec", internal::mu_sec, true); - fp.get()[component].DefineFun("log", internal::mu_log, true); - fp.get()[component].DefineFun("pow", internal::mu_pow, true); - fp.get()[component].DefineFun("erfc", internal::mu_erfc, true); - fp.get()[component].DefineFun("rand_seed", internal::mu_rand_seed, true); - fp.get()[component].DefineFun("rand", internal::mu_rand, true); + fp.get()[component]->DefineFun("if",internal::mu_if, true); + fp.get()[component]->DefineOprt("|", internal::mu_or, 1); + fp.get()[component]->DefineOprt("&", internal::mu_and, 2); + fp.get()[component]->DefineFun("int", internal::mu_int, true); + fp.get()[component]->DefineFun("ceil", internal::mu_ceil, true); + fp.get()[component]->DefineFun("cot", internal::mu_cot, true); + fp.get()[component]->DefineFun("csc", internal::mu_csc, true); + fp.get()[component]->DefineFun("floor", internal::mu_floor, true); + fp.get()[component]->DefineFun("sec", internal::mu_sec, true); + fp.get()[component]->DefineFun("log", internal::mu_log, true); + fp.get()[component]->DefineFun("pow", internal::mu_pow, true); + fp.get()[component]->DefineFun("erfc", internal::mu_erfc, true); + fp.get()[component]->DefineFun("rand_seed", internal::mu_rand_seed, true); + fp.get()[component]->DefineFun("rand", internal::mu_rand, true); try { @@ -341,7 +343,7 @@ void FunctionParser::init_muparser() const } // now use the transformed expression - fp.get()[component].SetExpr(transformed_expression); + fp.get()[component]->SetExpr(transformed_expression); } catch (mu::ParserError &e) { @@ -388,7 +390,7 @@ double FunctionParser::value (const Point &p, try { - return fp.get()[component].Eval(); + return fp.get()[component]->Eval(); } catch (mu::ParserError &e) { @@ -424,7 +426,7 @@ void FunctionParser::vector_value (const Point &p, for (unsigned int component = 0; component < this->n_components; ++component) - values(component) = fp.get()[component].Eval(); + values(component) = fp.get()[component]->Eval(); } #else