X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=ginac%2Findexed.cpp;h=0f6726e543a633ed93bad6dcb3b8c550af6710ec;hp=acdd8b0085e8f6f612105ff298c70761e0784b09;hb=9f0f6ede514e50a7722a1112c96b7a6e51668ddb;hpb=15d4b353c85f8815a95d97ab977c9ca48e155574 diff --git a/ginac/indexed.cpp b/ginac/indexed.cpp index acdd8b00..0f6726e5 100644 --- a/ginac/indexed.cpp +++ b/ginac/indexed.cpp @@ -27,9 +27,11 @@ #include "idx.h" #include "debugmsg.h" -#ifndef NO_GINAC_NAMESPACE +#ifndef NO_NAMESPACE_GINAC namespace GiNaC { -#endif // ndef NO_GINAC_NAMESPACE +#endif // ndef NO_NAMESPACE_GINAC + +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,50 +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(ex const & i1, ex const & i2, ex const & i3, ex const & i4) - : exprseq(i1,i2,i3,i4) +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(exvector const & iv) : exprseq(iv) +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 ////////// @@ -175,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 @@ -196,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 @@ -218,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); } @@ -300,8 +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_GINAC_NAMESPACE +#ifndef NO_NAMESPACE_GINAC } // namespace GiNaC -#endif // ndef NO_GINAC_NAMESPACE +#endif // ndef NO_NAMESPACE_GINAC