]> www.ginac.de Git - ginac.git/blobdiff - ginac/indexed.cpp
- building GiNaC in a separate directory now works
[ginac.git] / ginac / indexed.cpp
index 0364d99746e97567c466aeced3e5d15a4bfb3339..41c2b1f0681c729edb666e9a5922ede279fb6ce4 100644 (file)
@@ -3,7 +3,7 @@
  *  Implementation of GiNaC's index carrying 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
@@ -31,6 +31,8 @@
 namespace GiNaC {
 #endif // ndef NO_GINAC_NAMESPACE
 
+GINAC_IMPLEMENT_REGISTERED_CLASS(indexed, exprseq)
+
 //////////
 // default constructor, destructor, copy constructor assignment operator and helpers
 //////////
@@ -49,13 +51,13 @@ indexed::~indexed()
     destroy(0);
 }
 
-indexed::indexed(indexed const & other)
+indexed::indexed(const indexed & other)
 {
     debugmsg("indexed copy constructor",LOGLEVEL_CONSTRUCT);
     copy (other);
 }
 
-indexed const & indexed::operator=(indexed const & other)
+const indexed & indexed::operator=(const indexed & other)
 {
     debugmsg("indexed operator=",LOGLEVEL_ASSIGNMENT);
     if (this != &other) {
@@ -67,15 +69,15 @@ indexed const & indexed::operator=(indexed const & other)
 
 // protected
 
-void indexed::copy(indexed const & other)
+void indexed::copy(const indexed & other)
 {
-    exprseq::copy(other);
+    inherited::copy(other);
 }
 
 void indexed::destroy(bool call_parent)
 {
     if (call_parent) {
-        exprseq::destroy(call_parent);
+        inherited::destroy(call_parent);
     }
 }
 
@@ -85,42 +87,73 @@ void indexed::destroy(bool call_parent)
 
 // public
 
-indexed::indexed(ex const & i1) : exprseq(i1)
+indexed::indexed(const ex & i1) : inherited(i1)
 {
     debugmsg("indexed constructor from ex",LOGLEVEL_CONSTRUCT);
     tinfo_key=TINFO_indexed;
     GINAC_ASSERT(all_of_type_idx());
 }
 
-indexed::indexed(ex const & i1, ex const & i2) : exprseq(i1,i2)
+indexed::indexed(const ex & i1, const ex & i2) : inherited(i1,i2)
 {
     debugmsg("indexed constructor from ex,ex",LOGLEVEL_CONSTRUCT);
     tinfo_key=TINFO_indexed;
     GINAC_ASSERT(all_of_type_idx());
 }
 
-indexed::indexed(ex const & i1, ex const & i2, ex const & i3)
-    : exprseq(i1,i2,i3)
+indexed::indexed(const ex & i1, const ex & i2, const ex & i3)
+    : inherited(i1,i2,i3)
 {
     debugmsg("indexed constructor from ex,ex,ex",LOGLEVEL_CONSTRUCT);
     tinfo_key=TINFO_indexed;
     GINAC_ASSERT(all_of_type_idx());
 }
 
-indexed::indexed(exvector const & iv) : exprseq(iv)
+indexed::indexed(const ex & i1, const ex & i2, const ex & i3, const ex & i4)
+    : inherited(i1,i2,i3,i4)
+{
+    debugmsg("indexed constructor from ex,ex,ex,ex",LOGLEVEL_CONSTRUCT);
+    tinfo_key=TINFO_indexed;
+    GINAC_ASSERT(all_of_type_idx());
+}
+
+indexed::indexed(const exvector & iv) : inherited(iv)
 {
     debugmsg("indexed constructor from exvector",LOGLEVEL_CONSTRUCT);
     tinfo_key=TINFO_indexed;
     GINAC_ASSERT(all_of_type_idx());
 }
 
-indexed::indexed(exvector * ivp) : exprseq(ivp)
+indexed::indexed(exvector * ivp) : inherited(ivp)
 {
     debugmsg("indexed constructor from exvector *",LOGLEVEL_CONSTRUCT);
     tinfo_key=TINFO_indexed;
     GINAC_ASSERT(all_of_type_idx());
 }
 
+//////////
+// archiving
+//////////
+
+/** Construct object from archive_node. */
+indexed::indexed(const archive_node &n, const lst &sym_lst) : inherited(n, sym_lst)
+{
+    debugmsg("indexed constructor from archive_node", LOGLEVEL_CONSTRUCT);
+    tinfo_key = TINFO_indexed;
+}
+
+/** Unarchive the object. */
+ex indexed::unarchive(const archive_node &n, const lst &sym_lst)
+{
+    return (new indexed(n, sym_lst))->setflag(status_flags::dynallocated);
+}
+
+/** Archive the object. */
+void indexed::archive(archive_node &n) const
+{
+    inherited::archive(n);
+}
+
 //////////
 // functions overriding virtual functions from bases classes
 //////////
@@ -167,7 +200,7 @@ bool indexed::info(unsigned inf) const
 {
     if (inf==info_flags::indexed) return true;
     if (inf==info_flags::has_indices) return seq.size()!=0;
-    return exprseq::info(inf);
+    return inherited::info(inf);
 }
 
 exvector indexed::get_indices(void) const
@@ -188,16 +221,16 @@ exvector indexed::get_indices(void) const
 
 // protected
 
-int indexed::compare_same_type(basic const & other) const
+int indexed::compare_same_type(const basic & other) const
 {
     GINAC_ASSERT(is_of_type(other,indexed));
-    return exprseq::compare_same_type(other);
+    return inherited::compare_same_type(other);
 }
 
-bool indexed::is_equal_same_type(basic const & other) const
+bool indexed::is_equal_same_type(const basic & other) const
 {
     GINAC_ASSERT(is_of_type(other,indexed));
-    return exprseq::is_equal_same_type(other);
+    return inherited::is_equal_same_type(other);
 }
 
 unsigned indexed::return_type(void) const
@@ -210,7 +243,7 @@ unsigned indexed::return_type_tinfo(void) const
     return tinfo_key;
 }
 
-ex indexed::thisexprseq(exvector const & v) const
+ex indexed::thisexprseq(const exvector & v) const
 {
     return indexed(v);
 }
@@ -292,7 +325,7 @@ bool indexed::all_of_type_idx(void) const
 //////////
 
 const indexed some_indexed;
-type_info const & typeid_indexed=typeid(some_indexed);
+const type_info & typeid_indexed=typeid(some_indexed);
 
 #ifndef NO_GINAC_NAMESPACE
 } // namespace GiNaC