Merge topic 'make_pair_rvalues'

1e6c30b7a Make pair construction rvalue-friendly.

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Robert Maynard <robert.maynard@kitware.com>
Merge-request: !1302
This commit is contained in:
Allison Vacanti 2018-07-02 19:34:29 +00:00 committed by Kitware Robot
commit e4dfccee3d

@ -73,6 +73,16 @@ struct Pair
{
}
VTKM_EXEC_CONT
Pair(FirstType&& firstSrc, SecondType&& secondSrc)
: first(std::move(firstSrc))
, second(std::move(secondSrc))
{
}
Pair(const Pair&) = default;
Pair(Pair&&) = default;
template <typename U1, typename U2>
VTKM_EXEC_CONT Pair(const vtkm::Pair<U1, U2>& src)
: first(src.first)
@ -80,6 +90,13 @@ struct Pair
{
}
template <typename U1, typename U2>
VTKM_EXEC_CONT Pair(vtkm::Pair<U1, U2>&& src)
: first(std::move(src.first))
, second(std::move(src.second))
{
}
template <typename U1, typename U2>
VTKM_EXEC_CONT Pair(const std::pair<U1, U2>& src)
: first(src.first)
@ -87,8 +104,16 @@ struct Pair
{
}
template <typename U1, typename U2>
VTKM_EXEC_CONT Pair(std::pair<U1, U2>&& src)
: first(std::move(src.first))
, second(std::move(src.second))
{
}
vtkm::Pair<FirstType, SecondType>& operator=(const vtkm::Pair<FirstType, SecondType>& src) =
default;
vtkm::Pair<FirstType, SecondType>& operator=(vtkm::Pair<FirstType, SecondType>&& src) = default;
VTKM_EXEC_CONT
bool operator==(const vtkm::Pair<FirstType, SecondType>& other) const
@ -141,9 +166,15 @@ VTKM_EXEC_CONT vtkm::Pair<T, U> operator+(const vtkm::Pair<T, U>& a, const vtkm:
}
template <typename T1, typename T2>
VTKM_EXEC_CONT vtkm::Pair<T1, T2> make_Pair(const T1& firstSrc, const T2& secondSrc)
VTKM_EXEC_CONT vtkm::Pair<typename std::decay<T1>::type, typename std::decay<T2>::type> make_Pair(
T1&& v1,
T2&& v2)
{
return vtkm::Pair<T1, T2>(firstSrc, secondSrc);
using DT1 = typename std::decay<T1>::type;
using DT2 = typename std::decay<T2>::type;
using PairT = vtkm::Pair<DT1, DT2>;
return PairT(std::forward<T1>(v1), std::forward<T2>(v2));
}
} // namespace vtkm