diff options
author | chriseth <chris@ethereum.org> | 2017-11-28 22:00:32 +0800 |
---|---|---|
committer | chriseth <chris@ethereum.org> | 2017-12-11 21:24:04 +0800 |
commit | 3760284e1c040c93604ec9a86f11a9300617ad4b (patch) | |
tree | e4136c820e85af8ce35e97a443421835ab7348ea /libdevcore | |
parent | 316e4089b3c2317abdf1c5b43e214d1f69e16160 (diff) | |
download | dexon-solidity-3760284e1c040c93604ec9a86f11a9300617ad4b.tar.gz dexon-solidity-3760284e1c040c93604ec9a86f11a9300617ad4b.tar.zst dexon-solidity-3760284e1c040c93604ec9a86f11a9300617ad4b.zip |
Move-append for vector.
Diffstat (limited to 'libdevcore')
-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) |