82 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| // Copyright (C) 2007 Matthias Troyer
 | |
| //
 | |
| // Use, modification and distribution is subject to the Boost Software
 | |
| // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
 | |
| //
 | |
| // This file contains helper data structures for use in transmitting
 | |
| // properties. The basic idea is to optimize away any storage for the
 | |
| // properties when no properties are specified.
 | |
| #ifndef BOOST_PARALLEL_DETAIL_UNTRACKED_PAIR_HPP
 | |
| #define BOOST_PARALLEL_DETAIL_UNTRACKED_PAIR_HPP
 | |
| 
 | |
| #include <boost/mpi/datatype.hpp>
 | |
| #include <utility> // for std::pair
 | |
| #include <boost/serialization/utility.hpp>
 | |
| 
 | |
| namespace boost { namespace parallel { namespace detail {
 | |
| 
 | |
| /**
 | |
|  * This structure is like std::pair, with the only difference
 | |
|  * that tracking in the serialization library is turned off.
 | |
|  */
 | |
|  
 | |
| template<typename T, typename U>
 | |
| struct untracked_pair : public std::pair<T,U>
 | |
| {
 | |
|   untracked_pair() {}
 | |
| 
 | |
|   untracked_pair(const T& t, const U& u)
 | |
|   : std::pair<T,U>(t,u) {}
 | |
| 
 | |
|   template<class T1, class U1>
 | |
|   untracked_pair(std::pair<T1,U1> const& p)
 | |
|   : std::pair<T,U>(p) {}  
 | |
| };
 | |
| 
 | |
| template<typename T, typename U>
 | |
| inline untracked_pair<T, U>
 | |
| make_untracked_pair(const T& t, const U& u)
 | |
| {
 | |
|   return untracked_pair<T,U>(t,u);
 | |
| }
 | |
| 
 | |
| } } } // end namespace boost::parallel::detail
 | |
| 
 | |
| namespace boost { namespace mpi {
 | |
| 
 | |
| template<typename T, typename U>
 | |
| struct is_mpi_datatype<boost::parallel::detail::untracked_pair<T, U> >
 | |
|   : is_mpi_datatype<std::pair<T,U> > {};
 | |
| 
 | |
| } } // end namespace boost::mpi
 | |
| 
 | |
| namespace boost { namespace serialization {
 | |
| 
 | |
| // pair
 | |
| template<class Archive, class F, class S>
 | |
| inline void serialize(
 | |
|     Archive & ar,
 | |
|     boost::parallel::detail::untracked_pair<F, S> & p,
 | |
|     const unsigned int /* file_version */
 | |
| ){
 | |
|     ar & boost::serialization::make_nvp("first", p.first);
 | |
|     ar & boost::serialization::make_nvp("second", p.second);
 | |
| }
 | |
| 
 | |
| template<typename T, typename U>
 | |
| struct is_bitwise_serializable<
 | |
|         boost::parallel::detail::untracked_pair<T, U> >
 | |
|   : is_bitwise_serializable<std::pair<T, U> > {};
 | |
| 
 | |
| template<typename T, typename U>
 | |
| struct implementation_level<boost::parallel::detail::untracked_pair<T, U> >
 | |
|  : mpl::int_<object_serializable> {} ;
 | |
| 
 | |
| template<typename T, typename U>
 | |
| struct tracking_level<boost::parallel::detail::untracked_pair<T, U> >
 | |
|  : mpl::int_<track_never> {} ;
 | |
| 
 | |
| } } // end namespace boost::serialization
 | |
| 
 | |
| #endif // BOOST_PARALLEL_DETAIL_UNTRACKED_PAIR_HPP
 | 
