]> www.ginac.de Git - ginac.git/blobdiff - ginac/coloridx.cpp
- throw at atan()'s poles.
[ginac.git] / ginac / coloridx.cpp
index dc8eed7d9c35533c574ff5a90187d4a8ec337ace..a227ea9b32f7bdceebbb6c7a659aea3705ab40c9 100644 (file)
@@ -3,7 +3,7 @@
  *  Implementation of GiNaC's color indices. */
 
 /*
- *  GiNaC Copyright (C) 1999 Johannes Gutenberg University Mainz, Germany
+ *  GiNaC Copyright (C) 1999-2001 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
 #include <stdexcept>
 
 #include "coloridx.h"
+#include "archive.h"
 #include "utils.h"
 #include "debugmsg.h"
 
+#ifndef NO_NAMESPACE_GINAC
 namespace GiNaC {
+#endif // ndef NO_NAMESPACE_GINAC
+
+GINAC_IMPLEMENT_REGISTERED_CLASS(coloridx, idx)
 
 //////////
 // default constructor, destructor, copy constructor assignment operator and helpers
@@ -36,44 +41,44 @@ namespace GiNaC {
 
 coloridx::coloridx()
 {
-    debugmsg("coloridx default constructor",LOGLEVEL_CONSTRUCT);
-    // serial is incremented in idx::idx()
-    name="color"+ToString(serial);
-    tinfo_key=TINFO_coloridx;
+       debugmsg("coloridx default constructor",LOGLEVEL_CONSTRUCT);
+       // serial is incremented in idx::idx()
+       name="color"+ToString(serial);
+       tinfo_key=TINFO_coloridx;
 }
 
 coloridx::~coloridx() 
 {
-    debugmsg("coloridx destructor",LOGLEVEL_DESTRUCT);
-    destroy(0);
+       debugmsg("coloridx destructor",LOGLEVEL_DESTRUCT);
+       destroy(false);
 }
 
-coloridx::coloridx(coloridx const & other)
+coloridx::coloridx(const coloridx & other)
 {
-    debugmsg("coloridx copy constructor",LOGLEVEL_CONSTRUCT);
-    copy(other);
+       debugmsg("coloridx copy constructor",LOGLEVEL_CONSTRUCT);
+       copy(other);
 }
 
-coloridx const & coloridx::operator=(coloridx const & other)
+const coloridx & coloridx::operator=(const coloridx & other)
 {
-    debugmsg("coloridx operator=",LOGLEVEL_ASSIGNMENT);
-    if (this != &other) {
-        destroy(1);
-        copy(other);
-    }
-    return *this;
+       debugmsg("coloridx operator=",LOGLEVEL_ASSIGNMENT);
+       if (this != &other) {
+               destroy(true);
+               copy(other);
+       }
+       return *this;
 }
 
 // protected
 
-void coloridx::copy(coloridx const & other)
+void coloridx::copy(const coloridx & other)
 {
-    idx::copy(other);
+       inherited::copy(other);
 }
 
 void coloridx::destroy(bool call_parent)
 {
-    if (call_parent) idx::destroy(call_parent);
+       if (call_parent) inherited::destroy(call_parent);
 }
 
 //////////
@@ -84,108 +89,131 @@ void coloridx::destroy(bool call_parent)
 
 coloridx::coloridx(bool cov) : idx(cov)
 {
-    debugmsg("coloridx constructor from bool",LOGLEVEL_CONSTRUCT);
-    // serial is incremented in idx::idx(bool)
-    name="color"+ToString(serial);
-    tinfo_key=TINFO_coloridx;
+       debugmsg("coloridx constructor from bool",LOGLEVEL_CONSTRUCT);
+       // serial is incremented in idx::idx(bool)
+       name="color"+ToString(serial);
+       tinfo_key=TINFO_coloridx;
 }
 
-coloridx::coloridx(string const & n, bool cov) : idx(n,cov)
+coloridx::coloridx(const std::string & n, bool cov) : idx(n,cov)
 {
-    debugmsg("coloridx constructor from string,bool",LOGLEVEL_CONSTRUCT);
-    tinfo_key=TINFO_coloridx;
+       debugmsg("coloridx constructor from string,bool",LOGLEVEL_CONSTRUCT);
+       tinfo_key=TINFO_coloridx;
 }
 
-coloridx::coloridx(char const * n, bool cov) : idx(n,cov)
+coloridx::coloridx(const char * n, bool cov) : idx(n,cov)
 {
-    debugmsg("coloridx constructor from char*,bool",LOGLEVEL_CONSTRUCT);
-    tinfo_key=TINFO_coloridx;
+       debugmsg("coloridx constructor from char*,bool",LOGLEVEL_CONSTRUCT);
+       tinfo_key=TINFO_coloridx;
 }
 
-coloridx::coloridx(unsigned const v, bool cov) : idx(v,cov)
+coloridx::coloridx(unsigned v, bool cov) : idx(v,cov)
 {
-    debugmsg("coloridx constructor from unsigned,bool",LOGLEVEL_CONSTRUCT);
-    tinfo_key=TINFO_coloridx;
+       debugmsg("coloridx constructor from unsigned,bool",LOGLEVEL_CONSTRUCT);
+       tinfo_key=TINFO_coloridx;
 }
 
 //////////
-// functions overriding virtual functions from bases classes
+// archiving
 //////////
 
-// public
-
-basic * coloridx::duplicate() const
+/** Construct object from archive_node. */
+coloridx::coloridx(const archive_node &n, const lst &sym_lst) : inherited(n, sym_lst)
 {
-    debugmsg("coloridx duplicate",LOGLEVEL_DUPLICATE);
-    return new coloridx(*this);
+       debugmsg("coloridx constructor from archive_node", LOGLEVEL_CONSTRUCT);
 }
 
-void coloridx::printraw(ostream & os) const
+/** Unarchive the object. */
+ex coloridx::unarchive(const archive_node &n, const lst &sym_lst)
 {
-    debugmsg("coloridx printraw",LOGLEVEL_PRINT);
+       return (new coloridx(n, sym_lst))->setflag(status_flags::dynallocated);
+}
 
-    os << "coloridx(";
+/** Archive the object. */
+void coloridx::archive(archive_node &n) const
+{
+       inherited::archive(n);
+}
 
-    if (symbolic) {
-        os << "symbolic,name=" << name;
-    } else {
-        os << "non symbolic,value=" << value;
-    }
+//////////
+// functions overriding virtual functions from bases classes
+//////////
 
-    if (covariant) {
-        os << ",covariant";
-    } else {
-        os << ",contravariant";
-    }
+// public
 
-    os << ",serial=" << serial;
-    os << ",hash=" << hashvalue << ",flags=" << flags;
-    os << ")";
+basic * coloridx::duplicate() const
+{
+       debugmsg("coloridx duplicate",LOGLEVEL_DUPLICATE);
+       return new coloridx(*this);
 }
 
-void coloridx::printtree(ostream & os, unsigned indent) const
+void coloridx::printraw(std::ostream & os) const
 {
-    debugmsg("coloridx printtree",LOGLEVEL_PRINT);
+       debugmsg("coloridx printraw",LOGLEVEL_PRINT);
 
-    os << string(indent,' ') << "coloridx: ";
+       os << "coloridx(";
 
-    if (symbolic) {
-        os << "symbolic,name=" << name;
-    } else {
-        os << "non symbolic,value=" << value;
-    }
+       if (symbolic) {
+               os << "symbolic,name=" << name;
+       } else {
+               os << "non symbolic,value=" << value;
+       }
 
-    if (covariant) {
-        os << ",covariant";
-    } else {
-        os << ",contravariant";
-    }
+       if (covariant) {
+               os << ",covariant";
+       } else {
+               os << ",contravariant";
+       }
 
-    os << ", serial=" << serial
-       << ", hash=" << hashvalue << " (0x" << hex << hashvalue << dec << ")"
-       << ", flags=" << flags << endl;
+       os << ",serial=" << serial;
+       os << ",hash=" << hashvalue << ",flags=" << flags;
+       os << ")";
 }
 
-void coloridx::print(ostream & os, unsigned upper_precedence) const
+void coloridx::printtree(std::ostream & os, unsigned indent) const
 {
-    debugmsg("coloridx print",LOGLEVEL_PRINT);
+       debugmsg("coloridx printtree",LOGLEVEL_PRINT);
+
+       os << std::string(indent,' ') << "coloridx: ";
+
+       if (symbolic) {
+               os << "symbolic,name=" << name;
+       } else {
+               os << "non symbolic,value=" << value;
+       }
+
+       if (covariant) {
+               os << ",covariant";
+       } else {
+               os << ",contravariant";
+       }
+
+       os << ", serial=" << serial
+          << ", hash=" << hashvalue
+          << " (0x" << std::hex << hashvalue << std::dec << ")"
+          << ", flags=" << flags << std::endl;
+}
 
-    if (covariant) {
-        os << "_";
-    } else {
-        os << "~";
-    }
-    if (symbolic) {
-        os << name;
-    } else {
-        os << value;
-    }
+void coloridx::print(std::ostream & os, unsigned upper_precedence) const
+{
+       debugmsg("coloridx print",LOGLEVEL_PRINT);
+
+       if (covariant) {
+               os << "_";
+       } else {
+               os << "~";
+       }
+       if (symbolic) {
+               os << name;
+       } else {
+               os << value;
+       }
 }
 
 bool coloridx::info(unsigned inf) const
 {
-    if (inf==info_flags::coloridx) return true;
-    return idx::info(inf);
+       if (inf==info_flags::coloridx) return true;
+       return idx::info(inf);
 }
 
 //////////
@@ -211,6 +239,8 @@ bool coloridx::info(unsigned inf) const
 //////////
 
 const coloridx some_coloridx;
-type_info const & typeid_coloridx=typeid(some_coloridx);
+const std::type_info & typeid_coloridx = typeid(some_coloridx);
 
+#ifndef NO_NAMESPACE_GINAC
 } // namespace GiNaC
+#endif // ndef NO_NAMESPACE_GINAC