| // Copyright (C) 2006 The Trustees of Indiana University. |
| |
| // Use, modification and distribution is subject to 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) |
| |
| // Authors: Douglas Gregor |
| // Jeremiah Willcock |
| // Andrew Lumsdaine |
| |
| // Distributed version of the two-bit color map |
| #ifndef BOOST_DISTRIBUTED_TWO_BIT_COLOR_MAP_HPP |
| #define BOOST_DISTRIBUTED_TWO_BIT_COLOR_MAP_HPP |
| |
| #ifndef BOOST_GRAPH_USE_MPI |
| #error "Parallel BGL files should not be included unless <boost/graph/use_mpi.hpp> has been included" |
| #endif |
| |
| #include <boost/graph/two_bit_color_map.hpp> |
| #include <boost/property_map/parallel/distributed_property_map.hpp> |
| #include <boost/property_map/parallel/local_property_map.hpp> |
| |
| namespace boost { |
| |
| template<typename ProcessGroup, typename GlobalMap, typename StorageMap> |
| class two_bit_color_map<local_property_map<ProcessGroup,GlobalMap,StorageMap> > |
| : public parallel::distributed_property_map<ProcessGroup, GlobalMap, |
| two_bit_color_map<StorageMap> > |
| { |
| typedef two_bit_color_map<StorageMap> local_map; |
| |
| typedef parallel::distributed_property_map<ProcessGroup, GlobalMap, |
| local_map > |
| inherited; |
| |
| typedef local_property_map<ProcessGroup, GlobalMap, StorageMap> |
| index_map_type; |
| |
| public: |
| two_bit_color_map(std::size_t inital_size, |
| const index_map_type& index = index_map_type()) |
| : inherited(index.process_group(), index.global(), |
| local_map(inital_size, index.base())) { } |
| |
| inherited& base() { return *this; } |
| const inherited& base() const { return *this; } |
| }; |
| |
| template<typename ProcessGroup, typename GlobalMap, typename StorageMap> |
| inline two_bit_color_type |
| get(two_bit_color_map<local_property_map<ProcessGroup,GlobalMap,StorageMap> > |
| const& pm, |
| typename two_bit_color_map<GlobalMap>::key_type key) |
| { |
| return get(pm.base(), key); |
| } |
| |
| template<typename ProcessGroup, typename GlobalMap, typename StorageMap> |
| inline void |
| put(two_bit_color_map<local_property_map<ProcessGroup,GlobalMap,StorageMap> > |
| const& pm, |
| typename two_bit_color_map<GlobalMap>::key_type key, |
| two_bit_color_type value) |
| { |
| put(pm.base(), key, value); |
| } |
| |
| template<typename ProcessGroup, typename GlobalMap, typename StorageMap> |
| class two_bit_color_map<parallel::distributed_property_map< |
| ProcessGroup, GlobalMap, StorageMap> > |
| : public parallel::distributed_property_map< |
| ProcessGroup, GlobalMap, two_bit_color_map<StorageMap> > |
| { |
| typedef two_bit_color_map<StorageMap> local_map; |
| |
| typedef parallel::distributed_property_map<ProcessGroup,GlobalMap,local_map> |
| inherited; |
| |
| typedef parallel::distributed_property_map<ProcessGroup, GlobalMap, |
| StorageMap> |
| index_map_type; |
| |
| public: |
| two_bit_color_map(std::size_t inital_size, |
| const index_map_type& index = index_map_type()) |
| : inherited(index.process_group(), index.global(), |
| local_map(inital_size, index.base())) { } |
| |
| inherited& base() { return *this; } |
| const inherited& base() const { return *this; } |
| }; |
| |
| template<typename ProcessGroup, typename GlobalMap, typename StorageMap> |
| inline two_bit_color_type |
| get(two_bit_color_map< |
| parallel::distributed_property_map< |
| ProcessGroup, GlobalMap, two_bit_color_map<StorageMap> > > const& pm, |
| typename two_bit_color_map<GlobalMap>::key_type key) |
| { |
| return get(pm.base(), key); |
| } |
| |
| template<typename ProcessGroup, typename GlobalMap, typename StorageMap> |
| inline void |
| put(two_bit_color_map< |
| parallel::distributed_property_map< |
| ProcessGroup, GlobalMap, two_bit_color_map<StorageMap> > > const& pm, |
| typename two_bit_color_map<GlobalMap>::key_type key, |
| two_bit_color_type value) |
| { |
| put(pm.base(), key, value); |
| } |
| |
| } // end namespace boost |
| |
| #endif // BOOST_DISTRIBUTED_TWO_BIT_COLOR_MAP_HPP |