]> www.ginac.de Git - ginac.git/blobdiff - ginac/power.cpp
- first implementation of pattern matching
[ginac.git] / ginac / power.cpp
index b13665e18c0bbb0a286969f528ae88279620f756..d4c12c17d8da76dfc2b599148fc9ecc585d5f286 100644 (file)
@@ -189,16 +189,16 @@ void power::print(const print_context & c, unsigned level) const
                        else
                                c.s << ")";
                } else {
-                       if (precedence <= level) {
+                       if (precedence() <= level) {
                                if (is_of_type(c, print_latex))
                                        c.s << "{(";
                                else
                                        c.s << "(";
                        }
-                       basis.print(c, precedence);
+                       basis.print(c, precedence());
                        c.s << "^";
-                       exponent.print(c, precedence);
-                       if (precedence <= level) {
+                       exponent.print(c, precedence());
+                       if (precedence() <= level) {
                                if (is_of_type(c, print_latex))
                                        c.s << ")}";
                                else
@@ -472,17 +472,16 @@ ex power::evalf(int level) const
        return power(ebasis,eexponent);
 }
 
-ex power::subs(const lst & ls, const lst & lr) const
+ex power::subs(const lst & ls, const lst & lr, bool no_pattern) const
 {
-       const ex & subsed_basis=basis.subs(ls,lr);
-       const ex & subsed_exponent=exponent.subs(ls,lr);
+       const ex &subsed_basis = basis.subs(ls, lr, no_pattern);
+       const ex &subsed_exponent = exponent.subs(ls, lr, no_pattern);
 
-       if (are_ex_trivially_equal(basis,subsed_basis)&&
-               are_ex_trivially_equal(exponent,subsed_exponent)) {
-               return inherited::subs(ls, lr);
-       }
-       
-       return power(subsed_basis, subsed_exponent);
+       if (are_ex_trivially_equal(basis, subsed_basis)
+        && are_ex_trivially_equal(exponent, subsed_exponent))
+               return basic::subs(ls, lr, no_pattern);
+       else
+               return ex(power(subsed_basis, subsed_exponent)).bp->basic::subs(ls, lr, no_pattern);
 }
 
 ex power::simplify_ncmul(const exvector & v) const
@@ -830,14 +829,6 @@ ex power::expand_noncommutative(const ex & basis, const numeric & exponent,
 }
 */
 
-//////////
-// static member variables
-//////////
-
-// protected
-
-unsigned power::precedence = 60;
-
 // helper function
 
 ex sqrt(const ex & a)