105 lines
3.9 KiB
Plaintext
105 lines
3.9 KiB
Plaintext
// Copyright (C) Vladimir Prus 2003.
|
|
// 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/graph/vector_property_map.html for
|
|
// documentation.
|
|
//
|
|
|
|
#ifndef BOOST_PROPERTY_MAP_PARALLEL_VECTOR_PROPERTY_MAP_HPP_VP_2003_03_04
|
|
#define BOOST_PROPERTY_MAP_PARALLEL_VECTOR_PROPERTY_MAP_HPP_VP_2003_03_04
|
|
|
|
#include <boost/property_map/property_map.hpp>
|
|
#include <boost/shared_ptr.hpp>
|
|
#include <vector>
|
|
#include <boost/property_map/parallel/distributed_property_map.hpp>
|
|
#include <boost/property_map/parallel/local_property_map.hpp>
|
|
|
|
namespace boost {
|
|
|
|
/** Distributed vector property map.
|
|
*
|
|
* This specialization of @ref vector_property_map builds a
|
|
* distributed vector 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 T, typename ProcessGroup, typename GlobalMap,
|
|
typename StorageMap>
|
|
class vector_property_map<T,
|
|
local_property_map<ProcessGroup, GlobalMap,
|
|
StorageMap> >
|
|
: public parallel::distributed_property_map<
|
|
ProcessGroup, GlobalMap, vector_property_map<T, StorageMap> >
|
|
{
|
|
typedef vector_property_map<T, StorageMap> 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:
|
|
vector_property_map(const index_map_type& index = index_map_type())
|
|
: inherited(index.process_group(), index.global(),
|
|
local_iterator_map(index.base())) { }
|
|
|
|
vector_property_map(unsigned inital_size,
|
|
const index_map_type& index = index_map_type())
|
|
: inherited(index.process_group(), index.global(),
|
|
local_iterator_map(inital_size, index.base())) { }
|
|
};
|
|
|
|
/** Distributed vector property map.
|
|
*
|
|
* This specialization of @ref vector_property_map builds a
|
|
* distributed vector 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 T, typename ProcessGroup, typename GlobalMap,
|
|
typename StorageMap>
|
|
class vector_property_map<
|
|
T,
|
|
parallel::distributed_property_map<
|
|
ProcessGroup,
|
|
GlobalMap,
|
|
StorageMap
|
|
>
|
|
>
|
|
: public parallel::distributed_property_map<
|
|
ProcessGroup, GlobalMap, vector_property_map<T, StorageMap> >
|
|
{
|
|
typedef vector_property_map<T, StorageMap> 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:
|
|
vector_property_map(const index_map_type& index = index_map_type())
|
|
: inherited(index.process_group(), index.global(),
|
|
local_iterator_map(index.base())) { }
|
|
|
|
vector_property_map(unsigned inital_size,
|
|
const index_map_type& index = index_map_type())
|
|
: inherited(index.process_group(), index.global(),
|
|
local_iterator_map(inital_size, index.base())) { }
|
|
};
|
|
|
|
}
|
|
|
|
#endif // BOOST_PROPERTY_MAP_PARALLEL_VECTOR_PROPERTY_MAP_HPP_VP_2003_03_04
|