X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=ginac%2Fadd.cpp;h=511f3b3d23da1cb12ced5edc485b17175e660ee6;hp=9edbf13947304b8f26756e06f3119522ccd926c1;hb=ef66dd715490d714cbc32f3ba74bd7386835cb4e;hpb=0c718e0dda0d2de1224f39ec5e3c39720e0abfc2 diff --git a/ginac/add.cpp b/ginac/add.cpp index 9edbf139..511f3b3d 100644 --- a/ginac/add.cpp +++ b/ginac/add.cpp @@ -25,8 +25,9 @@ #include "add.h" #include "mul.h" -#include "matrix.h" #include "archive.h" +#include "operators.h" +#include "matrix.h" #include "utils.h" namespace GiNaC { @@ -34,7 +35,7 @@ namespace GiNaC { GINAC_IMPLEMENT_REGISTERED_CLASS(add, expairseq) ////////// -// default ctor, dtor, copy ctor, assignment operator and helpers +// default constructor ////////// add::add() @@ -42,9 +43,6 @@ add::add() tinfo_key = TINFO_add; } -DEFAULT_COPY(add) -DEFAULT_DESTROY(add) - ////////// // other constructors ////////// @@ -163,7 +161,7 @@ void add::print(const print_context & c, unsigned level) const c.s << class_name() << '('; op(0).print(c); - for (unsigned i=1; i(i->rest)); - if (is_ex_exactly_of_type(i->rest,numeric)) + if (is_exactly_a(i->rest)) dbgprint(); GINAC_ASSERT(!is_exactly_a(i->rest)); ++i; @@ -357,7 +355,7 @@ ex add::eval(int level) const return this->hold(); } -ex add::evalm(void) const +ex add::evalm() const { // Evaluate children first and add up all matrices. Stop if there's one // term that is not a matrix. @@ -372,7 +370,7 @@ ex add::evalm(void) const while (it != itend) { const ex &m = recombine_pair_to_ex(*it).evalm(); s->push_back(split_ex_to_pair(m)); - if (is_ex_of_type(m, matrix)) { + if (is_a(m)) { if (first_term) { sum = ex_to(m); first_term = false; @@ -390,12 +388,12 @@ ex add::evalm(void) const return (new add(s, overall_coeff))->setflag(status_flags::dynallocated); } -ex add::simplify_ncmul(const exvector & v) const +ex add::eval_ncmul(const exvector & v) const { if (seq.empty()) - return inherited::simplify_ncmul(v); + return inherited::eval_ncmul(v); else - return seq.begin()->rest.simplify_ncmul(v); + return seq.begin()->rest.eval_ncmul(v); } // protected @@ -423,12 +421,7 @@ int add::compare_same_type(const basic & other) const return inherited::compare_same_type(other); } -bool add::is_equal_same_type(const basic & other) const -{ - return inherited::is_equal_same_type(other); -} - -unsigned add::return_type(void) const +unsigned add::return_type() const { if (seq.empty()) return return_types::commutative; @@ -436,7 +429,7 @@ unsigned add::return_type(void) const return seq.begin()->rest.return_type(); } -unsigned add::return_type_tinfo(void) const +unsigned add::return_type_tinfo() const { if (seq.empty()) return tinfo_key; @@ -456,7 +449,7 @@ ex add::thisexpairseq(epvector * vp, const ex & oc) const expair add::split_ex_to_pair(const ex & e) const { - if (is_ex_exactly_of_type(e,mul)) { + if (is_exactly_a(e)) { const mul &mulref(ex_to(e)); const ex &numfactor = mulref.overall_coeff; mul *mulcopyp = new mul(mulref); @@ -473,7 +466,7 @@ expair add::combine_ex_with_coeff_to_pair(const ex & e, const ex & c) const { GINAC_ASSERT(is_exactly_a(c)); - if (is_ex_exactly_of_type(e, mul)) { + if (is_exactly_a(e)) { const mul &mulref(ex_to(e)); const ex &numfactor = mulref.overall_coeff; mul *mulcopyp = new mul(mulref); @@ -481,14 +474,14 @@ expair add::combine_ex_with_coeff_to_pair(const ex & e, mulcopyp->clearflag(status_flags::evaluated); mulcopyp->clearflag(status_flags::hash_calculated); mulcopyp->setflag(status_flags::dynallocated); - if (are_ex_trivially_equal(c, _ex1)) + if (c.is_equal(_ex1)) return expair(*mulcopyp, numfactor); - else if (are_ex_trivially_equal(numfactor, _ex1)) + else if (numfactor.is_equal(_ex1)) return expair(*mulcopyp, c); else return expair(*mulcopyp, ex_to(numfactor).mul_dyn(ex_to(c))); - } else if (is_ex_exactly_of_type(e, numeric)) { - if (are_ex_trivially_equal(c, _ex1)) + } else if (is_exactly_a(e)) { + if (c.is_equal(_ex1)) return expair(e, _ex1); return expair(ex_to(e).mul_dyn(ex_to(c)), _ex1); } @@ -501,7 +494,7 @@ expair add::combine_pair_with_coeff_to_pair(const expair & p, GINAC_ASSERT(is_exactly_a(p.coeff)); GINAC_ASSERT(is_exactly_a(c)); - if (is_ex_exactly_of_type(p.rest,numeric)) { + if (is_exactly_a(p.rest)) { GINAC_ASSERT(ex_to(p.coeff).is_equal(_num1)); // should be normalized return expair(ex_to(p.rest).mul_dyn(ex_to(c)),_ex1); }