]> www.ginac.de Git - ginac.git/blobdiff - ginac/basic.cpp
Added integral class.
[ginac.git] / ginac / basic.cpp
index 17f265debbe27f9b5c35d07b0599ed108c6469c5..c37ed3e3ded529a816ab82189da3f6fd42deeafa 100644 (file)
@@ -57,7 +57,6 @@ GINAC_IMPLEMENT_REGISTERED_CLASS_OPT(basic, void,
  *  tinfo_key and the hash value. */
 basic::basic(const basic & other) : tinfo_key(other.tinfo_key), flags(other.flags & ~status_flags::dynallocated), hashvalue(other.hashvalue)
 {
-       GINAC_ASSERT(typeid(*this) == typeid(other));
 }
 
 /** basic assignment operator: the other object might be of a derived class. */
@@ -208,7 +207,7 @@ void basic::do_print_python_repr(const print_python_repr & c, unsigned level) co
  *  @see basic::dbgprinttree */
 void basic::dbgprint() const
 {
-       this->print(std::cerr);
+       this->print(print_dflt(std::cerr));
        std::cerr << std::endl;
 }
 
@@ -483,6 +482,20 @@ ex basic::evalm() const
                return map(map_evalm);
 }
 
+/** Function object to be applied by basic::eval_integ(). */
+struct eval_integ_map_function : public map_function {
+       ex operator()(const ex & e) { return eval_integ(e); }
+} map_eval_integ;
+
+/** Evaluate integrals, if result is known. */
+ex basic::eval_integ() const
+{
+       if (nops() == 0)
+               return *this;
+       else
+               return map(map_eval_integ);
+}
+
 /** Perform automatic symbolic evaluations on indexed expression that
  *  contains this object as the base expression. */
 ex basic::eval_indexed(const basic & i) const
@@ -497,7 +510,7 @@ ex basic::eval_indexed(const basic & i) const
  *  (or a subclass) and their indices are compatible. This function is used
  *  internally by simplify_indexed().
  *
- *  @param self First indexed expression; it's base object is *this
+ *  @param self First indexed expression; its base object is *this
  *  @param other Second indexed expression
  *  @return sum of self and other 
  *  @see ex::simplify_indexed() */
@@ -509,7 +522,7 @@ ex basic::add_indexed(const ex & self, const ex & other) const
 /** Multiply an indexed expression with a scalar. This function is used
  *  internally by simplify_indexed().
  *
- *  @param self Indexed expression; it's base object is *this
+ *  @param self Indexed expression; its base object is *this
  *  @param other Numeric value
  *  @return product of self and other
  *  @see ex::simplify_indexed() */
@@ -525,7 +538,7 @@ ex basic::scalar_mul_indexed(const ex & self, const numeric & other) const
  *  and that at least one dummy index has been found. This functions is
  *  used internally by simplify_indexed().
  *
- *  @param self Pointer to first indexed expression; it's base object is *this
+ *  @param self Pointer to first indexed expression; its base object is *this
  *  @param other Pointer to second indexed expression
  *  @param v The complete vector of factors
  *  @return true if the contraction was successful, false otherwise