X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=ginac%2Fsymbol.cpp;h=1a8ef59cd2a5d0d15f0cd6d2e147c631456b587d;hp=bf73ccfb0f8f1efcecbeb7936ed142a4401151b3;hb=21ebb806befcb3873d58074454fcf8dcba138fa9;hpb=0a1b35cf1e59c9e3aae33de8febaa1c8f4bbe630 diff --git a/ginac/symbol.cpp b/ginac/symbol.cpp index bf73ccfb..1a8ef59c 100644 --- a/ginac/symbol.cpp +++ b/ginac/symbol.cpp @@ -30,9 +30,9 @@ #include "debugmsg.h" #include "utils.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(symbol, basic) @@ -55,13 +55,13 @@ symbol::~symbol() destroy(0); } -symbol::symbol(symbol const & other) +symbol::symbol(const symbol & other) { debugmsg("symbol copy constructor", LOGLEVEL_CONSTRUCT); copy(other); } -void symbol::copy(symbol const & other) +void symbol::copy(const symbol & other) { inherited::copy(other); name=other.name; @@ -92,7 +92,7 @@ void symbol::destroy(bool call_parent) // public -symbol::symbol(string const & initname) : inherited(TINFO_symbol) +symbol::symbol(const string & initname) : inherited(TINFO_symbol) { debugmsg("symbol constructor from string", LOGLEVEL_CONSTRUCT); name=initname; @@ -122,7 +122,7 @@ ex symbol::unarchive(const archive_node &n, const lst &sym_lst) ex s = (new symbol(n, sym_lst))->setflag(status_flags::dynallocated); // If symbol is in sym_lst, return the existing symbol - for (int i=0; ihold(); } -bool symbol::has(ex const & other) const +bool symbol::has(const ex & other) const { if (is_equal(*other.bp)) return true; return false; } -int symbol::degree(symbol const & s) const +int symbol::degree(const symbol & s) const { return compare_same_type(s)==0 ? 1 : 0; } -int symbol::ldegree(symbol const & s) const +int symbol::ldegree(const symbol & s) const { return compare_same_type(s)==0 ? 1 : 0; } -ex symbol::coeff(symbol const & s, int const n) const +ex symbol::coeff(const symbol & s, int n) const { if (compare_same_type(s)==0) { return n==1 ? _ex1() : _ex0(); @@ -239,7 +239,7 @@ ex symbol::eval(int level) const } } -ex symbol::subs(lst const & ls, lst const & lr) const +ex symbol::subs(const lst & ls, const lst & lr) const { GINAC_ASSERT(ls.nops()==lr.nops()); #ifdef DO_GINAC_ASSERT @@ -259,7 +259,20 @@ ex symbol::subs(lst const & ls, lst const & lr) const // protected -int symbol::compare_same_type(basic const & other) const +/** Implementation of ex::diff() for single differentiation of a symbol. + * It returns 1 or 0. + * + * @see ex::diff */ +ex symbol::derivative(const symbol & s) const +{ + if (compare_same_type(s)) { + return _ex0(); + } else { + return _ex1(); + } +} + +int symbol::compare_same_type(const basic & other) const { GINAC_ASSERT(is_of_type(other,symbol)); const symbol *o = static_cast(&other); @@ -267,7 +280,7 @@ int symbol::compare_same_type(basic const & other) const return serial < o->serial ? -1 : 1; } -bool symbol::is_equal_same_type(basic const & other) const +bool symbol::is_equal_same_type(const basic & other) const { GINAC_ASSERT(is_of_type(other,symbol)); const symbol *o = static_cast(&other); @@ -304,7 +317,7 @@ unsigned symbol::calchash(void) const // public -void symbol::assign(ex const & value) +void symbol::assign(const ex & value) { asexinfop->is_assigned=1; asexinfop->assigned_expression=value; @@ -343,7 +356,7 @@ unsigned symbol::next_serial=0; ////////// const symbol some_symbol; -type_info const & typeid_symbol=typeid(some_symbol); +const type_info & typeid_symbol=typeid(some_symbol); ////////// // subclass assigned_ex_info @@ -354,6 +367,6 @@ symbol::assigned_ex_info::assigned_ex_info(void) : is_assigned(0), refcount(1) { } -#ifndef NO_GINAC_NAMESPACE +#ifndef NO_NAMESPACE_GINAC } // namespace GiNaC -#endif // ndef NO_GINAC_NAMESPACE +#endif // ndef NO_NAMESPACE_GINAC