X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=ginac%2Findexed.cpp;h=41c2b1f0681c729edb666e9a5922ede279fb6ce4;hp=0364d99746e97567c466aeced3e5d15a4bfb3339;hb=dbb36db8d02b2c25af6bbfff8135112637936e1f;hpb=afdd7fa8c6c0a587f7c80789198551383e8beb7b diff --git a/ginac/indexed.cpp b/ginac/indexed.cpp index 0364d997..41c2b1f0 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 @@ -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