diff options
author | chriseth <chris@ethereum.org> | 2017-12-12 17:23:19 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-12-12 17:23:19 +0800 |
commit | 45d0992ce8dc3b3eb581e76d2c1fb2fbeabe3cfe (patch) | |
tree | ea03c122193abc21178be7da835583eba748653a | |
parent | 40e871692618d26dd325c2a71ef3ba4f9bfe186e (diff) | |
parent | 3760284e1c040c93604ec9a86f11a9300617ad4b (diff) | |
download | dexon-solidity-45d0992ce8dc3b3eb581e76d2c1fb2fbeabe3cfe.tar dexon-solidity-45d0992ce8dc3b3eb581e76d2c1fb2fbeabe3cfe.tar.gz dexon-solidity-45d0992ce8dc3b3eb581e76d2c1fb2fbeabe3cfe.tar.bz2 dexon-solidity-45d0992ce8dc3b3eb581e76d2c1fb2fbeabe3cfe.tar.lz dexon-solidity-45d0992ce8dc3b3eb581e76d2c1fb2fbeabe3cfe.tar.xz dexon-solidity-45d0992ce8dc3b3eb581e76d2c1fb2fbeabe3cfe.tar.zst dexon-solidity-45d0992ce8dc3b3eb581e76d2c1fb2fbeabe3cfe.zip |
Merge pull request #3290 from ethereum/moveAppend
Move-append for vector.
-rw-r--r-- | libdevcore/CommonData.h | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/libdevcore/CommonData.h b/libdevcore/CommonData.h index e76a0949..b85abe95 100644 --- a/libdevcore/CommonData.h +++ b/libdevcore/CommonData.h @@ -183,6 +183,12 @@ template <class T, class U> std::vector<T>& operator+=(std::vector<T>& _a, U con _a.push_back(i); return _a; } +/// Concatenate the contents of a container onto a vector, move variant. +template <class T, class U> std::vector<T>& operator+=(std::vector<T>& _a, U&& _b) +{ + std::move(_b.begin(), _b.end(), std::back_inserter(_a)); + return _a; +} /// Concatenate the contents of a container onto a set template <class T, class U> std::set<T>& operator+=(std::set<T>& _a, U const& _b) { @@ -197,6 +203,17 @@ inline std::vector<T> operator+(std::vector<T> const& _a, std::vector<T> const& ret += _b; return ret; } +/// Concatenate two vectors of elements, moving them. +template <class T> +inline std::vector<T> operator+(std::vector<T>&& _a, std::vector<T>&& _b) +{ + std::vector<T> ret(std::move(_a)); + if (&_a == &_b) + ret += ret; + else + ret += std::move(_b); + return ret; +} template <class T, class V> bool contains(T const& _t, V const& _v) |