/usr/include/boost/graph/distributed
Edit: /usr/include/boost/graph/distributed/concepts.hpp (7028B)
// 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
//
// Distributed graph concepts and helpers
//
#ifndef BOOST_GRAPH_DISTRIBUTED_CONCEPTS_HPP
#define BOOST_GRAPH_DISTRIBUTED_CONCEPTS_HPP
#ifndef BOOST_GRAPH_USE_MPI
#error "Parallel BGL files should not be included unless
has been included"
#endif
#include
#include
#include
#include
#if BOOST_VERSION >= 103500
# include
#endif
namespace boost {
#if BOOST_VERSION >= 103500
namespace concepts {
#endif
#if BOOST_VERSION < 103500
template
struct DistributedVertexListGraphConcept
{
typedef typename graph_traits::vertex_iterator vertex_iterator;
typedef typename graph_traits::vertices_size_type vertices_size_type;
typedef typename graph_traits::traversal_category
traversal_category;
void constraints() {
BOOST_CONCEPT_ASSERT(( GraphConcept ));
BOOST_CONCEPT_ASSERT(( MultiPassInputIteratorConcept ));
BOOST_CONCEPT_ASSERT(( ConvertibleConcept ));
#ifdef BOOST_VECTOR_AS_GRAPH_GRAPH_ADL_HACK
// dwa 2003/7/11 -- This clearly shouldn't be necessary, but if
// you want to use vector_as_graph, it is! I'm sure the graph
// library leaves these out all over the place. Probably a
// redesign involving specializing a template with a static
// member function is in order :(
using boost::vertices;
#endif
p = vertices(g);
v = *p.first;
const_constraints(g);
}
void const_constraints(const G& cg) {
#ifdef BOOST_VECTOR_AS_GRAPH_GRAPH_ADL_HACK
// dwa 2003/7/11 -- This clearly shouldn't be necessary, but if
// you want to use vector_as_graph, it is! I'm sure the graph
// library leaves these out all over the place. Probably a
// redesign involving specializing a template with a static
// member function is in order :(
using boost::vertices;
#endif
p = vertices(cg);
v = *p.first;
V = num_vertices(cg);
}
std::pair p;
typename graph_traits::vertex_descriptor v;
G g;
vertices_size_type V;
};
template
struct DistributedEdgeListGraphConcept
{
typedef typename graph_traits::edge_descriptor edge_descriptor;
typedef typename graph_traits::edge_iterator edge_iterator;
typedef typename graph_traits::edges_size_type edges_size_type;
typedef typename graph_traits::traversal_category
traversal_category;
void constraints() {
BOOST_CONCEPT_ASSERT(( GraphConcept ));
BOOST_CONCEPT_ASSERT(( MultiPassInputIteratorConcept ));
BOOST_CONCEPT_ASSERT(( DefaultConstructibleConcept ));
BOOST_CONCEPT_ASSERT(( EqualityComparableConcept ));
BOOST_CONCEPT_ASSERT(( AssignableConcept ));
BOOST_CONCEPT_ASSERT(( ConvertibleConcept ));
p = edges(g);
e = *p.first;
u = source(e, g);
v = target(e, g);
const_constraints(g);
}
void const_constraints(const G& cg) {
p = edges(cg);
E = num_edges(cg);
e = *p.first;
u = source(e, cg);
v = target(e, cg);
}
std::pair p;
typename graph_traits::vertex_descriptor u, v;
typename graph_traits::edge_descriptor e;
edges_size_type E;
G g;
};
#else
BOOST_concept(DistributedVertexListGraph,(G))
: Graph
{
typedef typename graph_traits::vertex_iterator vertex_iterator;
typedef typename graph_traits::vertices_size_type vertices_size_type;
typedef typename graph_traits::traversal_category
traversal_category;
~DistributedVertexListGraph() {
BOOST_CONCEPT_ASSERT((MultiPassInputIterator));
BOOST_CONCEPT_ASSERT((Convertible));
#ifdef BOOST_VECTOR_AS_GRAPH_GRAPH_ADL_HACK
// dwa 2003/7/11 -- This clearly shouldn't be necessary, but if
// you want to use vector_as_graph, it is! I'm sure the graph
// library leaves these out all over the place. Probably a
// redesign involving specializing a template with a static
// member function is in order :(
using boost::vertices;
#endif
p = vertices(g);
v = *p.first;
const_constraints(g);
}
void const_constraints(const G& cg) {
#ifdef BOOST_VECTOR_AS_GRAPH_GRAPH_ADL_HACK
// dwa 2003/7/11 -- This clearly shouldn't be necessary, but if
// you want to use vector_as_graph, it is! I'm sure the graph
// library leaves these out all over the place. Probably a
// redesign involving specializing a template with a static
// member function is in order :(
using boost::vertices;
#endif
p = vertices(cg);
v = *p.first;
V = num_vertices(cg);
}
std::pair p;
typename graph_traits::vertex_descriptor v;
G g;
vertices_size_type V;
};
BOOST_concept(DistributedEdgeListGraph,(G))
: Graph
{
typedef typename graph_traits::edge_descriptor edge_descriptor;
typedef typename graph_traits::edge_iterator edge_iterator;
typedef typename graph_traits::edges_size_type edges_size_type;
typedef typename graph_traits::traversal_category
traversal_category;
~DistributedEdgeListGraph() {
BOOST_CONCEPT_ASSERT((MultiPassInputIterator));
BOOST_CONCEPT_ASSERT((DefaultConstructible));
BOOST_CONCEPT_ASSERT((EqualityComparable));
BOOST_CONCEPT_ASSERT((Assignable));
BOOST_CONCEPT_ASSERT((Convertible));
p = edges(g);
e = *p.first;
u = source(e, g);
v = target(e, g);
const_constraints(g);
}
void const_constraints(const G& cg) {
p = edges(cg);
E = num_edges(cg);
e = *p.first;
u = source(e, cg);
v = target(e, cg);
}
std::pair p;
typename graph_traits::vertex_descriptor u, v;
typename graph_traits::edge_descriptor e;
edges_size_type E;
G g;
};
#endif
#if BOOST_VERSION >= 103500
} // end namespace concepts
using concepts::DistributedVertexListGraphConcept;
using concepts::DistributedEdgeListGraphConcept;
#endif
} // end namespace boost
#if BOOST_VERSION >= 103500
# include
#endif
#endif // BOOST_GRAPH_DISTRIBUTED_CONCEPTS_HPP