forked from boostorg/tuple
@@ -37,6 +37,7 @@
|
|||||||
|
|
||||||
#include "boost/type_traits/cv_traits.hpp"
|
#include "boost/type_traits/cv_traits.hpp"
|
||||||
#include "boost/type_traits/function_traits.hpp"
|
#include "boost/type_traits/function_traits.hpp"
|
||||||
|
#include "boost/utility/swap.hpp"
|
||||||
|
|
||||||
#include "boost/detail/workaround.hpp" // needed for BOOST_WORKAROUND
|
#include "boost/detail/workaround.hpp" // needed for BOOST_WORKAROUND
|
||||||
|
|
||||||
@@ -947,6 +948,29 @@ tie(T0& t0, T1& t1, T2& t2, T3& t3,
|
|||||||
return t(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9);
|
return t(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <class T0, class T1, class T2, class T3, class T4,
|
||||||
|
class T5, class T6, class T7, class T8, class T9>
|
||||||
|
void swap(tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>& lhs,
|
||||||
|
tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>& rhs);
|
||||||
|
inline void swap(null_type&, null_type&) {}
|
||||||
|
template<class HH>
|
||||||
|
inline void swap(cons<HH, null_type>& lhs, cons<HH, null_type>& rhs) {
|
||||||
|
::boost::swap(lhs.head, rhs.head);
|
||||||
|
}
|
||||||
|
template<class HH, class TT>
|
||||||
|
inline void swap(cons<HH, TT>& lhs, cons<HH, TT>& rhs) {
|
||||||
|
::boost::swap(lhs.head, rhs.head);
|
||||||
|
::boost::tuples::swap(lhs.tail, rhs.tail);
|
||||||
|
}
|
||||||
|
template <class T0, class T1, class T2, class T3, class T4,
|
||||||
|
class T5, class T6, class T7, class T8, class T9>
|
||||||
|
inline void swap(tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>& lhs,
|
||||||
|
tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>& rhs) {
|
||||||
|
typedef tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> tuple_type;
|
||||||
|
typedef typename tuple_type::inherited base;
|
||||||
|
::boost::tuples::swap(static_cast<base&>(lhs), static_cast<base&>(rhs));
|
||||||
|
}
|
||||||
|
|
||||||
} // end of namespace tuples
|
} // end of namespace tuples
|
||||||
} // end of namespace boost
|
} // end of namespace boost
|
||||||
|
|
||||||
|
@@ -27,6 +27,7 @@
|
|||||||
#define BOOST_TUPLE_BASIC_NO_PARTIAL_SPEC_HPP
|
#define BOOST_TUPLE_BASIC_NO_PARTIAL_SPEC_HPP
|
||||||
|
|
||||||
#include "boost/type_traits.hpp"
|
#include "boost/type_traits.hpp"
|
||||||
|
#include "boost/utility/swap.hpp"
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
#if defined BOOST_MSVC
|
#if defined BOOST_MSVC
|
||||||
@@ -836,6 +837,29 @@ namespace tuples {
|
|||||||
|
|
||||||
detail::swallow_assign const ignore = detail::swallow_assign();
|
detail::swallow_assign const ignore = detail::swallow_assign();
|
||||||
|
|
||||||
|
template <class T0, class T1, class T2, class T3, class T4,
|
||||||
|
class T5, class T6, class T7, class T8, class T9>
|
||||||
|
void swap(tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>& lhs,
|
||||||
|
tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>& rhs);
|
||||||
|
inline void swap(null_type&, null_type&) {}
|
||||||
|
template<class HH>
|
||||||
|
inline void swap(cons<HH, null_type>& lhs, cons<HH, null_type>& rhs) {
|
||||||
|
::boost::swap(lhs.head, rhs.head);
|
||||||
|
}
|
||||||
|
template<class HH, class TT>
|
||||||
|
inline void swap(cons<HH, TT>& lhs, cons<HH, TT>& rhs) {
|
||||||
|
::boost::swap(lhs.head, rhs.head);
|
||||||
|
::boost::tuples::swap(lhs.tail, rhs.tail);
|
||||||
|
}
|
||||||
|
template <class T0, class T1, class T2, class T3, class T4,
|
||||||
|
class T5, class T6, class T7, class T8, class T9>
|
||||||
|
inline void swap(tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>& lhs,
|
||||||
|
tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>& rhs) {
|
||||||
|
typedef tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> tuple_type;
|
||||||
|
typedef typename tuple_type::inherited base;
|
||||||
|
::boost::tuples::swap(static_cast<base&>(lhs), static_cast<base&>(rhs));
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace tuples
|
} // namespace tuples
|
||||||
} // namespace boost
|
} // namespace boost
|
||||||
#endif // BOOST_TUPLE_BASIC_NO_PARTIAL_SPEC_HPP
|
#endif // BOOST_TUPLE_BASIC_NO_PARTIAL_SPEC_HPP
|
||||||
|
@@ -445,6 +445,26 @@ void tuple_length_test()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// - testing swap -----------------------------------------------------------
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
void tuple_swap_test()
|
||||||
|
{
|
||||||
|
tuple<int, float, double> t1(1, 2.0f, 3.0), t2(4, 5.0f, 6.0);
|
||||||
|
swap(t1, t2);
|
||||||
|
BOOST_CHECK(get<0>(t1) == 4);
|
||||||
|
BOOST_CHECK(get<1>(t1) == 5.0f);
|
||||||
|
BOOST_CHECK(get<2>(t1) == 6.0);
|
||||||
|
BOOST_CHECK(get<0>(t2) == 1);
|
||||||
|
BOOST_CHECK(get<1>(t2) == 2.0f);
|
||||||
|
BOOST_CHECK(get<2>(t2) == 3.0);
|
||||||
|
|
||||||
|
int i = 1,j = 2;
|
||||||
|
boost::tuple<int&> t3(i), t4(j);
|
||||||
|
swap(t3, t4);
|
||||||
|
BOOST_CHECK(i == 2);
|
||||||
|
BOOST_CHECK(j == 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -465,6 +485,7 @@ int test_main(int, char *[]) {
|
|||||||
cons_test();
|
cons_test();
|
||||||
const_tuple_test();
|
const_tuple_test();
|
||||||
tuple_length_test();
|
tuple_length_test();
|
||||||
|
tuple_swap_test();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user