#include "debugmsg.h"
#include "utils.h"
-#ifndef NO_NAMESPACE_GINAC
namespace GiNaC {
-#endif // ndef NO_NAMESPACE_GINAC
GINAC_IMPLEMENT_REGISTERED_CLASS(ncmul, exprseq)
tinfo_key = TINFO_ncmul;
}
-ncmul::~ncmul()
-{
- debugmsg("ncmul destructor",LOGLEVEL_DESTRUCT);
- destroy(false);
-}
-
-ncmul::ncmul(const ncmul & other)
-{
- debugmsg("ncmul copy constructor",LOGLEVEL_CONSTRUCT);
- copy(other);
-}
-
-const ncmul & ncmul::operator=(const ncmul & other)
-{
- debugmsg("ncmul operator=",LOGLEVEL_ASSIGNMENT);
- if (this != &other) {
- destroy(true);
- copy(other);
- }
- return *this;
-}
-
// protected
void ncmul::copy(const ncmul & other)
// public
-basic * ncmul::duplicate() const
-{
- debugmsg("ncmul duplicate",LOGLEVEL_ASSIGNMENT);
- return new ncmul(*this);
-}
-
void ncmul::print(std::ostream & os, unsigned upper_precedence) const
{
debugmsg("ncmul print",LOGLEVEL_PRINT);
- printseq(os,'(','%',')',precedence,upper_precedence);
+ printseq(os,'(','*',')',precedence,upper_precedence);
}
void ncmul::printraw(std::ostream & os) const
{
debugmsg("ncmul printraw",LOGLEVEL_PRINT);
- os << "%(";
+ os << "ncmul(";
for (exvector::const_iterator it=seq.begin(); it!=seq.end(); ++it) {
(*it).bp->printraw(os);
os << ",";
// ncmul(ncmul(x1,x2,...),X,ncmul(y1,y2,...)
// (X noncommutative_composite)
- if ((level==1)&&(flags & status_flags::evaluated)) {
+ if ((level==1) && (flags & status_flags::evaluated)) {
return *this;
}
// ncmul(...,*(x1,x2),...,ncmul(x3,x4),...) ->
// ncmul(...,x1,x2,...,x3,x4,...) (associativity)
unsigned factors=0;
- for (exvector::const_iterator cit=evaledseq.begin(); cit!=evaledseq.end(); ++cit) {
+ for (exvector::const_iterator cit=evaledseq.begin(); cit!=evaledseq.end(); ++cit)
factors += count_factors(*cit);
- }
-
+
exvector assocseq;
assocseq.reserve(factors);
- for (exvector::const_iterator cit=evaledseq.begin(); cit!=evaledseq.end(); ++cit) {
+ for (exvector::const_iterator cit=evaledseq.begin(); cit!=evaledseq.end(); ++cit)
append_factors(assocseq,*cit);
- }
-
+
// ncmul(x) -> x
if (assocseq.size()==1) return *(seq.begin());
exvector noncommutativeseq;
noncommutativeseq.reserve(assocseq.size()-count_commutative);
for (i=0; i<assocseq.size(); ++i) {
- if (rettypes[i]==return_types::commutative) {
+ if (rettypes[i]==return_types::commutative)
commutativeseq.push_back(assocseq[i]);
- } else {
+ else
noncommutativeseq.push_back(assocseq[i]);
- }
}
commutativeseq.push_back((new ncmul(noncommutativeseq,1))->setflag(status_flags::dynallocated));
return (new mul(commutativeseq))->setflag(status_flags::dynallocated);
#endif // def DO_GINAC_ASSERT
// if all elements are of same type, simplify the string
- if (evv.size()==1) {
+ if (evv.size()==1)
return evv[0][0].simplify_ncmul(evv[0]);
- }
exvector splitseq;
splitseq.reserve(evv.size());
for (i=0; i<evv.size(); ++i) {
splitseq.push_back((new ncmul(evv[i]))->setflag(status_flags::dynallocated));
}
-
+
return (new mul(splitseq))->setflag(status_flags::dynallocated);
}
status_flags::evaluated);
}
-exvector ncmul::get_indices(void) const
-{
- // return union of indices of factors
- exvector iv;
- for (exvector::const_iterator cit=seq.begin(); cit!=seq.end(); ++cit) {
- exvector subiv=(*cit).get_indices();
- iv.reserve(iv.size()+subiv.size());
- for (exvector::const_iterator cit2=subiv.begin(); cit2!=subiv.end(); ++cit2) {
- iv.push_back(*cit2);
- }
- }
- return iv;
-}
-
ex ncmul::subs(const lst & ls, const lst & lr) const
{
return ncmul(subschildren(ls, lr));
// protected
-unsigned ncmul::precedence=50;
+unsigned ncmul::precedence = 50;
//////////
// friend functions
status_flags::evaluated);
}
-#ifndef NO_NAMESPACE_GINAC
} // namespace GiNaC
-#endif // ndef NO_NAMESPACE_GINAC