104 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| //=======================================================================
 | |
| // Copyright 2002 Indiana University.
 | |
| // Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
 | |
| //
 | |
| // 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 BOOST_ADJACENCY_ITERATOR_HPP
 | |
| #define BOOST_ADJACENCY_ITERATOR_HPP
 | |
| 
 | |
| #include <boost/detail/iterator.hpp>
 | |
| #include <boost/iterator/iterator_adaptor.hpp>
 | |
| #include <boost/graph/graph_traits.hpp>
 | |
| 
 | |
| namespace boost
 | |
| {
 | |
| 
 | |
|   template <class Graph, class Vertex, class OutEdgeIter, class Difference>
 | |
|   struct adjacency_iterator
 | |
|     : iterator_adaptor<
 | |
|           adjacency_iterator<Graph,Vertex,OutEdgeIter,Difference>
 | |
|         , OutEdgeIter
 | |
|         , Vertex
 | |
|         , use_default
 | |
|         , Vertex
 | |
|         , Difference
 | |
|       >
 | |
|   {
 | |
|       typedef iterator_adaptor<
 | |
|           adjacency_iterator<Graph,Vertex,OutEdgeIter,Difference>
 | |
|         , OutEdgeIter
 | |
|         , Vertex
 | |
|         , use_default
 | |
|         , Vertex
 | |
|         , Difference
 | |
|       > super_t;
 | |
|       
 | |
|       inline adjacency_iterator() {}
 | |
|       inline adjacency_iterator(OutEdgeIter const& i, const Graph* g) : super_t(i), m_g(g) { }
 | |
| 
 | |
|       inline Vertex
 | |
|       dereference() const
 | |
|         { return target(*this->base(), *m_g); }
 | |
| 
 | |
|       const Graph* m_g;
 | |
|   };
 | |
| 
 | |
|   template <class Graph,
 | |
|             class Vertex = typename graph_traits<Graph>::vertex_descriptor,
 | |
|             class OutEdgeIter=typename graph_traits<Graph>::out_edge_iterator>
 | |
|   class adjacency_iterator_generator
 | |
|   {
 | |
|     typedef typename boost::detail::iterator_traits<OutEdgeIter>
 | |
|       ::difference_type difference_type;
 | |
|   public:
 | |
|       typedef adjacency_iterator<Graph,Vertex,OutEdgeIter,difference_type> type;
 | |
|   };
 | |
| 
 | |
|   template <class Graph, class Vertex, class InEdgeIter, class Difference>
 | |
|   struct inv_adjacency_iterator
 | |
|     : iterator_adaptor<
 | |
|           inv_adjacency_iterator<Graph,Vertex,InEdgeIter,Difference>
 | |
|         , InEdgeIter
 | |
|         , Vertex
 | |
|         , use_default
 | |
|         , Vertex
 | |
|         , Difference
 | |
|       >
 | |
|     {
 | |
|       typedef iterator_adaptor<
 | |
|                   inv_adjacency_iterator<Graph,Vertex,InEdgeIter,Difference>
 | |
|                 , InEdgeIter
 | |
|                 , Vertex
 | |
|                 , use_default
 | |
|                 , Vertex
 | |
|                 , Difference
 | |
|               > super_t;
 | |
| 
 | |
|       inline inv_adjacency_iterator() { }
 | |
|       inline inv_adjacency_iterator(InEdgeIter const& i, const Graph* g) : super_t(i), m_g(g) { }
 | |
| 
 | |
|       inline Vertex
 | |
|       dereference() const
 | |
|         { return source(*this->base(), *m_g); }
 | |
| 
 | |
|       const Graph* m_g;
 | |
|     };
 | |
| 
 | |
|   template <class Graph,
 | |
|             class Vertex = typename graph_traits<Graph>::vertex_descriptor,
 | |
|             class InEdgeIter = typename graph_traits<Graph>::in_edge_iterator>
 | |
|   class inv_adjacency_iterator_generator {
 | |
|     typedef typename boost::detail::iterator_traits<InEdgeIter>
 | |
|       ::difference_type difference_type;
 | |
|   public:
 | |
|       typedef inv_adjacency_iterator<Graph, Vertex, InEdgeIter, difference_type> type;
 | |
|   };
 | |
| 
 | |
| } // namespace boost
 | |
| 
 | |
| #endif // BOOST_DETAIL_ADJACENCY_ITERATOR_HPP
 | 
