Added boost header
This commit is contained in:
91
test/external/boost/property_map/parallel/local_property_map.hpp
vendored
Normal file
91
test/external/boost/property_map/parallel/local_property_map.hpp
vendored
Normal file
@@ -0,0 +1,91 @@
|
||||
// Copyright (C) 2004-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
|
||||
// Andrew Lumsdaine
|
||||
|
||||
// The placement of this #include probably looks very odd relative to
|
||||
// the #ifndef/#define pair below. However, this placement is
|
||||
// extremely important to allow the various property map headers to be
|
||||
// included in any order.
|
||||
#include <boost/property_map/property_map.hpp>
|
||||
|
||||
#ifndef BOOST_PARALLEL_LOCAL_PROPERTY_MAP_HPP
|
||||
#define BOOST_PARALLEL_LOCAL_PROPERTY_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/assert.hpp>
|
||||
|
||||
namespace boost {
|
||||
/** Property map that accesses an underlying, local property map
|
||||
* using a subset of the global keys.
|
||||
*/
|
||||
template<typename ProcessGroup, typename GlobalMap, typename StorageMap>
|
||||
class local_property_map
|
||||
{
|
||||
typedef typename property_traits<GlobalMap>::value_type owner_local_pair;
|
||||
|
||||
public:
|
||||
typedef ProcessGroup process_group_type;
|
||||
typedef typename property_traits<StorageMap>::value_type value_type;
|
||||
typedef typename property_traits<GlobalMap>::key_type key_type;
|
||||
typedef typename property_traits<StorageMap>::reference reference;
|
||||
typedef typename property_traits<StorageMap>::category category;
|
||||
|
||||
local_property_map() { }
|
||||
|
||||
local_property_map(const ProcessGroup& process_group,
|
||||
const GlobalMap& global, const StorageMap& storage)
|
||||
: process_group_(process_group), global_(global), storage(storage) { }
|
||||
|
||||
reference operator[](const key_type& key)
|
||||
{
|
||||
owner_local_pair p = get(global_, key);
|
||||
BOOST_ASSERT(p.first == process_id(process_group_));
|
||||
return storage[p.second];
|
||||
}
|
||||
|
||||
GlobalMap& global() const { return global_; }
|
||||
StorageMap& base() const { return storage; }
|
||||
|
||||
ProcessGroup& process_group() { return process_group_; }
|
||||
const ProcessGroup& process_group() const { return process_group_; }
|
||||
|
||||
private:
|
||||
ProcessGroup process_group_;
|
||||
mutable GlobalMap global_;
|
||||
mutable StorageMap storage;
|
||||
};
|
||||
|
||||
template<typename ProcessGroup, typename GlobalMap, typename StorageMap>
|
||||
inline
|
||||
typename local_property_map<ProcessGroup, GlobalMap, StorageMap>::reference
|
||||
get(const local_property_map<ProcessGroup, GlobalMap, StorageMap>& pm,
|
||||
typename local_property_map<ProcessGroup, GlobalMap, StorageMap>::key_type
|
||||
const & key)
|
||||
|
||||
{
|
||||
typename property_traits<GlobalMap>::value_type p = get(pm.global(), key);
|
||||
return get(pm.base(), p.second);
|
||||
}
|
||||
|
||||
template<typename ProcessGroup, typename GlobalMap, typename StorageMap>
|
||||
inline void
|
||||
put(const local_property_map<ProcessGroup, GlobalMap, StorageMap>& pm,
|
||||
typename local_property_map<ProcessGroup, GlobalMap, StorageMap>
|
||||
::key_type const & key,
|
||||
typename local_property_map<ProcessGroup, GlobalMap, StorageMap>
|
||||
::value_type const& v)
|
||||
{
|
||||
typename property_traits<GlobalMap>::value_type p = get(pm.global(), key);
|
||||
BOOST_ASSERT(p.first == process_id(pm.process_group()));
|
||||
put(pm.base(), p.second, v);
|
||||
}
|
||||
} // end namespace boost
|
||||
#endif // BOOST_PARALLEL_LOCAL_PROPERTY_MAP_HPP
|
||||
Reference in New Issue
Block a user