//======================================================================= | |
// Copyright 2007 Aaron Windsor | |
// | |
// 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) | |
//======================================================================= | |
#ifndef __ADD_EDGE_VISITORS_HPP__ | |
#define __ADD_EDGE_VISITORS_HPP__ | |
#include <boost/property_map/property_map.hpp> | |
namespace boost | |
{ | |
struct default_add_edge_visitor | |
{ | |
template <typename Graph, typename Vertex> | |
void visit_vertex_pair(Vertex u, Vertex v, Graph& g) | |
{ | |
add_edge(u,v,g); | |
} | |
}; | |
template<typename EdgeIndexMap> | |
struct edge_index_update_visitor | |
{ | |
typedef typename | |
property_traits<EdgeIndexMap>::value_type edge_index_value_t; | |
edge_index_update_visitor(EdgeIndexMap em, | |
edge_index_value_t next_index_available | |
) : | |
m_em(em), | |
m_next_index(next_index_available) | |
{} | |
template <typename Graph, typename Vertex> | |
void visit_vertex_pair(Vertex u, Vertex v, Graph& g) | |
{ | |
typedef typename graph_traits<Graph>::edge_descriptor edge_t; | |
std::pair<edge_t, bool> return_value = add_edge(u,v,g); | |
if (return_value.second) | |
put( m_em, return_value.first, m_next_index++); | |
} | |
private: | |
EdgeIndexMap m_em; | |
edge_index_value_t m_next_index; | |
}; | |
} // namespace boost | |
#endif //__ADD_EDGE_VISITORS_HPP__ |