diff options
Diffstat (limited to 'libdevcore/CommonData.h')
-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) |