]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/boost/graph/smallest_last_ordering.hpp
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / boost / boost / graph / smallest_last_ordering.hpp
index 210bb532ead260f7e261796a18787468a5ea3500..88af0ea931c5ed94272f71de8459a117c846d1df 100644 (file)
@@ -8,12 +8,10 @@
 //=======================================================================
 
 // Revision History:
-//   17 March 2006: Fixed a bug: when updating the degree a vertex 
-//                  could be moved to a wrong bucket. (Roman Dementiev) 
+//   17 March 2006: Fixed a bug: when updating the degree a vertex
+//                  could be moved to a wrong bucket. (Roman Dementiev)
 //
 
-
-
 #ifndef BOOST_SMALLEST_LAST_VERTEX_ORDERING_HPP
 #define BOOST_SMALLEST_LAST_VERTEX_ORDERING_HPP
 /*
 #include <boost/graph/properties.hpp>
 #include <boost/pending/bucket_sorter.hpp>
 
-namespace boost {
+namespace boost
+{
 
-  template <class VertexListGraph, class Order, class Degree, class Marker>
-  void 
-  smallest_last_vertex_ordering(const VertexListGraph& G, Order order, 
-                                Degree degree, Marker marker) {
-    typedef typename boost::graph_traits<VertexListGraph> GraphTraits;
+template < class VertexListGraph, class Order, class Degree, class Marker >
+void smallest_last_vertex_ordering(
+    const VertexListGraph& G, Order order, Degree degree, Marker marker)
+{
+    typedef typename boost::graph_traits< VertexListGraph > GraphTraits;
     typedef typename GraphTraits::vertex_descriptor Vertex;
-    //typedef typename GraphTraits::size_type size_type;
+    // typedef typename GraphTraits::size_type size_type;
     typedef std::size_t size_type;
-    
+
     const size_type num = num_vertices(G);
-    
-    typedef typename boost::property_map<VertexListGraph, vertex_index_t>::type ID;
-    typedef bucket_sorter<size_type, Vertex, Degree, ID> BucketSorter;
-    
-    BucketSorter degree_bucket_sorter(num, num, degree,  
-                                      get(vertex_index,G));
-
-    smallest_last_vertex_ordering(G, order, degree, marker, degree_bucket_sorter);
-  }
-
-  template <class VertexListGraph, class Order, class Degree, 
-            class Marker, class BucketSorter>
-  void 
-  smallest_last_vertex_ordering(const VertexListGraph& G, Order order, 
-                                Degree degree, Marker marker,
-                                BucketSorter& degree_buckets) {
-    typedef typename boost::graph_traits<VertexListGraph> GraphTraits;
+
+    typedef
+        typename boost::property_map< VertexListGraph, vertex_index_t >::type
+            ID;
+    typedef bucket_sorter< size_type, Vertex, Degree, ID > BucketSorter;
+
+    BucketSorter degree_bucket_sorter(num, num, degree, get(vertex_index, G));
+
+    smallest_last_vertex_ordering(
+        G, order, degree, marker, degree_bucket_sorter);
+}
+
+template < class VertexListGraph, class Order, class Degree, class Marker,
+    class BucketSorter >
+void smallest_last_vertex_ordering(const VertexListGraph& G, Order order,
+    Degree degree, Marker marker, BucketSorter& degree_buckets)
+{
+    typedef typename boost::graph_traits< VertexListGraph > GraphTraits;
     typedef typename GraphTraits::vertex_descriptor Vertex;
-    //typedef typename GraphTraits::size_type size_type;
+    // typedef typename GraphTraits::size_type size_type;
     typedef std::size_t size_type;
 
     const size_type num = num_vertices(G);
-    
+
     typename GraphTraits::vertex_iterator v, vend;
-    for (boost::tie(v, vend) = vertices(G); v != vend; ++v) {
-      put(marker, *v, num);
-      put(degree, *v, out_degree(*v, G));
-      degree_buckets.push(*v);
+    for (boost::tie(v, vend) = vertices(G); v != vend; ++v)
+    {
+        put(marker, *v, num);
+        put(degree, *v, out_degree(*v, G));
+        degree_buckets.push(*v);
     }
+
     size_type minimum_degree = 0;
     size_type current_order = num - 1;
-    
-    while ( 1 ) {
-      typedef typename BucketSorter::stack MDStack;
-      MDStack minimum_degree_stack = degree_buckets[minimum_degree];
-      while (minimum_degree_stack.empty())
-        minimum_degree_stack = degree_buckets[++minimum_degree];
-      
-      Vertex node = minimum_degree_stack.top();
-      put(order, current_order, node);
-      
-      if ( current_order == 0 ) //find all vertices
-        break;
-      
-      minimum_degree_stack.pop();
-      put(marker, node, 0); //node has been ordered.
-      
-      typename GraphTraits::adjacency_iterator v, vend;
-      for (boost::tie(v,vend) = adjacent_vertices(node, G); v != vend; ++v)
-        
-        if ( get(marker,*v) > current_order ) { //*v is unordered vertex
-          put(marker, *v, current_order);  //mark the columns adjacent to node
-
-          //delete *v from the bucket sorter         
-          degree_buckets.remove(*v);
-          //It is possible minimum degree goes down
-          //Here we keep tracking it.
-          put(degree, *v, get(degree, *v) - 1); 
-          BOOST_USING_STD_MIN();
-          minimum_degree = min BOOST_PREVENT_MACRO_SUBSTITUTION(minimum_degree, get(degree, *v)); 
-          
-          //reinsert *v in the bucket sorter with the new degree
-          degree_buckets.push(*v);
-        }
-
-      current_order--;
+
+    while (1)
+    {
+        typedef typename BucketSorter::stack MDStack;
+        MDStack minimum_degree_stack = degree_buckets[minimum_degree];
+        while (minimum_degree_stack.empty())
+            minimum_degree_stack = degree_buckets[++minimum_degree];
+
+        Vertex node = minimum_degree_stack.top();
+        put(order, current_order, node);
+
+        if (current_order == 0) // find all vertices
+            break;
+
+        minimum_degree_stack.pop();
+        put(marker, node, 0); // node has been ordered.
+
+        typename GraphTraits::adjacency_iterator v, vend;
+        for (boost::tie(v, vend) = adjacent_vertices(node, G); v != vend; ++v)
+
+            if (get(marker, *v) > current_order)
+            { //*v is unordered vertex
+                put(marker, *v,
+                    current_order); // mark the columns adjacent to node
+
+                // delete *v from the bucket sorter
+                degree_buckets.remove(*v);
+
+                // It is possible minimum degree goes down
+                // Here we keep tracking it.
+                put(degree, *v, get(degree, *v) - 1);
+                BOOST_USING_STD_MIN();
+                minimum_degree = min BOOST_PREVENT_MACRO_SUBSTITUTION(
+                    minimum_degree, get(degree, *v));
+
+                // reinsert *v in the bucket sorter with the new degree
+                degree_buckets.push(*v);
+            }
+
+        current_order--;
     }
-    
-    //at this point, order[i] = v_i;
-  }
-  
-  template <class VertexListGraph, class Order>
-  void 
-  smallest_last_vertex_ordering(const VertexListGraph& G, Order order) {
-    typedef typename graph_traits<VertexListGraph>::vertex_descriptor vertex_descriptor;
-    typedef typename graph_traits<VertexListGraph>::degree_size_type degree_size_type;
+
+    // at this point, order[i] = v_i;
+}
+
+template < class VertexListGraph, class Order >
+void smallest_last_vertex_ordering(const VertexListGraph& G, Order order)
+{
+    typedef typename graph_traits< VertexListGraph >::vertex_descriptor
+        vertex_descriptor;
+    typedef typename graph_traits< VertexListGraph >::degree_size_type
+        degree_size_type;
     smallest_last_vertex_ordering(G, order,
-                                  make_shared_array_property_map(num_vertices(G), degree_size_type(0), get(vertex_index, G)),
-                                  make_shared_array_property_map(num_vertices(G), (std::size_t)(0), get(vertex_index, G)));
-  }
-
-  template <class VertexListGraph>
-  std::vector<typename graph_traits<VertexListGraph>::vertex_descriptor>
-  smallest_last_vertex_ordering(const VertexListGraph& G) {
-    std::vector<typename graph_traits<VertexListGraph>::vertex_descriptor> o(num_vertices(G));
-    smallest_last_vertex_ordering(G, make_iterator_property_map(o.begin(), typed_identity_property_map<std::size_t>()));
+        make_shared_array_property_map(
+            num_vertices(G), degree_size_type(0), get(vertex_index, G)),
+        make_shared_array_property_map(
+            num_vertices(G), (std::size_t)(0), get(vertex_index, G)));
+}
+
+template < class VertexListGraph >
+std::vector< typename graph_traits< VertexListGraph >::vertex_descriptor >
+smallest_last_vertex_ordering(const VertexListGraph& G)
+{
+    std::vector< typename graph_traits< VertexListGraph >::vertex_descriptor >
+        o(num_vertices(G));
+    smallest_last_vertex_ordering(G,
+        make_iterator_property_map(
+            o.begin(), typed_identity_property_map< std::size_t >()));
     return o;
-  }
+}
 }
 
 #endif
-