]> www.ginac.de Git - ginac.git/blobdiff - ginac/mul.cpp
Remove 'level' argument of evalf().
[ginac.git] / ginac / mul.cpp
index 36960c0a8b63d5300f61ee842e5dd1280605d2d6..15dee661c735f831789bb5e1df634621634f009c 100644 (file)
@@ -3,7 +3,7 @@
  *  Implementation of GiNaC's products of expressions. */
 
 /*
- *  GiNaC Copyright (C) 1999-2015 Johannes Gutenberg University Mainz, Germany
+ *  GiNaC Copyright (C) 1999-2016 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
@@ -89,6 +89,13 @@ mul::mul(const epvector & v, const ex & oc, bool do_index_renaming)
        GINAC_ASSERT(is_canonical());
 }
 
+mul::mul(epvector && vp)
+{
+       overall_coeff = _ex1;
+       construct_from_epvector(std::move(vp));
+       GINAC_ASSERT(is_canonical());
+}
+
 mul::mul(epvector && vp, const ex & oc, bool do_index_renaming)
 {
        overall_coeff = oc;
@@ -285,13 +292,6 @@ bool mul::info(unsigned inf) const
                                return true;
                        return overall_coeff.info(inf);
                }
-               case info_flags::algebraic: {
-                       for (auto & it : seq) {
-                               if (recombine_pair_to_ex(it).info(inf))
-                                       return true;
-                       }
-                       return false;
-               }
                case info_flags::positive:
                case info_flags::negative: {
                        if ((inf==info_flags::positive) && (flags & status_flags::is_positive))
@@ -574,22 +574,14 @@ ex mul::eval() const
        return this->hold();
 }
 
-ex mul::evalf(int level) const
+ex mul::evalf() const
 {
-       if (level==1)
-               return mul(seq, overall_coeff);
-       
-       if (level==-max_recursion_level)
-               throw(std::runtime_error("max recursion level reached"));
-       
        epvector s;
        s.reserve(seq.size());
 
-       --level;
-       for (auto & it : seq) {
-               s.push_back(expair(it.rest.evalf(level), it.coeff));
-       }
-       return dynallocate<mul>(std::move(s), overall_coeff.evalf(level));
+       for (auto & it : seq)
+               s.push_back(expair(it.rest.evalf(), it.coeff));
+       return dynallocate<mul>(std::move(s), overall_coeff.evalf());
 }
 
 void mul::find_real_imag(ex & rp, ex & ip) const