From deee18678932bb72d7dfe03412c6d51a3c353794 Mon Sep 17 00:00:00 2001 From: Thien Hoang Date: Thu, 20 Jun 2019 18:12:00 +0700 Subject: [PATCH] Remove explicit specialization for find_spanning_tree --- .../CGAL/Shortest_noncontractible_cycle.h | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/Surface_mesh_topology/include/CGAL/Shortest_noncontractible_cycle.h b/Surface_mesh_topology/include/CGAL/Shortest_noncontractible_cycle.h index 88400983cfe..e6617e69f54 100644 --- a/Surface_mesh_topology/include/CGAL/Shortest_noncontractible_cycle.h +++ b/Surface_mesh_topology/include/CGAL/Shortest_noncontractible_cycle.h @@ -106,6 +106,14 @@ public: private: + void find_spanning_tree(Dart_handle root, Dart_container& spanning_tree, + std::vector& distance_from_root, std::vector& trace_index) { + if (std::is_same::value) + find_BFS_tree(root, spanning_tree, distance_from_root, trace_index); + else + find_Dijkstra_tree(root, spanning_tree, distance_from_root, trace_index); + } + struct Dijkstra_comparator { Dijkstra_comparator(const std::vector& distance_from_root) : m_distance(distance_from_root) {} bool operator()(const int x, const int y) const { return m_distance[x] > m_distance[y]; } @@ -114,8 +122,7 @@ private: }; /// Create a spanning tree using Dijkstra - template - void find_spanning_tree(Dart_handle root, Dart_container& spanning_tree, + void find_Dijkstra_tree(Dart_handle root, Dart_container& spanning_tree, std::vector& distance_from_root, std::vector& trace_index) { // Preparation Dijkstra_comparator dc (distance_from_root); @@ -170,9 +177,8 @@ private: } /// Create a spanning tree using BFS - template <> - void find_spanning_tree(Dart_handle root, Dart_container& spanning_tree, - std::vector& distance_from_root, std::vector& trace_index) { + void find_BFS_tree(Dart_handle root, Dart_container& spanning_tree, + std::vector& distance_from_root, std::vector& trace_index) { // Preparation std::queue q; int vertex_index = 0; @@ -297,7 +303,7 @@ private: m_trace_index.clear(); for (auto it = m_gmap.template one_dart_per_cell<0>().begin(), itend = m_gmap.template one_dart_per_cell<0>().end(); it != itend; ++it) m_gmap.template info<0>(it) = -1; - find_spanning_tree(root, m_spanning_tree, m_distance_from_root, m_trace_index); + find_spanning_tree(root, m_spanning_tree, m_distance_from_root, m_trace_index); find_noncon_edges(m_spanning_tree, m_noncon_edges); // std::cerr << "Done find_noncon_edges. noncon_edges.size() = " << m_noncon_edges.size() << '\n';