Add rvalue reference ctors from epvectors for add, mul.
authorRichard Kreckel <kreckel@ginac.de>
Thu, 17 Dec 2015 08:32:15 +0000 (09:32 +0100)
committerRichard Kreckel <kreckel@ginac.de>
Thu, 17 Dec 2015 08:32:15 +0000 (09:32 +0100)
ginac/add.cpp
ginac/add.h
ginac/mul.cpp
ginac/mul.h

index 2a2e2f8..79994e1 100644 (file)
@@ -86,6 +86,13 @@ add::add(const epvector & v, const ex & oc)
        GINAC_ASSERT(is_canonical());
 }
 
+add::add(epvector && vp)
+{
+       overall_coeff = _ex0;
+       construct_from_epvector(std::move(vp));
+       GINAC_ASSERT(is_canonical());
+}
+
 add::add(epvector && vp, const ex & oc)
 {
        overall_coeff = oc;
@@ -492,7 +499,7 @@ ex add::derivative(const symbol & y) const
        for (auto & it : seq)
                s.push_back(expair(it.rest.diff(y), it.coeff));
 
-       return dynallocate<add>(std::move(s), _ex0);
+       return dynallocate<add>(std::move(s));
 }
 
 int add::compare_same_type(const basic & other) const
index 4276157..aebb7c0 100644 (file)
@@ -41,7 +41,8 @@ public:
        add(const exvector & v);
        add(const epvector & v);
        add(const epvector & v, const ex & oc);
-       add(epvector && vp, const ex & oc);
+       add(epvector && v);
+       add(epvector && v, const ex & oc);
        
        // functions overriding virtual functions from base classes
 public:
index 36960c0..3f2d5cd 100644 (file)
@@ -89,6 +89,13 @@ mul::mul(const epvector & v, const ex & oc, bool do_index_renaming)
        GINAC_ASSERT(is_canonical());
 }
 
+mul::mul(epvector && vp)
+{
+       overall_coeff = _ex1;
+       construct_from_epvector(std::move(vp));
+       GINAC_ASSERT(is_canonical());
+}
+
 mul::mul(epvector && vp, const ex & oc, bool do_index_renaming)
 {
        overall_coeff = oc;
index e689ddf..d8df654 100644 (file)
@@ -42,6 +42,7 @@ public:
        mul(const exvector & v);
        mul(const epvector & v);
        mul(const epvector & v, const ex & oc, bool do_index_renaming = false);
+       mul(epvector && vp);
        mul(epvector && vp, const ex & oc, bool do_index_renaming = false);
        mul(const ex & lh, const ex & mh, const ex & rh);