123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- // (C) Copyright Jeremy Siek 1999-2001.
- // Copyright (C) 2006 Trustees of Indiana University
- // Authors: Douglas Gregor and Jeremy Siek
- // Distributed under the Boost Software License, Version 1.0. (See
- // accompanying file LICENSE_1_0.txt or copy at
- // http://www.boost.org/LICENSE_1_0.txt)
- // See http://www.boost.org/libs/property_map for documentation.
- #ifndef BOOST_PROPERTY_MAP_PARALLEL_PROPERTY_MAPS_HPP
- #define BOOST_PROPERTY_MAP_PARALLEL_PROPERTY_MAPS_HPP
- // Parallel property maps moved over from <boost/property_map/property_map.hpp>
- // as part of refactoring out all parallel code from sequential property map
- // library.
- #include <boost/assert.hpp>
- #include <boost/config.hpp>
- #include <boost/static_assert.hpp>
- #include <cstddef>
- #include <boost/concept_archetype.hpp>
- #include <boost/mpl/assert.hpp>
- #include <boost/mpl/or.hpp>
- #include <boost/mpl/and.hpp>
- #include <boost/mpl/has_xxx.hpp>
- #include <boost/type_traits/is_same.hpp>
- #include <boost/property_map/property_map.hpp>
- #include <boost/property_map/parallel/distributed_property_map.hpp>
- #include <boost/property_map/parallel/local_property_map.hpp>
- namespace boost {
- /** Distributed iterator property map.
- *
- * This specialization of @ref iterator_property_map builds a
- * distributed iterator property map given the local index maps
- * generated by distributed graph types that automatically have index
- * properties.
- *
- * This specialization is useful when creating external distributed
- * property maps via the same syntax used to create external
- * sequential property maps.
- */
- template<typename RandomAccessIterator, typename ProcessGroup,
- typename GlobalMap, typename StorageMap,
- typename ValueType, typename Reference>
- class iterator_property_map
- <RandomAccessIterator,
- local_property_map<ProcessGroup, GlobalMap, StorageMap>,
- ValueType, Reference>
- : public parallel::distributed_property_map
- <ProcessGroup,
- GlobalMap,
- iterator_property_map<RandomAccessIterator, StorageMap,
- ValueType, Reference> >
- {
- typedef iterator_property_map<RandomAccessIterator, StorageMap,
- ValueType, Reference> local_iterator_map;
- typedef parallel::distributed_property_map<ProcessGroup, GlobalMap,
- local_iterator_map> inherited;
- typedef local_property_map<ProcessGroup, GlobalMap, StorageMap>
- index_map_type;
- typedef iterator_property_map self_type;
- public:
- iterator_property_map() { }
- iterator_property_map(RandomAccessIterator cc, const index_map_type& id)
- : inherited(id.process_group(), id.global(),
- local_iterator_map(cc, id.base())) { }
- };
- /** Distributed iterator property map.
- *
- * This specialization of @ref iterator_property_map builds a
- * distributed iterator property map given a distributed index
- * map. Only the local portion of the distributed index property map
- * is utilized.
- *
- * This specialization is useful when creating external distributed
- * property maps via the same syntax used to create external
- * sequential property maps.
- */
- template<typename RandomAccessIterator, typename ProcessGroup,
- typename GlobalMap, typename StorageMap,
- typename ValueType, typename Reference>
- class iterator_property_map<
- RandomAccessIterator,
- parallel::distributed_property_map<ProcessGroup,GlobalMap,StorageMap>,
- ValueType, Reference
- >
- : public parallel::distributed_property_map
- <ProcessGroup,
- GlobalMap,
- iterator_property_map<RandomAccessIterator, StorageMap,
- ValueType, Reference> >
- {
- typedef iterator_property_map<RandomAccessIterator, StorageMap,
- ValueType, Reference> local_iterator_map;
- typedef parallel::distributed_property_map<ProcessGroup, GlobalMap,
- local_iterator_map> inherited;
- typedef parallel::distributed_property_map<ProcessGroup, GlobalMap,
- StorageMap>
- index_map_type;
- public:
- iterator_property_map() { }
- iterator_property_map(RandomAccessIterator cc, const index_map_type& id)
- : inherited(id.process_group(), id.global(),
- local_iterator_map(cc, id.base())) { }
- };
- namespace parallel {
- // Generate an iterator property map with a specific kind of ghost
- // cells
- template<typename RandomAccessIterator, typename ProcessGroup,
- typename GlobalMap, typename StorageMap>
- distributed_property_map<ProcessGroup,
- GlobalMap,
- iterator_property_map<RandomAccessIterator,
- StorageMap> >
- make_iterator_property_map(RandomAccessIterator cc,
- local_property_map<ProcessGroup, GlobalMap,
- StorageMap> index_map)
- {
- typedef distributed_property_map<
- ProcessGroup, GlobalMap,
- iterator_property_map<RandomAccessIterator, StorageMap> >
- result_type;
- return result_type(index_map.process_group(), index_map.global(),
- make_iterator_property_map(cc, index_map.base()));
- }
- } // end namespace parallel
- /** Distributed safe iterator property map.
- *
- * This specialization of @ref safe_iterator_property_map builds a
- * distributed iterator property map given the local index maps
- * generated by distributed graph types that automatically have index
- * properties.
- *
- * This specialization is useful when creating external distributed
- * property maps via the same syntax used to create external
- * sequential property maps.
- */
- template<typename RandomAccessIterator, typename ProcessGroup,
- typename GlobalMap, typename StorageMap, typename ValueType,
- typename Reference>
- class safe_iterator_property_map
- <RandomAccessIterator,
- local_property_map<ProcessGroup, GlobalMap, StorageMap>,
- ValueType, Reference>
- : public parallel::distributed_property_map
- <ProcessGroup,
- GlobalMap,
- safe_iterator_property_map<RandomAccessIterator, StorageMap,
- ValueType, Reference> >
- {
- typedef safe_iterator_property_map<RandomAccessIterator, StorageMap,
- ValueType, Reference> local_iterator_map;
- typedef parallel::distributed_property_map<ProcessGroup, GlobalMap,
- local_iterator_map> inherited;
- typedef local_property_map<ProcessGroup, GlobalMap, StorageMap> index_map_type;
- public:
- safe_iterator_property_map() { }
- safe_iterator_property_map(RandomAccessIterator cc, std::size_t n,
- const index_map_type& id)
- : inherited(id.process_group(), id.global(),
- local_iterator_map(cc, n, id.base())) { }
- };
- /** Distributed safe iterator property map.
- *
- * This specialization of @ref safe_iterator_property_map builds a
- * distributed iterator property map given a distributed index
- * map. Only the local portion of the distributed index property map
- * is utilized.
- *
- * This specialization is useful when creating external distributed
- * property maps via the same syntax used to create external
- * sequential property maps.
- */
- template<typename RandomAccessIterator, typename ProcessGroup,
- typename GlobalMap, typename StorageMap,
- typename ValueType, typename Reference>
- class safe_iterator_property_map<
- RandomAccessIterator,
- parallel::distributed_property_map<ProcessGroup,GlobalMap,StorageMap>,
- ValueType, Reference>
- : public parallel::distributed_property_map
- <ProcessGroup,
- GlobalMap,
- safe_iterator_property_map<RandomAccessIterator, StorageMap,
- ValueType, Reference> >
- {
- typedef safe_iterator_property_map<RandomAccessIterator, StorageMap,
- ValueType, Reference> local_iterator_map;
- typedef parallel::distributed_property_map<ProcessGroup, GlobalMap,
- local_iterator_map> inherited;
- typedef parallel::distributed_property_map<ProcessGroup, GlobalMap,
- StorageMap>
- index_map_type;
- public:
- safe_iterator_property_map() { }
- safe_iterator_property_map(RandomAccessIterator cc, std::size_t n,
- const index_map_type& id)
- : inherited(id.process_group(), id.global(),
- local_iterator_map(cc, n, id.base())) { }
- };
- }
- #include <boost/property_map/vector_property_map.hpp>
- #include <boost/property_map/parallel/vector_property_map.hpp>
- #endif /* BOOST_PROPERTY_MAP_PARALLEL_PROPERTY_MAPS_HPP */
|