]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/boost/property_map/parallel/vector_property_map.hpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / boost / property_map / parallel / vector_property_map.hpp
1 // Copyright (C) Vladimir Prus 2003.
2 // Distributed under the Boost Software License, Version 1.0. (See
3 // accompanying file LICENSE_1_0.txt or copy at
4 // http://www.boost.org/LICENSE_1_0.txt)
5 //
6 // See http://www.boost.org/libs/graph/vector_property_map.html for
7 // documentation.
8 //
9
10 #ifndef BOOST_PROPERTY_MAP_PARALLEL_VECTOR_PROPERTY_MAP_HPP_VP_2003_03_04
11 #define BOOST_PROPERTY_MAP_PARALLEL_VECTOR_PROPERTY_MAP_HPP_VP_2003_03_04
12
13 #include <boost/property_map/property_map.hpp>
14 #include <boost/shared_ptr.hpp>
15 #include <vector>
16 #include <boost/property_map/parallel/distributed_property_map.hpp>
17 #include <boost/property_map/parallel/local_property_map.hpp>
18
19 namespace boost {
20
21 /** Distributed vector property map.
22 *
23 * This specialization of @ref vector_property_map builds a
24 * distributed vector property map given the local index maps
25 * generated by distributed graph types that automatically have index
26 * properties.
27 *
28 * This specialization is useful when creating external distributed
29 * property maps via the same syntax used to create external
30 * sequential property maps.
31 */
32 template<typename T, typename ProcessGroup, typename GlobalMap,
33 typename StorageMap>
34 class vector_property_map<T,
35 local_property_map<ProcessGroup, GlobalMap,
36 StorageMap> >
37 : public parallel::distributed_property_map<
38 ProcessGroup, GlobalMap, vector_property_map<T, StorageMap> >
39 {
40 typedef vector_property_map<T, StorageMap> local_iterator_map;
41
42 typedef parallel::distributed_property_map<ProcessGroup, GlobalMap,
43 local_iterator_map> inherited;
44
45 typedef local_property_map<ProcessGroup, GlobalMap, StorageMap> index_map_type;
46
47 public:
48 vector_property_map(const index_map_type& index = index_map_type())
49 : inherited(index.process_group(), index.global(),
50 local_iterator_map(index.base())) { }
51
52 vector_property_map(unsigned inital_size,
53 const index_map_type& index = index_map_type())
54 : inherited(index.process_group(), index.global(),
55 local_iterator_map(inital_size, index.base())) { }
56 };
57
58 /** Distributed vector property map.
59 *
60 * This specialization of @ref vector_property_map builds a
61 * distributed vector property map given the local index maps
62 * generated by distributed graph types that automatically have index
63 * properties.
64 *
65 * This specialization is useful when creating external distributed
66 * property maps via the same syntax used to create external
67 * sequential property maps.
68 */
69 template<typename T, typename ProcessGroup, typename GlobalMap,
70 typename StorageMap>
71 class vector_property_map<
72 T,
73 parallel::distributed_property_map<
74 ProcessGroup,
75 GlobalMap,
76 StorageMap
77 >
78 >
79 : public parallel::distributed_property_map<
80 ProcessGroup, GlobalMap, vector_property_map<T, StorageMap> >
81 {
82 typedef vector_property_map<T, StorageMap> local_iterator_map;
83
84 typedef parallel::distributed_property_map<ProcessGroup, GlobalMap,
85 local_iterator_map> inherited;
86
87 typedef parallel::distributed_property_map<ProcessGroup, GlobalMap,
88 StorageMap>
89 index_map_type;
90
91 public:
92 vector_property_map(const index_map_type& index = index_map_type())
93 : inherited(index.process_group(), index.global(),
94 local_iterator_map(index.base())) { }
95
96 vector_property_map(unsigned inital_size,
97 const index_map_type& index = index_map_type())
98 : inherited(index.process_group(), index.global(),
99 local_iterator_map(inital_size, index.base())) { }
100 };
101
102 }
103
104 #endif // BOOST_PROPERTY_MAP_PARALLEL_VECTOR_PROPERTY_MAP_HPP_VP_2003_03_04