summaryrefslogtreecommitdiff
path: root/boost/graph/grid_graph.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/graph/grid_graph.hpp')
-rw-r--r--boost/graph/grid_graph.hpp243
1 files changed, 107 insertions, 136 deletions
diff --git a/boost/graph/grid_graph.hpp b/boost/graph/grid_graph.hpp
index 7bb3732422..9a09fca347 100644
--- a/boost/graph/grid_graph.hpp
+++ b/boost/graph/grid_graph.hpp
@@ -30,11 +30,6 @@
#define BOOST_GRID_GRAPH_TYPE \
grid_graph<DimensionsT, VertexIndexT, EdgeIndexT>
-#define BOOST_GRID_GRAPH_TYPE_MEM typename BOOST_GRID_GRAPH_TYPE::
-
-#define BOOST_GRID_GRAPH_TYPE_TD(mem) \
- typedef typename BOOST_GRID_GRAPH_TYPE::mem mem
-
#define BOOST_GRID_GRAPH_TRAITS_T \
typename graph_traits<BOOST_GRID_GRAPH_TYPE >
@@ -68,6 +63,13 @@ namespace boost {
return (m_graph->index_of(key));
}
+ friend inline Index
+ get(const grid_graph_index_map<Graph, Descriptor, Index>& index_map,
+ const typename grid_graph_index_map<Graph, Descriptor, Index>::key_type& key)
+ {
+ return (index_map[key]);
+ }
+
protected:
const Graph* m_graph;
};
@@ -106,6 +108,13 @@ namespace boost {
value_type operator[](const key_type& key) const {
return (value_type(key.second, key.first));
}
+
+ friend inline Descriptor
+ get(const grid_graph_reverse_edge_map<Descriptor>& rev_map,
+ const typename grid_graph_reverse_edge_map<Descriptor>::key_type& key)
+ {
+ return (rev_map[key]);
+ }
};
template<BOOST_GRID_GRAPH_TEMPLATE_PARAMS>
@@ -442,7 +451,7 @@ namespace boost {
vertex_descriptor vertex_at
(vertices_size_type vertex_index) const {
- array<vertices_size_type, Dimensions> vertex;
+ boost::array<vertices_size_type, Dimensions> vertex;
vertices_size_type index_divider = 1;
for (std::size_t dimension_index = 0;
@@ -532,6 +541,8 @@ namespace boost {
vertex_descriptor source_vertex = source(edge, *this);
vertex_descriptor target_vertex = target(edge, *this);
+ BOOST_ASSERT (source_vertex != target_vertex);
+
// Determine the dimension where the source and target vertices
// differ (should only be one if this is a valid edge).
std::size_t different_dimension_index = 0;
@@ -732,13 +743,12 @@ namespace boost {
// VertexListGraph
//================
- template<BOOST_GRID_GRAPH_TEMPLATE_PARAMS>
- friend inline std::pair<BOOST_GRID_GRAPH_TYPE_MEM vertex_iterator,
- BOOST_GRID_GRAPH_TYPE_MEM vertex_iterator>
- vertices(const BOOST_GRID_GRAPH_TYPE& graph) {
- BOOST_GRID_GRAPH_TYPE_TD(vertex_iterator);
- BOOST_GRID_GRAPH_TYPE_TD(vertex_function);
- BOOST_GRID_GRAPH_TYPE_TD(vertex_index_iterator);
+ friend inline std::pair<typename type::vertex_iterator,
+ typename type::vertex_iterator>
+ vertices(const type& graph) {
+ typedef typename type::vertex_iterator vertex_iterator;
+ typedef typename type::vertex_function vertex_function;
+ typedef typename type::vertex_index_iterator vertex_index_iterator;
return (std::make_pair
(vertex_iterator(vertex_index_iterator(0),
@@ -747,16 +757,14 @@ namespace boost {
vertex_function(&graph))));
}
- template<BOOST_GRID_GRAPH_TEMPLATE_PARAMS>
- friend inline BOOST_GRID_GRAPH_TYPE_MEM vertices_size_type
- num_vertices(const BOOST_GRID_GRAPH_TYPE& graph) {
+ friend inline typename type::vertices_size_type
+ num_vertices(const type& graph) {
return (graph.num_vertices());
}
- template<BOOST_GRID_GRAPH_TEMPLATE_PARAMS>
- friend inline BOOST_GRID_GRAPH_TYPE_MEM vertex_descriptor
- vertex(BOOST_GRID_GRAPH_TYPE_MEM vertices_size_type vertex_index,
- const BOOST_GRID_GRAPH_TYPE& graph) {
+ friend inline typename type::vertex_descriptor
+ vertex(typename type::vertices_size_type vertex_index,
+ const type& graph) {
return (graph.vertex_at(vertex_index));
}
@@ -765,14 +773,13 @@ namespace boost {
// IncidenceGraph
//===============
- template<BOOST_GRID_GRAPH_TEMPLATE_PARAMS>
- friend inline std::pair<BOOST_GRID_GRAPH_TYPE_MEM out_edge_iterator,
- BOOST_GRID_GRAPH_TYPE_MEM out_edge_iterator>
- out_edges(BOOST_GRID_GRAPH_TYPE_MEM vertex_descriptor vertex,
- const BOOST_GRID_GRAPH_TYPE& graph) {
- BOOST_GRID_GRAPH_TYPE_TD(degree_iterator);
- BOOST_GRID_GRAPH_TYPE_TD(out_edge_function);
- BOOST_GRID_GRAPH_TYPE_TD(out_edge_iterator);
+ friend inline std::pair<typename type::out_edge_iterator,
+ typename type::out_edge_iterator>
+ out_edges(typename type::vertex_descriptor vertex,
+ const type& graph) {
+ typedef typename type::degree_iterator degree_iterator;
+ typedef typename type::out_edge_function out_edge_function;
+ typedef typename type::out_edge_iterator out_edge_iterator;
return (std::make_pair
(out_edge_iterator(degree_iterator(0),
@@ -781,19 +788,17 @@ namespace boost {
out_edge_function(vertex, &graph))));
}
- template<BOOST_GRID_GRAPH_TEMPLATE_PARAMS>
- friend inline BOOST_GRID_GRAPH_TYPE_MEM degree_size_type
+ friend inline typename type::degree_size_type
out_degree
- (BOOST_GRID_GRAPH_TYPE_MEM vertex_descriptor vertex,
- const BOOST_GRID_GRAPH_TYPE& graph) {
+ (typename type::vertex_descriptor vertex,
+ const type& graph) {
return (graph.out_degree(vertex));
}
- template<BOOST_GRID_GRAPH_TEMPLATE_PARAMS>
- friend inline BOOST_GRID_GRAPH_TYPE_MEM edge_descriptor
- out_edge_at(BOOST_GRID_GRAPH_TYPE_MEM vertex_descriptor vertex,
- BOOST_GRID_GRAPH_TYPE_MEM degree_size_type out_edge_index,
- const BOOST_GRID_GRAPH_TYPE& graph) {
+ friend inline typename type::edge_descriptor
+ out_edge_at(typename type::vertex_descriptor vertex,
+ typename type::degree_size_type out_edge_index,
+ const type& graph) {
return (graph.out_edge_at(vertex, out_edge_index));
}
@@ -801,14 +806,13 @@ namespace boost {
// AdjacencyGraph
//===============
- template <BOOST_GRID_GRAPH_TEMPLATE_PARAMS>
- friend typename std::pair<BOOST_GRID_GRAPH_TYPE_MEM adjacency_iterator,
- BOOST_GRID_GRAPH_TYPE_MEM adjacency_iterator>
- adjacent_vertices (BOOST_GRID_GRAPH_TYPE_MEM vertex_descriptor vertex,
- const BOOST_GRID_GRAPH_TYPE& graph) {
- BOOST_GRID_GRAPH_TYPE_TD(degree_iterator);
- BOOST_GRID_GRAPH_TYPE_TD(adjacent_vertex_function);
- BOOST_GRID_GRAPH_TYPE_TD(adjacency_iterator);
+ friend typename std::pair<typename type::adjacency_iterator,
+ typename type::adjacency_iterator>
+ adjacent_vertices (typename type::vertex_descriptor vertex,
+ const type& graph) {
+ typedef typename type::degree_iterator degree_iterator;
+ typedef typename type::adjacent_vertex_function adjacent_vertex_function;
+ typedef typename type::adjacency_iterator adjacency_iterator;
return (std::make_pair
(adjacency_iterator(degree_iterator(0),
@@ -821,26 +825,23 @@ namespace boost {
// EdgeListGraph
//==============
- template<BOOST_GRID_GRAPH_TEMPLATE_PARAMS>
- friend inline BOOST_GRID_GRAPH_TYPE_MEM edges_size_type
- num_edges(const BOOST_GRID_GRAPH_TYPE& graph) {
+ friend inline typename type::edges_size_type
+ num_edges(const type& graph) {
return (graph.num_edges());
}
- template<BOOST_GRID_GRAPH_TEMPLATE_PARAMS>
- friend inline BOOST_GRID_GRAPH_TYPE_MEM edge_descriptor
- edge_at(BOOST_GRID_GRAPH_TYPE_MEM edges_size_type edge_index,
- const BOOST_GRID_GRAPH_TYPE& graph) {
+ friend inline typename type::edge_descriptor
+ edge_at(typename type::edges_size_type edge_index,
+ const type& graph) {
return (graph.edge_at(edge_index));
}
- template<BOOST_GRID_GRAPH_TEMPLATE_PARAMS>
- friend inline std::pair<BOOST_GRID_GRAPH_TYPE_MEM edge_iterator,
- BOOST_GRID_GRAPH_TYPE_MEM edge_iterator>
- edges(const BOOST_GRID_GRAPH_TYPE& graph) {
- BOOST_GRID_GRAPH_TYPE_TD(edge_index_iterator);
- BOOST_GRID_GRAPH_TYPE_TD(edge_function);
- BOOST_GRID_GRAPH_TYPE_TD(edge_iterator);
+ friend inline std::pair<typename type::edge_iterator,
+ typename type::edge_iterator>
+ edges(const type& graph) {
+ typedef typename type::edge_index_iterator edge_index_iterator;
+ typedef typename type::edge_function edge_function;
+ typedef typename type::edge_iterator edge_iterator;
return (std::make_pair
(edge_iterator(edge_index_iterator(0),
@@ -853,14 +854,13 @@ namespace boost {
// BiDirectionalGraph
//===================
- template<BOOST_GRID_GRAPH_TEMPLATE_PARAMS>
- friend inline std::pair<BOOST_GRID_GRAPH_TYPE_MEM in_edge_iterator,
- BOOST_GRID_GRAPH_TYPE_MEM in_edge_iterator>
- in_edges(BOOST_GRID_GRAPH_TYPE_MEM vertex_descriptor vertex,
- const BOOST_GRID_GRAPH_TYPE& graph) {
- BOOST_GRID_GRAPH_TYPE_TD(in_edge_function);
- BOOST_GRID_GRAPH_TYPE_TD(degree_iterator);
- BOOST_GRID_GRAPH_TYPE_TD(in_edge_iterator);
+ friend inline std::pair<typename type::in_edge_iterator,
+ typename type::in_edge_iterator>
+ in_edges(typename type::vertex_descriptor vertex,
+ const type& graph) {
+ typedef typename type::in_edge_function in_edge_function;
+ typedef typename type::degree_iterator degree_iterator;
+ typedef typename type::in_edge_iterator in_edge_iterator;
return (std::make_pair
(in_edge_iterator(degree_iterator(0),
@@ -869,25 +869,22 @@ namespace boost {
in_edge_function(vertex, &graph))));
}
- template<BOOST_GRID_GRAPH_TEMPLATE_PARAMS>
- friend inline BOOST_GRID_GRAPH_TYPE_MEM degree_size_type
- in_degree (BOOST_GRID_GRAPH_TYPE_MEM vertex_descriptor vertex,
- const BOOST_GRID_GRAPH_TYPE& graph) {
+ friend inline typename type::degree_size_type
+ in_degree (typename type::vertex_descriptor vertex,
+ const type& graph) {
return (graph.in_degree(vertex));
}
- template<BOOST_GRID_GRAPH_TEMPLATE_PARAMS>
- friend inline BOOST_GRID_GRAPH_TYPE_MEM degree_size_type
- degree (BOOST_GRID_GRAPH_TYPE_MEM vertex_descriptor vertex,
- const BOOST_GRID_GRAPH_TYPE& graph) {
+ friend inline typename type::degree_size_type
+ degree (typename type::vertex_descriptor vertex,
+ const type& graph) {
return (graph.out_degree(vertex) * 2);
}
- template<BOOST_GRID_GRAPH_TEMPLATE_PARAMS>
- friend inline BOOST_GRID_GRAPH_TYPE_MEM edge_descriptor
- in_edge_at(BOOST_GRID_GRAPH_TYPE_MEM vertex_descriptor vertex,
- BOOST_GRID_GRAPH_TYPE_MEM degree_size_type in_edge_index,
- const BOOST_GRID_GRAPH_TYPE& graph) {
+ friend inline typename type::edge_descriptor
+ in_edge_at(typename type::vertex_descriptor vertex,
+ typename type::degree_size_type in_edge_index,
+ const type& graph) {
return (graph.in_edge_at(vertex, in_edge_index));
}
@@ -896,21 +893,20 @@ namespace boost {
// Adjacency Matrix
//==================
- template<BOOST_GRID_GRAPH_TEMPLATE_PARAMS>
- friend std::pair<BOOST_GRID_GRAPH_TYPE_MEM edge_descriptor, bool>
- edge (BOOST_GRID_GRAPH_TYPE_MEM vertex_descriptor source_vertex,
- BOOST_GRID_GRAPH_TYPE_MEM vertex_descriptor destination_vertex,
- const BOOST_GRID_GRAPH_TYPE& graph) {
+ friend std::pair<typename type::edge_descriptor, bool>
+ edge (typename type::vertex_descriptor source_vertex,
+ typename type::vertex_descriptor destination_vertex,
+ const type& graph) {
- std::pair<BOOST_GRID_GRAPH_TYPE_MEM edge_descriptor, bool> edge_exists =
+ std::pair<typename type::edge_descriptor, bool> edge_exists =
std::make_pair(std::make_pair(source_vertex, destination_vertex), false);
for (std::size_t dimension_index = 0;
dimension_index < Dimensions;
++dimension_index) {
- BOOST_GRID_GRAPH_TYPE_MEM vertices_size_type dim_difference = 0;
- BOOST_GRID_GRAPH_TYPE_MEM vertices_size_type
+ typename type::vertices_size_type dim_difference = 0;
+ typename type::vertices_size_type
source_dim = source_vertex[dimension_index],
dest_dim = destination_vertex[dimension_index];
@@ -957,78 +953,55 @@ namespace boost {
// Index Property Map Functions
//=============================
- template<BOOST_GRID_GRAPH_TEMPLATE_PARAMS>
- friend inline BOOST_GRID_GRAPH_TYPE_MEM vertices_size_type
+ friend inline typename type::vertices_size_type
get(vertex_index_t,
- const BOOST_GRID_GRAPH_TYPE& graph,
- BOOST_GRID_GRAPH_TYPE_MEM vertex_descriptor vertex) {
+ const type& graph,
+ typename type::vertex_descriptor vertex) {
return (graph.index_of(vertex));
}
- template<BOOST_GRID_GRAPH_TEMPLATE_PARAMS>
- friend inline BOOST_GRID_GRAPH_TYPE_MEM edges_size_type
+ friend inline typename type::edges_size_type
get(edge_index_t,
- const BOOST_GRID_GRAPH_TYPE& graph,
- BOOST_GRID_GRAPH_TYPE_MEM edge_descriptor edge) {
+ const type& graph,
+ typename type::edge_descriptor edge) {
return (graph.index_of(edge));
}
- template <BOOST_GRID_GRAPH_TEMPLATE_PARAMS>
friend inline grid_graph_index_map<
- BOOST_GRID_GRAPH_TYPE,
- BOOST_GRID_GRAPH_TYPE_MEM vertex_descriptor,
- BOOST_GRID_GRAPH_TYPE_MEM vertices_size_type>
- get(vertex_index_t, const BOOST_GRID_GRAPH_TYPE& graph) {
+ type,
+ typename type::vertex_descriptor,
+ typename type::vertices_size_type>
+ get(vertex_index_t, const type& graph) {
return (grid_graph_index_map<
- BOOST_GRID_GRAPH_TYPE,
- BOOST_GRID_GRAPH_TYPE_MEM vertex_descriptor,
- BOOST_GRID_GRAPH_TYPE_MEM vertices_size_type>(graph));
+ type,
+ typename type::vertex_descriptor,
+ typename type::vertices_size_type>(graph));
}
- template <BOOST_GRID_GRAPH_TEMPLATE_PARAMS>
friend inline grid_graph_index_map<
- BOOST_GRID_GRAPH_TYPE,
- BOOST_GRID_GRAPH_TYPE_MEM edge_descriptor,
- BOOST_GRID_GRAPH_TYPE_MEM edges_size_type>
- get(edge_index_t, const BOOST_GRID_GRAPH_TYPE& graph) {
+ type,
+ typename type::edge_descriptor,
+ typename type::edges_size_type>
+ get(edge_index_t, const type& graph) {
return (grid_graph_index_map<
- BOOST_GRID_GRAPH_TYPE,
- BOOST_GRID_GRAPH_TYPE_MEM edge_descriptor,
- BOOST_GRID_GRAPH_TYPE_MEM edges_size_type>(graph));
+ type,
+ typename type::edge_descriptor,
+ typename type::edges_size_type>(graph));
}
- template <BOOST_GRID_GRAPH_TEMPLATE_PARAMS>
friend inline grid_graph_reverse_edge_map<
- BOOST_GRID_GRAPH_TYPE_MEM edge_descriptor>
- get(edge_reverse_t, const BOOST_GRID_GRAPH_TYPE& graph) {
+ typename type::edge_descriptor>
+ get(edge_reverse_t, const type& graph) {
return (grid_graph_reverse_edge_map<
- BOOST_GRID_GRAPH_TYPE_MEM edge_descriptor>());
+ typename type::edge_descriptor>());
}
template<typename Graph,
typename Descriptor,
typename Index>
- friend inline Index
- get(const grid_graph_index_map<Graph, Descriptor, Index>& index_map,
- const typename grid_graph_index_map<Graph, Descriptor, Index>::key_type& key)
- {
- return (index_map[key]);
- }
-
- template<typename Graph,
- typename Descriptor,
- typename Index>
friend struct grid_graph_index_map;
template<typename Descriptor>
- friend inline Descriptor
- get(const grid_graph_reverse_edge_map<Descriptor>& rev_map,
- const typename grid_graph_reverse_edge_map<Descriptor>::key_type& key)
- {
- return (rev_map[key]);
- }
-
- template<typename Descriptor>
friend struct grid_graph_reverse_edge_map;
}; // grid_graph
@@ -1036,8 +1009,6 @@ namespace boost {
} // namespace boost
#undef BOOST_GRID_GRAPH_TYPE
-#undef BOOST_GRID_GRAPH_TYPE_TD
-#undef BOOST_GRID_GRAPH_TYPE_MEM
#undef BOOST_GRID_GRAPH_TEMPLATE_PARAMS
#undef BOOST_GRID_GRAPH_TRAITS_T