@@ -35,18 +35,13 @@ pure module function topological_sort(dag) result(order)
3535
3636 block
3737 type (searched_and_ordered_t) searched_and_ordered
38- integer , allocatable :: discovered(:)
3938 integer v
4039
41- allocate (discovered(0 ))
4240 searched_and_ordered = searched_and_ordered_t(s = [integer :: ], o = [integer :: ])
4341
4442 do v = 1 , size (dag% vertices)
45- if (.not. any (v == searched_and_ordered% s)) then
43+ if (.not. any (v == searched_and_ordered% s)) &
4644 searched_and_ordered = depth_first_search(v, [integer :: ], searched_and_ordered% o)
47- discovered = [discovered, searched_and_ordered% s]
48- searched_and_ordered% s= discovered
49- end if
5045 end do
5146 order = searched_and_ordered% o
5247 end block
@@ -60,22 +55,21 @@ pure recursive function depth_first_search(v, d, o) result(hybrid)
6055
6156 call assert(.not. any (v == d), " depth_first_search: cycle detected" , intrinsic_array_t([v,d]))
6257
63- block
64- integer , allocatable :: dependencies(:)
65- integer w
66-
67- hybrid = searched_and_ordered_t(s = [integer :: ], o = o)
68- dependencies = dag% depends_on(v)
69-
70- do concurrent(w = 1 :size (dependencies))
71- associate(w_dependencies = > dependencies(w))
72- if (.not. any (w_dependencies == hybrid% s)) hybrid = depth_first_search(w_dependencies, [d, v], hybrid% o)
73- end associate
74- end do
75-
76- if (.not. any (v == hybrid% o)) hybrid% o = [v, hybrid% o]
77- hybrid = searched_and_ordered_t(s = [v, hybrid% s], o = hybrid% o)
78- end block
58+ hybrid = searched_and_ordered_t(s = [integer :: ], o = o)
59+
60+ associate(dependencies = > dag% depends_on(v))
61+ block
62+ integer w
63+ do concurrent(w = 1 :size (dependencies))
64+ associate(w_dependencies = > dependencies(w))
65+ if (.not. any (w_dependencies == hybrid% s)) hybrid = depth_first_search(w_dependencies, [d, v], hybrid% o)
66+ end associate
67+ end do
68+ end block
69+ end associate
70+
71+ if (.not. any (v == hybrid% o)) hybrid% o = [v, hybrid% o]
72+ hybrid = searched_and_ordered_t(s = [v, hybrid% s], o = hybrid% o)
7973
8074 end function
8175
0 commit comments