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