X-Git-Url: https://ginac.de/ginac.git//ginac.git?a=blobdiff_plain;f=ginac%2Fcontainer.h;h=3c9d560132dcfced847f2397c24ed1c69ce1bd0a;hb=acae7ab5a4dc94d1f54ba794f32f5764cdb4d704;hp=456cf5c41b69a6005971e6d0680d81efa8d1f4eb;hpb=90ad10b58d02365a407b2d84d8b93e50030feaa5;p=ginac.git diff --git a/ginac/container.h b/ginac/container.h index 456cf5c4..3c9d5601 100644 --- a/ginac/container.h +++ b/ginac/container.h @@ -3,7 +3,7 @@ * Wrapper template for making GiNaC classes out of STL containers. */ /* - * GiNaC Copyright (C) 1999-2010 Johannes Gutenberg University Mainz, Germany + * GiNaC Copyright (C) 1999-2015 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 @@ -152,10 +152,10 @@ public: this->seq = s; } - explicit container(std::auto_ptr vp) + explicit container(STLT && v) { setflag(get_default_flags()); - this->seq.swap(*vp); + this->seq.swap(v); } container(exvector::const_iterator b, exvector::const_iterator e) @@ -173,14 +173,14 @@ public: container(const ex & p1, const ex & p2) { setflag(get_default_flags()); - reserve(this->seq, 2); + this->reserve(this->seq, 2); this->seq.push_back(p1); this->seq.push_back(p2); } container(const ex & p1, const ex & p2, const ex & p3) { setflag(get_default_flags()); - reserve(this->seq, 3); + this->reserve(this->seq, 3); this->seq.push_back(p1); this->seq.push_back(p2); this->seq.push_back(p3); } @@ -188,7 +188,7 @@ public: const ex & p4) { setflag(get_default_flags()); - reserve(this->seq, 4); + this->reserve(this->seq, 4); this->seq.push_back(p1); this->seq.push_back(p2); this->seq.push_back(p3); this->seq.push_back(p4); } @@ -197,7 +197,7 @@ public: const ex & p4, const ex & p5) { setflag(get_default_flags()); - reserve(this->seq, 5); + this->reserve(this->seq, 5); this->seq.push_back(p1); this->seq.push_back(p2); this->seq.push_back(p3); this->seq.push_back(p4); this->seq.push_back(p5); } @@ -206,7 +206,7 @@ public: const ex & p4, const ex & p5, const ex & p6) { setflag(get_default_flags()); - reserve(this->seq, 6); + this->reserve(this->seq, 6); this->seq.push_back(p1); this->seq.push_back(p2); this->seq.push_back(p3); this->seq.push_back(p4); this->seq.push_back(p5); this->seq.push_back(p6); } @@ -216,7 +216,7 @@ public: const ex & p7) { setflag(get_default_flags()); - reserve(this->seq, 7); + this->reserve(this->seq, 7); this->seq.push_back(p1); this->seq.push_back(p2); this->seq.push_back(p3); this->seq.push_back(p4); this->seq.push_back(p5); this->seq.push_back(p6); this->seq.push_back(p7); @@ -227,7 +227,7 @@ public: const ex & p7, const ex & p8) { setflag(get_default_flags()); - reserve(this->seq, 8); + this->reserve(this->seq, 8); this->seq.push_back(p1); this->seq.push_back(p2); this->seq.push_back(p3); this->seq.push_back(p4); this->seq.push_back(p5); this->seq.push_back(p6); this->seq.push_back(p7); this->seq.push_back(p8); @@ -238,7 +238,7 @@ public: const ex & p7, const ex & p8, const ex & p9) { setflag(get_default_flags()); - reserve(this->seq, 9); + this->reserve(this->seq, 9); this->seq.push_back(p1); this->seq.push_back(p2); this->seq.push_back(p3); this->seq.push_back(p4); this->seq.push_back(p5); this->seq.push_back(p6); this->seq.push_back(p7); this->seq.push_back(p8); this->seq.push_back(p9); @@ -250,7 +250,7 @@ public: const ex & p10) { setflag(get_default_flags()); - reserve(this->seq, 10); + this->reserve(this->seq, 10); this->seq.push_back(p1); this->seq.push_back(p2); this->seq.push_back(p3); this->seq.push_back(p4); this->seq.push_back(p5); this->seq.push_back(p6); this->seq.push_back(p7); this->seq.push_back(p8); this->seq.push_back(p9); @@ -263,7 +263,7 @@ public: const ex & p10, const ex & p11) { setflag(get_default_flags()); - reserve(this->seq, 11); + this->reserve(this->seq, 11); this->seq.push_back(p1); this->seq.push_back(p2); this->seq.push_back(p3); this->seq.push_back(p4); this->seq.push_back(p5); this->seq.push_back(p6); this->seq.push_back(p7); this->seq.push_back(p8); this->seq.push_back(p9); @@ -276,7 +276,7 @@ public: const ex & p10, const ex & p11, const ex & p12) { setflag(get_default_flags()); - reserve(this->seq, 12); + this->reserve(this->seq, 12); this->seq.push_back(p1); this->seq.push_back(p2); this->seq.push_back(p3); this->seq.push_back(p4); this->seq.push_back(p5); this->seq.push_back(p6); this->seq.push_back(p7); this->seq.push_back(p8); this->seq.push_back(p9); @@ -290,7 +290,7 @@ public: const ex & p13) { setflag(get_default_flags()); - reserve(this->seq, 13); + this->reserve(this->seq, 13); this->seq.push_back(p1); this->seq.push_back(p2); this->seq.push_back(p3); this->seq.push_back(p4); this->seq.push_back(p5); this->seq.push_back(p6); this->seq.push_back(p7); this->seq.push_back(p8); this->seq.push_back(p9); @@ -305,7 +305,7 @@ public: const ex & p13, const ex & p14) { setflag(get_default_flags()); - reserve(this->seq, 14); + this->reserve(this->seq, 14); this->seq.push_back(p1); this->seq.push_back(p2); this->seq.push_back(p3); this->seq.push_back(p4); this->seq.push_back(p5); this->seq.push_back(p6); this->seq.push_back(p7); this->seq.push_back(p8); this->seq.push_back(p9); @@ -320,7 +320,7 @@ public: const ex & p13, const ex & p14, const ex & p15) { setflag(get_default_flags()); - reserve(this->seq, 15); + this->reserve(this->seq, 15); this->seq.push_back(p1); this->seq.push_back(p2); this->seq.push_back(p3); this->seq.push_back(p4); this->seq.push_back(p5); this->seq.push_back(p6); this->seq.push_back(p7); this->seq.push_back(p8); this->seq.push_back(p9); @@ -336,7 +336,7 @@ public: const ex & p16) { setflag(get_default_flags()); - reserve(this->seq, 16); + this->reserve(this->seq, 16); this->seq.push_back(p1); this->seq.push_back(p2); this->seq.push_back(p3); this->seq.push_back(p4); this->seq.push_back(p5); this->seq.push_back(p6); this->seq.push_back(p7); this->seq.push_back(p8); this->seq.push_back(p9); @@ -372,7 +372,7 @@ public: archive_node::archive_node_cit first = n.find_first("seq"); archive_node::archive_node_cit last = n.find_last("seq"); ++last; - reserve(this->seq, last - first); + this->reserve(this->seq, last - first); for (archive_node::archive_node_cit i=first; iseq.begin(); i!=this->seq.end(); ++i) { if (newcont) { newcont->push_back(i->conjugate()); @@ -405,7 +405,7 @@ protected: continue; } newcont = new STLT; - reserve(*newcont, this->seq.size()); + this->reserve(*newcont, this->seq.size()); for (const_iterator j=this->seq.begin(); j!=i; ++j) { newcont->push_back(*j); } @@ -422,7 +422,7 @@ protected: ex real_part() const { STLT cont; - reserve(cont, nops()); + this->reserve(cont, nops()); const_iterator b = begin(); const_iterator e = end(); for(const_iterator i=b; i!=e; ++i) @@ -433,7 +433,7 @@ protected: ex imag_part() const { STLT cont; - reserve(cont, nops()); + this->reserve(cont, nops()); const_iterator b = begin(); const_iterator e = end(); for(const_iterator i=b; i!=e; ++i) @@ -450,8 +450,8 @@ protected: virtual ex thiscontainer(const STLT & v) const { return container(v); } /** Similar to duplicate(), but with a preset sequence (which gets - * deleted). Must be overridden by derived classes. */ - virtual ex thiscontainer(std::auto_ptr vp) const { return container(vp); } + * pilfered). Must be overridden by derived classes. */ + virtual ex thiscontainer(STLT && v) const { return container(std::move(v)); } virtual void printseq(const print_context & c, char openbracket, char delim, char closebracket, unsigned this_precedence, @@ -495,7 +495,7 @@ protected: void do_print_python(const print_python & c, unsigned level) const; void do_print_python_repr(const print_python_repr & c, unsigned level) const; STLT evalchildren(int level) const; - std::auto_ptr subschildren(const exmap & m, unsigned options = 0) const; + STLT subschildren(const exmap & m, unsigned options = 0) const; }; /** Default constructor */ @@ -582,9 +582,9 @@ ex container::subs(const exmap & m, unsigned options) const // f(x).subs(x==f^-1(x)) // -> f(f^-1(x)) [subschildren] // -> x [eval] /* must not subs(x==f^-1(x))! */ - std::auto_ptr vp = subschildren(m, options); - if (vp.get()) { - ex result(thiscontainer(vp)); + STLT subsed = subschildren(m, options); + if (!subsed.empty()) { + ex result(thiscontainer(subsed)); if (is_a >(result)) return ex_to(result).subs_one_level(m, options); else @@ -738,7 +738,7 @@ typename container::STLT container::evalchildren(int level) const throw std::runtime_error("max recursion level reached"); STLT s; - reserve(s, this->seq.size()); + this->reserve(s, this->seq.size()); --level; const_iterator it = this->seq.begin(), itend = this->seq.end(); @@ -751,11 +751,10 @@ typename container::STLT container::evalchildren(int level) const } template