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
 |