Mercurial > hg > vamp-build-and-test
diff DEPENDENCIES/generic/include/boost/graph/distributed/concepts.hpp @ 16:2665513ce2d3
Add boost headers
author | Chris Cannam |
---|---|
date | Tue, 05 Aug 2014 11:11:38 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DEPENDENCIES/generic/include/boost/graph/distributed/concepts.hpp Tue Aug 05 11:11:38 2014 +0100 @@ -0,0 +1,213 @@ +// 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 <boost/graph/use_mpi.hpp> has been included" +#endif + +#include <boost/version.hpp> +#include <boost/graph/graph_traits.hpp> +#include <boost/graph/graph_concepts.hpp> +#include <boost/concept/assert.hpp> + +#if BOOST_VERSION >= 103500 +# include <boost/concept/detail/concept_def.hpp> +#endif + +namespace boost { + +#if BOOST_VERSION >= 103500 + namespace concepts { +#endif + +#if BOOST_VERSION < 103500 + +template <class G> +struct DistributedVertexListGraphConcept +{ + typedef typename graph_traits<G>::vertex_iterator vertex_iterator; + typedef typename graph_traits<G>::vertices_size_type vertices_size_type; + typedef typename graph_traits<G>::traversal_category + traversal_category; + void constraints() { + BOOST_CONCEPT_ASSERT(( GraphConcept<G> )); + BOOST_CONCEPT_ASSERT(( MultiPassInputIteratorConcept<vertex_iterator> )); + BOOST_CONCEPT_ASSERT(( ConvertibleConcept<traversal_category, + distributed_vertex_list_graph_tag> )); + +#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<vertex_iterator,vertex_iterator> p; + typename graph_traits<G>::vertex_descriptor v; + G g; + vertices_size_type V; +}; + +template <class G> +struct DistributedEdgeListGraphConcept +{ + typedef typename graph_traits<G>::edge_descriptor edge_descriptor; + typedef typename graph_traits<G>::edge_iterator edge_iterator; + typedef typename graph_traits<G>::edges_size_type edges_size_type; + typedef typename graph_traits<G>::traversal_category + traversal_category; + void constraints() { + BOOST_CONCEPT_ASSERT(( GraphConcept<G> )); + BOOST_CONCEPT_ASSERT(( MultiPassInputIteratorConcept<edge_iterator> )); + BOOST_CONCEPT_ASSERT(( DefaultConstructibleConcept<edge_descriptor> )); + BOOST_CONCEPT_ASSERT(( EqualityComparableConcept<edge_descriptor> )); + BOOST_CONCEPT_ASSERT(( AssignableConcept<edge_descriptor> )); + BOOST_CONCEPT_ASSERT(( ConvertibleConcept<traversal_category, + distributed_edge_list_graph_tag> )); + + 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<edge_iterator,edge_iterator> p; + typename graph_traits<G>::vertex_descriptor u, v; + typename graph_traits<G>::edge_descriptor e; + edges_size_type E; + G g; +}; +#else + BOOST_concept(DistributedVertexListGraph,(G)) + : Graph<G> + { + typedef typename graph_traits<G>::vertex_iterator vertex_iterator; + typedef typename graph_traits<G>::vertices_size_type vertices_size_type; + typedef typename graph_traits<G>::traversal_category + traversal_category; + ~DistributedVertexListGraph() { + BOOST_CONCEPT_ASSERT((MultiPassInputIterator<vertex_iterator>)); + BOOST_CONCEPT_ASSERT((Convertible<traversal_category, + distributed_vertex_list_graph_tag>)); + +#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<vertex_iterator,vertex_iterator> p; + typename graph_traits<G>::vertex_descriptor v; + G g; + vertices_size_type V; + }; + + BOOST_concept(DistributedEdgeListGraph,(G)) + : Graph<G> + { + typedef typename graph_traits<G>::edge_descriptor edge_descriptor; + typedef typename graph_traits<G>::edge_iterator edge_iterator; + typedef typename graph_traits<G>::edges_size_type edges_size_type; + typedef typename graph_traits<G>::traversal_category + traversal_category; + ~DistributedEdgeListGraph() { + BOOST_CONCEPT_ASSERT((MultiPassInputIterator<edge_iterator>)); + BOOST_CONCEPT_ASSERT((DefaultConstructible<edge_descriptor>)); + BOOST_CONCEPT_ASSERT((EqualityComparable<edge_descriptor>)); + BOOST_CONCEPT_ASSERT((Assignable<edge_descriptor>)); + BOOST_CONCEPT_ASSERT((Convertible<traversal_category, + distributed_edge_list_graph_tag>)); + + 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<edge_iterator,edge_iterator> p; + typename graph_traits<G>::vertex_descriptor u, v; + typename graph_traits<G>::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 <boost/concept/detail/concept_undef.hpp> +#endif + +#endif // BOOST_GRAPH_DISTRIBUTED_CONCEPTS_HPP