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 |