]> www.ginac.de Git - ginac.git/blobdiff - ginac/pseries.h
- first implementation of pattern matching
[ginac.git] / ginac / pseries.h
index fbff5135720fcbc84622b7fb1216695da8428cc1..72586eaf96648cdff54627260afc8a1cc08c766d 100644 (file)
@@ -26,9 +26,7 @@
 #include "basic.h"
 #include "expairseq.h"
 
-#ifndef NO_NAMESPACE_GINAC
 namespace GiNaC {
-#endif // ndef NO_NAMESPACE_GINAC
 
 /** This class holds a extended truncated power series (positive and negative
  *  integer powers). It consists of expression coefficients (only non-zero
@@ -38,37 +36,25 @@ class pseries : public basic
 {
        GINAC_DECLARE_REGISTERED_CLASS(pseries, basic)
 
-       // default constructor, destructor, copy constructor, assignment operator and helpers
-public:
-       pseries();
-       ~pseries();
-       pseries(const pseries &other);
-       const pseries &operator=(const pseries &other);
-protected:
-       void copy(const pseries &other);
-       void destroy(bool call_parent);
-
-       // other constructors
+       // other ctors
 public:
        pseries(const ex &rel_, const epvector &ops_);
 
        // functions overriding virtual functions from base classes
 public:
-       basic *duplicate() const;
-       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 print(const print_context & c, unsigned level = 0) const;
+       unsigned precedence(void) const {return 38;} // for clarity just below add::precedence
        unsigned nops(void) const;
        ex op(int i) 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 collect(const symbol &s) const;
+       int degree(const ex &s) const;
+       int ldegree(const ex &s) const;
+       ex coeff(const ex &s, int n = 1) const;
+       ex collect(const ex &s, bool distributed = false) const;
        ex eval(int level=0) const;
        ex evalf(int level=0) const;
        ex series(const relational & r, 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 expand(unsigned options = 0) const;
 protected:
@@ -76,10 +62,28 @@ protected:
 
        // non-virtual functions in this class
 public:
+       /** Get the expansion variable. */
+       ex get_var(void) const {return var;}
+
+       /** Get the expansion point. */
+       ex get_point(void) const {return point;}
+
+       /** Convert the pseries object to an ordinary polynomial.
+        *
+        *  @param no_order flag: discard higher order terms */
        ex convert_to_poly(bool no_order = false) const;
-       bool is_compatible_to(const pseries &other) const {return var.compare(other.var) == 0 && point.compare(other.point) == 0;}
+
+       /** Check whether series is compatible to another series (expansion
+        *  variable and point are the same. */
+       bool is_compatible_to(const pseries &other) const {return var.is_equal(other.var) && point.is_equal(other.point);}
+
+       /** Check whether series has the value zero. */
        bool is_zero(void) const {return seq.size() == 0;}
+
+       /** Returns true if there is no order term, i.e. the series terminates and
+        *  false otherwise. */
        bool is_terminating(void) const;
+
        ex add_series(const pseries &other) const;
        ex mul_const(const numeric &other) const;
        ex mul_series(const pseries &other) const;
@@ -95,13 +99,8 @@ protected:
 
        /** Expansion point */
        ex point;
-       static unsigned precedence;
 };
 
-// global constants
-extern const pseries some_pseries;
-extern const std::type_info & typeid_pseries;
-
 /** Return a reference to the pseries object embedded in an expression.
  *  The result is undefined if the expression does not contain a pseries
  *  object at its top level.
@@ -132,8 +131,6 @@ inline bool is_terminating(const pseries & s)
        return s.is_terminating();
 }
 
-#ifndef NO_NAMESPACE_GINAC
 } // namespace GiNaC
-#endif // ndef NO_NAMESPACE_GINAC
 
 #endif // ndef __GINAC_SERIES_H__