#include "wildcard.h"
#include "archive.h"
#include "utils.h"
+#include "inifcns.h"
namespace GiNaC {
* the pattern itself or one of the children 'has' it. As a consequence
* (according to the definition of children) given e=x+y+z, e.has(x) is true
* but e.has(x+y) is false. */
-bool basic::has(const ex & pattern) const
+bool basic::has(const ex & pattern, unsigned options) const
{
lst repl_lst;
if (match(pattern, repl_lst))
return true;
for (size_t i=0; i<nops(); i++)
- if (op(i).has(pattern))
+ if (op(i).has(pattern, options))
return true;
return false;
return *this;
}
+/** Check whether this is a polynomial in the given variables. */
+bool basic::is_polynomial(const ex & var) const
+{
+ return !has(var) || is_equal(ex_to<basic>(var));
+}
+
/** Return degree of highest power in object s. */
int basic::degree(const ex & s) const
{
return *this;
}
+ex basic::real_part() const
+{
+ return real_part_function(*this).hold();
+}
+
+ex basic::imag_part() const
+{
+ return imag_part_function(*this).hold();
+}
+
ex basic::eval_ncmul(const exvector & v) const
{
return hold_ncmul(v);
return return_types::commutative;
}
-const basic* basic::return_type_tinfo() const
+tinfo_t basic::return_type_tinfo() const
{
- return this;
+ return tinfo_key;
}
/** Compute the hash value of an object and if it makes sense to store it in
* would all end up with the same hashvalue. */
unsigned basic::calchash() const
{
- unsigned v = golden_ratio_hash((unsigned)tinfo());
+ unsigned v = golden_ratio_hash((p_int)tinfo());
for (size_t i=0; i<nops(); i++) {
v = rotate_left(v);
v ^= this->op(i).gethash();