X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?a=blobdiff_plain;f=ginac%2Findexed.cpp;h=0f6726e543a633ed93bad6dcb3b8c550af6710ec;hb=af8a306646b51b66a0bbe325326059f814f81289;hp=6e36eb305fc157d4d109f3464ce19be919dc572d;hpb=24fe247f9ed16114a765a01c593fec5c4a2f591c;p=ginac.git diff --git a/ginac/indexed.cpp b/ginac/indexed.cpp index 6e36eb30..0f6726e5 100644 --- a/ginac/indexed.cpp +++ b/ginac/indexed.cpp @@ -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 @@ -27,7 +27,11 @@ #include "idx.h" #include "debugmsg.h" +#ifndef NO_NAMESPACE_GINAC namespace GiNaC { +#endif // ndef NO_NAMESPACE_GINAC + +GINAC_IMPLEMENT_REGISTERED_CLASS(indexed, exprseq) ////////// // default constructor, destructor, copy constructor assignment operator and helpers @@ -47,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) { @@ -65,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); } } @@ -83,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 ////////// @@ -165,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 @@ -186,16 +221,23 @@ exvector indexed::get_indices(void) const // protected -int indexed::compare_same_type(basic const & other) const +/** Implementation of ex::diff() for an indexed object. It always returns 0. + * @see ex::diff */ +ex indexed::derivative(const symbol & s) const +{ + return _ex0(); +} + +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 @@ -208,7 +250,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); } @@ -290,6 +332,8 @@ 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_NAMESPACE_GINAC } // namespace GiNaC +#endif // ndef NO_NAMESPACE_GINAC