]> www.ginac.de Git - ginac.git/blobdiff - ginac/symbol.cpp
Modification in output of last returned expression
[ginac.git] / ginac / symbol.cpp
index f1dc18dffc7ad7a3a8413a0d925d9160a1147ca8..2fa8907fef1c49840832be27dd0fe00b66855a1d 100644 (file)
@@ -3,7 +3,7 @@
  *  Implementation of GiNaC's symbolic objects. */
 
 /*
- *  GiNaC Copyright (C) 1999 Johannes Gutenberg University Mainz, Germany
+ *  GiNaC Copyright (C) 1999-2000 Johannes Gutenberg University Mainz, Germany
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -29,7 +29,9 @@
 #include "idx.h"
 #include "debugmsg.h"
 
+#ifndef NO_GINAC_NAMESPACE
 namespace GiNaC {
+#endif // ndef NO_GINAC_NAMESPACE
 
 //////////
 // default constructor, destructor, copy constructor assignment operator and helpers
@@ -108,10 +110,43 @@ basic * symbol::duplicate() const
     return new symbol(*this);
 }
 
+void symbol::print(ostream & os, unsigned upper_precedence) const
+{
+    debugmsg("symbol print",LOGLEVEL_PRINT);
+    os << name;
+}
+
+void symbol::printraw(ostream & os) const
+{
+    debugmsg("symbol printraw",LOGLEVEL_PRINT);
+    os << "symbol(" << "name=" << name << ",serial=" << serial
+       << ",hash=" << hashvalue << ",flags=" << flags << ")";
+}
+
+void symbol::printtree(ostream & os, unsigned indent) const
+{
+    debugmsg("symbol printtree",LOGLEVEL_PRINT);
+    os << string(indent,' ') << name << " (symbol): "
+       << "serial=" << serial
+       << ", hash=" << hashvalue << " (0x" << hex << hashvalue << dec << ")"
+       << ", flags=" << flags << endl;
+}
+
+void symbol::printcsrc(ostream & os, unsigned type, unsigned upper_precedence) const
+{
+    debugmsg("symbol print csrc", LOGLEVEL_PRINT);
+    os << name;
+}
+
 bool symbol::info(unsigned inf) const
 {
     if (inf==info_flags::symbol) return true;
-    if (inf==info_flags::polynomial || inf==info_flags::integer_polynomial || inf==info_flags::rational_polynomial || inf==info_flags::rational_function) {
+    if (inf==info_flags::polynomial ||
+        inf==info_flags::integer_polynomial ||
+        inf==info_flags::cinteger_polynomial ||
+        inf==info_flags::rational_polynomial ||
+        inf==info_flags::crational_polynomial ||
+        inf==info_flags::rational_function) {
         return true;
     } else {
         return basic::info(inf);
@@ -142,9 +177,9 @@ int symbol::ldegree(symbol const & s) const
 ex symbol::coeff(symbol const & s, int const n) const
 {
     if (compare_same_type(s)==0) {
-        return n==1 ? exONE() : exZERO();
+        return n==1 ? _ex1() : _ex0();
     } else {
-        return n==0 ? *this : exZERO();
+        return n==0 ? *this : _ex0();
     }
 }
 
@@ -170,13 +205,13 @@ ex symbol::subs(lst const & ls, lst const & lr) const
 {
     GINAC_ASSERT(ls.nops()==lr.nops());
 #ifdef DO_GINAC_ASSERT
-    for (int i=0; i<ls.nops(); i++) {
+    for (unsigned i=0; i<ls.nops(); i++) {
         GINAC_ASSERT(is_ex_exactly_of_type(ls.op(i),symbol)||
                is_ex_of_type(ls.op(i),idx));
     }
 #endif // def DO_GINAC_ASSERT
 
-    for (int i=0; i<ls.nops(); i++) {
+    for (unsigned i=0; i<ls.nops(); i++) {
         if (is_ex_exactly_of_type(ls.op(i),symbol)) {
             if (compare_same_type(ex_to_symbol(ls.op(i)))==0) return lr.op(i);
         }
@@ -242,7 +277,7 @@ void symbol::unassign(void)
 {
     if (asexinfop->is_assigned) {
         asexinfop->is_assigned=0;
-        asexinfop->assigned_expression=exZERO();
+        asexinfop->assigned_expression=_ex0();
     }
     setflag(status_flags::evaluated);
 }
@@ -281,4 +316,6 @@ symbol::assigned_ex_info::assigned_ex_info(void) : is_assigned(0), refcount(1)
 {
 }
 
+#ifndef NO_GINAC_NAMESPACE
 } // namespace GiNaC
+#endif // ndef NO_GINAC_NAMESPACE