1 // (C) Copyright 2005 Matthias Troyer
2 // (C) Copyright 2006 Douglas Gregor <doug.gregor -at gmail.com>
3 
4 // Use, modification and distribution is subject to the Boost Software
5 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
6 // http://www.boost.org/LICENSE_1_0.txt)
7 
8 //  Authors: Matthias Troyer
9 //           Douglas Gregor
10 
11 /** @file skeleton_and_content.hpp
12  *
13  *  This header provides facilities that allow the structure of data
14  *  types (called the "skeleton") to be transmitted and received
15  *  separately from the content stored in those data types. These
16  *  facilities are useful when the data in a stable data structure
17  *  (e.g., a mesh or a graph) will need to be transmitted
18  *  repeatedly. In this case, transmitting the skeleton only once
19  *  saves both communication effort (it need not be sent again) and
20  *  local computation (serialization need only be performed once for
21  *  the content).
22  */
23 #ifndef BOOST_MPI_SKELETON_AND_CONTENT_HPP
24 #define BOOST_MPI_SKELETON_AND_CONTENT_HPP
25 
26 #include <boost/mpi/config.hpp>
27 #include <boost/archive/detail/auto_link_archive.hpp>
28 #include <boost/mpi/skeleton_and_content_types.hpp>
29 
30 namespace boost { namespace mpi {
31 
32 namespace detail {
33   typedef boost::mpi::detail::forward_skeleton_oarchive<boost::mpi::packed_skeleton_oarchive,boost::mpi::packed_oarchive> type1;
34   typedef boost::mpi::detail::forward_skeleton_iarchive<boost::mpi::packed_skeleton_iarchive,boost::mpi::packed_iarchive> type2;
35 }
36 
37 
38 } } // end namespace boost::mpi
39 
40 #include <boost/mpi/detail/content_oarchive.hpp>
41 
42 // For any headers that have provided declarations based on forward
43 // declarations of the contents of this header, include definitions
44 // for those declarations. This means that the inclusion of
45 // skeleton_and_content.hpp enables the use of skeleton/content
46 // transmission throughout the library.
47 #ifdef BOOST_MPI_BROADCAST_HPP
48 #  include <boost/mpi/detail/broadcast_sc.hpp>
49 #endif
50 
51 #ifdef BOOST_MPI_COMMUNICATOR_HPP
52 #  include <boost/mpi/detail/communicator_sc.hpp>
53 #endif
54 
55 // required by export
56 BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::mpi::packed_skeleton_oarchive)
57 BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::mpi::packed_skeleton_iarchive)
58 BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::mpi::detail::type1)
59 BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::mpi::detail::type2)
60 
61 BOOST_SERIALIZATION_USE_ARRAY_OPTIMIZATION(boost::mpi::packed_skeleton_oarchive)
62 BOOST_SERIALIZATION_USE_ARRAY_OPTIMIZATION(boost::mpi::packed_skeleton_iarchive)
63 
64 #endif // BOOST_MPI_SKELETON_AND_CONTENT_HPP
65