one_bit_color_map.hpp 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. // Copyright (C) 2006-2010 The Trustees of Indiana University.
  2. // Use, modification and distribution is subject to the Boost Software
  3. // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
  4. // http://www.boost.org/LICENSE_1_0.txt)
  5. // Authors: Douglas Gregor
  6. // Jeremiah Willcock
  7. // Andrew Lumsdaine
  8. // Distributed version of the one-bit color map
  9. #ifndef BOOST_DISTRIBUTED_ONE_BIT_COLOR_MAP_HPP
  10. #define BOOST_DISTRIBUTED_ONE_BIT_COLOR_MAP_HPP
  11. #ifndef BOOST_GRAPH_USE_MPI
  12. #error "Parallel BGL files should not be included unless <boost/graph/use_mpi.hpp> has been included"
  13. #endif
  14. #include <boost/graph/one_bit_color_map.hpp>
  15. #include <boost/property_map/parallel/distributed_property_map.hpp>
  16. #include <boost/property_map/parallel/local_property_map.hpp>
  17. namespace boost {
  18. template<typename ProcessGroup, typename GlobalMap, typename StorageMap>
  19. class one_bit_color_map<local_property_map<ProcessGroup,GlobalMap,StorageMap> >
  20. : public parallel::distributed_property_map<ProcessGroup, GlobalMap,
  21. one_bit_color_map<StorageMap> >
  22. {
  23. typedef one_bit_color_map<StorageMap> local_map;
  24. typedef parallel::distributed_property_map<ProcessGroup, GlobalMap,
  25. local_map >
  26. inherited;
  27. typedef local_property_map<ProcessGroup, GlobalMap, StorageMap>
  28. index_map_type;
  29. public:
  30. one_bit_color_map(std::size_t inital_size,
  31. const index_map_type& index = index_map_type())
  32. : inherited(index.process_group(), index.global(),
  33. local_map(inital_size, index.base())) { }
  34. inherited& base() { return *this; }
  35. const inherited& base() const { return *this; }
  36. };
  37. template<typename ProcessGroup, typename GlobalMap, typename StorageMap>
  38. inline one_bit_color_type
  39. get(one_bit_color_map<local_property_map<ProcessGroup,GlobalMap,StorageMap> >
  40. const& pm,
  41. typename property_traits<GlobalMap>::key_type key)
  42. {
  43. return get(pm.base(), key);
  44. }
  45. template<typename ProcessGroup, typename GlobalMap, typename StorageMap>
  46. inline void
  47. put(one_bit_color_map<local_property_map<ProcessGroup,GlobalMap,StorageMap> >
  48. const& pm,
  49. typename property_traits<GlobalMap>::key_type key,
  50. one_bit_color_type value)
  51. {
  52. put(pm.base(), key, value);
  53. }
  54. template<typename ProcessGroup, typename GlobalMap, typename StorageMap>
  55. class one_bit_color_map<parallel::distributed_property_map<
  56. ProcessGroup, GlobalMap, StorageMap> >
  57. : public parallel::distributed_property_map<
  58. ProcessGroup, GlobalMap, one_bit_color_map<StorageMap> >
  59. {
  60. typedef one_bit_color_map<StorageMap> local_map;
  61. typedef parallel::distributed_property_map<ProcessGroup,GlobalMap,local_map>
  62. inherited;
  63. typedef parallel::distributed_property_map<ProcessGroup, GlobalMap,
  64. StorageMap>
  65. index_map_type;
  66. public:
  67. one_bit_color_map(std::size_t inital_size,
  68. const index_map_type& index = index_map_type())
  69. : inherited(index.process_group(), index.global(),
  70. local_map(inital_size, index.base())) { }
  71. inherited& base() { return *this; }
  72. const inherited& base() const { return *this; }
  73. };
  74. template<typename ProcessGroup, typename GlobalMap, typename StorageMap>
  75. inline one_bit_color_type
  76. get(one_bit_color_map<
  77. parallel::distributed_property_map<
  78. ProcessGroup, GlobalMap, one_bit_color_map<StorageMap> > > const& pm,
  79. typename property_traits<GlobalMap>::key_type key)
  80. {
  81. return get(pm.base(), key);
  82. }
  83. template<typename ProcessGroup, typename GlobalMap, typename StorageMap>
  84. inline void
  85. put(one_bit_color_map<
  86. parallel::distributed_property_map<
  87. ProcessGroup, GlobalMap, one_bit_color_map<StorageMap> > > const& pm,
  88. typename property_traits<GlobalMap>::key_type key,
  89. one_bit_color_type value)
  90. {
  91. put(pm.base(), key, value);
  92. }
  93. } // end namespace boost
  94. #endif // BOOST_DISTRIBUTED_ONE_BIT_COLOR_MAP_HPP