1- #
2- # SweepIterator
3- #
4-
5- mutable struct SweepIterator
6- sweep_kws
7- region_iter
8- which_sweep:: Int
9- end
10-
11- problem (S:: SweepIterator ) = problem (S. region_iter)
12-
13- Base. length (S:: SweepIterator ) = length (S. sweep_kws)
14-
15- function Base. iterate (S:: SweepIterator , which= nothing )
16- if isnothing (which)
17- sweep_kws_state = iterate (S. sweep_kws)
18- else
19- sweep_kws_state = iterate (S. sweep_kws, which)
20- end
21- isnothing (sweep_kws_state) && return nothing
22- current_sweep_kws, next = sweep_kws_state
23-
24- if ! isnothing (which)
25- S. region_iter = region_iterator (
26- problem (S. region_iter); sweep= S. which_sweep, current_sweep_kws...
27- )
28- end
29- S. which_sweep += 1
30- return S. region_iter, next
31- end
32-
33- function sweep_iterator (problem, sweep_kws)
34- region_iter = region_iterator (problem; sweep= 1 , first (sweep_kws)... )
35- return SweepIterator (sweep_kws, region_iter, 1 )
36- end
37-
38- function sweep_iterator (problem, nsweeps:: Integer ; sweep_kws... )
39- return sweep_iterator (problem, Iterators. repeated (sweep_kws, nsweeps))
40- end
41-
421#
432# RegionIterator
443#
@@ -54,10 +13,14 @@ current_region_plan(R::RegionIterator) = R.region_plan[R.which_region]
5413current_region (R:: RegionIterator ) = current_region_plan (R)[1 ]
5514region_kwargs (R:: RegionIterator ) = current_region_plan (R)[2 ]
5615function previous_region (R:: RegionIterator )
57- R. which_region== 1 ? nothing : R. region_plan[R. which_region - 1 ][1 ]
16+ return R. which_region == 1 ? nothing : R. region_plan[R. which_region - 1 ][1 ]
5817end
5918function next_region (R:: RegionIterator )
60- R. which_region== length (R. region_plan) ? nothing : R. region_plan[R. which_region + 1 ][1 ]
19+ return if R. which_region == length (R. region_plan)
20+ nothing
21+ else
22+ R. region_plan[R. which_region + 1 ][1 ]
23+ end
6124end
6225is_last_region (R:: RegionIterator ) = isnothing (next_region (R))
6326
9861function region_plan (problem; kws... )
9962 return euler_sweep (state (problem); kws... )
10063end
64+
65+ #
66+ # SweepIterator
67+ #
68+
69+ mutable struct SweepIterator{Problem}
70+ sweep_kws
71+ region_iter:: RegionIterator{Problem}
72+ which_sweep:: Int
73+ end
74+
75+ problem (S:: SweepIterator ) = problem (S. region_iter)
76+
77+ Base. length (S:: SweepIterator ) = length (S. sweep_kws)
78+
79+ function Base. iterate (S:: SweepIterator , which= nothing )
80+ if isnothing (which)
81+ sweep_kws_state = iterate (S. sweep_kws)
82+ else
83+ sweep_kws_state = iterate (S. sweep_kws, which)
84+ end
85+ isnothing (sweep_kws_state) && return nothing
86+ current_sweep_kws, next = sweep_kws_state
87+
88+ if ! isnothing (which)
89+ S. region_iter = region_iterator (
90+ problem (S. region_iter); sweep= S. which_sweep, current_sweep_kws...
91+ )
92+ end
93+ S. which_sweep += 1
94+ return S. region_iter, next
95+ end
96+
97+ function sweep_iterator (problem, sweep_kws)
98+ region_iter = region_iterator (problem; sweep= 1 , first (sweep_kws)... )
99+ return SweepIterator (sweep_kws, region_iter, 1 )
100+ end
101+
102+ function sweep_iterator (problem, nsweeps:: Integer ; sweep_kws... )
103+ return sweep_iterator (problem, Iterators. repeated (sweep_kws, nsweeps))
104+ end
0 commit comments