1010namespace gl ::algorithm {
1111
1212template <
13- type_traits::c_alg_return_type AlgReturnType = algorithm::default_return ,
13+ result_discriminator ResultDiscriminator = algorithm::ret ,
1414 type_traits::c_graph GraphType,
1515 type_traits::c_optional_vertex_callback<GraphType, void > PreVisitCallback =
1616 algorithm::empty_callback,
1717 type_traits::c_optional_vertex_callback<GraphType, void > PostVisitCallback =
1818 algorithm::empty_callback>
19- impl::alg_return_type<AlgReturnType , predecessors_descriptor> depth_first_search (
19+ impl::alg_return_type<ResultDiscriminator , predecessors_descriptor> depth_first_search (
2020 const GraphType& graph,
2121 const std::optional<types::id_type>& root_vertex_id_opt = no_root_vertex,
2222 const PreVisitCallback& pre_visit = {},
@@ -28,14 +28,14 @@ impl::alg_return_type<AlgReturnType, predecessors_descriptor> depth_first_search
2828 std::vector<bool > visited (graph.n_vertices (), false );
2929 std::vector<types::id_type> sources (graph.n_vertices ());
3030
31- auto pd = impl::init_return_value<AlgReturnType , predecessors_descriptor>(graph);
31+ auto pd = impl::init_return_value<ResultDiscriminator , predecessors_descriptor>(graph);
3232
3333 if (root_vertex_id_opt) {
3434 impl::dfs (
3535 graph,
3636 graph.get_vertex (root_vertex_id_opt.value ()),
3737 impl::default_visit_vertex_predicate<GraphType>(visited),
38- impl::default_visit_callback<GraphType, AlgReturnType >(visited, pd),
38+ impl::default_visit_callback<GraphType, ResultDiscriminator >(visited, pd),
3939 impl::default_enqueue_vertex_predicate<GraphType>(visited),
4040 pre_visit,
4141 post_visit
@@ -47,25 +47,25 @@ impl::alg_return_type<AlgReturnType, predecessors_descriptor> depth_first_search
4747 graph,
4848 root_vertex,
4949 impl::default_visit_vertex_predicate<GraphType>(visited),
50- impl::default_visit_callback<GraphType, AlgReturnType >(visited, pd),
50+ impl::default_visit_callback<GraphType, ResultDiscriminator >(visited, pd),
5151 impl::default_enqueue_vertex_predicate<GraphType>(visited),
5252 pre_visit,
5353 post_visit
5454 );
5555 }
5656
57- if constexpr (not type_traits::c_alg_no_return_type<AlgReturnType> )
57+ if constexpr (ResultDiscriminator == algorithm::ret )
5858 return pd;
5959}
6060
6161template <
62- type_traits::c_alg_return_type AlgReturnType = algorithm::default_return ,
62+ result_discriminator ResultDiscriminator = algorithm::ret ,
6363 type_traits::c_graph GraphType,
6464 type_traits::c_optional_vertex_callback<GraphType, void > PreVisitCallback =
6565 algorithm::empty_callback,
6666 type_traits::c_optional_vertex_callback<GraphType, void > PostVisitCallback =
6767 algorithm::empty_callback>
68- impl::alg_return_type<AlgReturnType , predecessors_descriptor> recursive_depth_first_search (
68+ impl::alg_return_type<ResultDiscriminator , predecessors_descriptor> recursive_depth_first_search (
6969 const GraphType& graph,
7070 const std::optional<types::id_type>& root_vertex_id_opt = no_root_vertex,
7171 const PreVisitCallback& pre_visit = {},
@@ -77,7 +77,7 @@ impl::alg_return_type<AlgReturnType, predecessors_descriptor> recursive_depth_fi
7777 std::vector<bool > visited (graph.n_vertices (), false );
7878 std::vector<types::id_type> sources (graph.n_vertices ());
7979
80- auto pd = impl::init_return_value<AlgReturnType , predecessors_descriptor>(graph);
80+ auto pd = impl::init_return_value<ResultDiscriminator , predecessors_descriptor>(graph);
8181
8282 if (root_vertex_id_opt) {
8383 const auto root_id = root_vertex_id_opt.value ();
@@ -86,7 +86,7 @@ impl::alg_return_type<AlgReturnType, predecessors_descriptor> recursive_depth_fi
8686 graph.get_vertex (root_id),
8787 root_id,
8888 impl::default_visit_vertex_predicate<GraphType>(visited),
89- impl::default_visit_callback<GraphType, AlgReturnType >(visited, pd),
89+ impl::default_visit_callback<GraphType, ResultDiscriminator >(visited, pd),
9090 impl::default_enqueue_vertex_predicate<GraphType>(visited),
9191 pre_visit,
9292 post_visit
@@ -99,14 +99,14 @@ impl::alg_return_type<AlgReturnType, predecessors_descriptor> recursive_depth_fi
9999 root_vertex,
100100 root_vertex.id (),
101101 impl::default_visit_vertex_predicate<GraphType>(visited),
102- impl::default_visit_callback<GraphType, AlgReturnType >(visited, pd),
102+ impl::default_visit_callback<GraphType, ResultDiscriminator >(visited, pd),
103103 impl::default_enqueue_vertex_predicate<GraphType>(visited),
104104 pre_visit,
105105 post_visit
106106 );
107107 }
108108
109- if constexpr (not type_traits::c_alg_no_return_type<AlgReturnType> )
109+ if constexpr (ResultDiscriminator == algorithm::ret )
110110 return pd;
111111}
112112
0 commit comments