LCOV - code coverage report
Current view: top level - usr/include/boost/graph - topological_sort.hpp (source / functions) Hit Total Coverage
Test: ROSE Lines: 0 7 0.0 %
Date: 2022-12-08 13:48:47 Functions: 0 0 -
Legend: Lines: hit not hit

          Line data    Source code
       1             : //
       2             : //=======================================================================
       3             : // Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
       4             : // Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
       5             : //
       6             : // Distributed under the Boost Software License, Version 1.0. (See
       7             : // accompanying file LICENSE_1_0.txt or copy at
       8             : // http://www.boost.org/LICENSE_1_0.txt)
       9             : //=======================================================================
      10             : //
      11             : #ifndef BOOST_GRAPH_TOPOLOGICAL_SORT_HPP
      12             : #define BOOST_GRAPH_TOPOLOGICAL_SORT_HPP
      13             : 
      14             : #include <boost/config.hpp>
      15             : #include <boost/property_map/property_map.hpp>
      16             : #include <boost/graph/depth_first_search.hpp>
      17             : #include <boost/graph/visitors.hpp>
      18             : #include <boost/graph/exception.hpp>
      19             : #include <boost/throw_exception.hpp>
      20             : 
      21             : namespace boost { 
      22             : 
      23             : 
      24             :   // Topological sort visitor
      25             :   //
      26             :   // This visitor merely writes the linear ordering into an
      27             :   // OutputIterator. The OutputIterator could be something like an
      28             :   // ostream_iterator, or it could be a back/front_insert_iterator.
      29             :   // Note that if it is a back_insert_iterator, the recorded order is
      30             :   // the reverse topological order. On the other hand, if it is a
      31             :   // front_insert_iterator, the recorded order is the topological
      32             :   // order.
      33             :   //
      34             :   template <typename OutputIterator>
      35             :   struct topo_sort_visitor : public dfs_visitor<>
      36             :   {
      37           0 :     topo_sort_visitor(OutputIterator _iter)
      38           0 :       : m_iter(_iter) { }
      39             :     
      40             :     template <typename Edge, typename Graph>
      41             :     void back_edge(const Edge&, Graph&) { BOOST_THROW_EXCEPTION(not_a_dag()); }
      42             :     
      43             :     template <typename Vertex, typename Graph> 
      44           0 :     void finish_vertex(const Vertex& u, Graph&) { *m_iter++ = u; }
      45             :     
      46             :     OutputIterator m_iter;
      47             :   };
      48             : 
      49             : 
      50             :   // Topological Sort
      51             :   //
      52             :   // The topological sort algorithm creates a linear ordering
      53             :   // of the vertices such that if edge (u,v) appears in the graph,
      54             :   // then u comes before v in the ordering. The graph must
      55             :   // be a directed acyclic graph (DAG). The implementation
      56             :   // consists mainly of a call to depth-first search.
      57             :   //
      58             : 
      59             :   template <typename VertexListGraph, typename OutputIterator,
      60             :     typename P, typename T, typename R>
      61           0 :   void topological_sort(VertexListGraph& g, OutputIterator result,
      62             :                         const bgl_named_params<P, T, R>& params)
      63             :   {
      64             :     typedef topo_sort_visitor<OutputIterator> TopoVisitor;
      65           0 :     depth_first_search(g, params.visitor(TopoVisitor(result)));
      66             :   }
      67             : 
      68             :   template <typename VertexListGraph, typename OutputIterator>
      69           0 :   void topological_sort(VertexListGraph& g, OutputIterator result)
      70             :   {
      71           0 :     topological_sort(g, result, 
      72             :                      bgl_named_params<int, buffer_param_t>(0)); // bogus
      73             :   }
      74             : 
      75             : } // namespace boost
      76             : 
      77             : #endif /*BOOST_GRAPH_TOPOLOGICAL_SORT_H*/

Generated by: LCOV version 1.14