X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=ginac%2Fbasic.cpp;h=99c797d542b13556118fdd131e0138c1d7c7103f;hp=96cfd14c46fcd7458aff878993b7496f196950c3;hb=71fdb941e62f5e4bf131bc40468cfa7a4a5c986a;hpb=65f2693a0948d1db0bc68d7656c64e1fed91c158 diff --git a/ginac/basic.cpp b/ginac/basic.cpp index 96cfd14c..99c797d5 100644 --- a/ginac/basic.cpp +++ b/ginac/basic.cpp @@ -3,7 +3,7 @@ * Implementation of GiNaC's ABC. */ /* - * GiNaC Copyright (C) 1999-2015 Johannes Gutenberg University Mainz, Germany + * GiNaC Copyright (C) 1999-2020 Johannes Gutenberg University Mainz, Germany * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -373,7 +373,7 @@ ex basic::collect(const ex & s, bool distributed) const pre_coeff = pre_coeff.coeff(li, cexp); key *= pow(li, cexp); } - exmap::iterator ci = cmap.find(key); + auto ci = cmap.find(key); if (ci != cmap.end()) ci->second += pre_coeff; else @@ -410,7 +410,7 @@ ex basic::collect(const ex & s, bool distributed) const } /** Perform automatic non-interruptive term rewriting rules. */ -ex basic::eval(int level) const +ex basic::eval() const { // There is nothing to do for basic objects: return hold(); @@ -418,25 +418,17 @@ ex basic::eval(int level) const /** Function object to be applied by basic::evalf(). */ struct evalf_map_function : public map_function { - int level; - evalf_map_function(int l) : level(l) {} - ex operator()(const ex & e) override { return evalf(e, level); } + ex operator()(const ex & e) override { return evalf(e); } }; /** Evaluate object numerically. */ -ex basic::evalf(int level) const +ex basic::evalf() const { if (nops() == 0) return *this; else { - if (level == 1) - return *this; - else if (level == -max_recursion_level) - throw(std::runtime_error("max recursion level reached")); - else { - evalf_map_function map_evalf(level - 1); - return map(map_evalf); - } + evalf_map_function map_evalf; + return map(map_evalf); } } @@ -593,10 +585,11 @@ bool basic::match(const ex & pattern, exmap& repl_lst) const ex basic::subs_one_level(const exmap & m, unsigned options) const { if (options & subs_options::no_pattern) { - auto it = m.find(*this); + ex thisex = *this; // NB: *this may be deleted here. + auto it = m.find(thisex); if (it != m.end()) return it->second; - return *this; + return thisex; } else { for (auto & it : m) { exmap repl_lst; @@ -909,9 +902,6 @@ void basic::ensure_if_modifiable() const // global variables ////////// -int max_recursion_level = 1024; - - #ifdef GINAC_COMPARE_STATISTICS compare_statistics_t::~compare_statistics_t() {