// functions overriding virtual functions from bases classes
public:
- void print(std::ostream & os, unsigned upper_precedence = 0) const;
- void printraw(std::ostream & os) const;
- void printtree(std::ostream & os, unsigned indent) const;
- void printcsrc(std::ostream & os, unsigned type, unsigned upper_precedence = 0) const;
+ void print(const print_context & c, unsigned level = 0) const;
+ unsigned precedence(void) const {return 60;}
bool info(unsigned inf) const;
unsigned nops() const;
ex & let_op(int i);
- int degree(const symbol & s) const;
- int ldegree(const symbol & s) const;
- ex coeff(const symbol & s, int n = 1) const;
+ ex map(map_function & f) const;
+ int degree(const ex & s) const;
+ int ldegree(const ex & s) const;
+ ex coeff(const ex & s, int n = 1) const;
ex eval(int level=0) const;
ex evalf(int level=0) const;
+ ex evalm(void) const;
ex series(const relational & s, int order, unsigned options = 0) const;
- ex subs(const lst & ls, const lst & lr) const;
+ ex subs(const lst & ls, const lst & lr, bool no_pattern = false) const;
ex normal(lst &sym_lst, lst &repl_lst, int level = 0) const;
ex to_rational(lst &repl_lst) const;
exvector get_free_indices(void) const;
protected:
ex basis;
ex exponent;
- static unsigned precedence;
};
// utility functions
+
+/** Return the power object handled by an ex. Deprecated: use ex_to<power>().
+ * This is unsafe: you need to check the type first. */
inline const power &ex_to_power(const ex &e)
{
return static_cast<const power &>(*e.bp);
}
+/** Efficient specialization of is_exactly_a<power>(obj) for power objects. */
+template<> inline bool is_exactly_a<power>(const basic & obj)
+{
+ return obj.tinfo()==TINFO_power;
+}
+
// wrapper functions
/** Symbolic exponentiation. Returns a power-object as a new expression.