@@ -17,32 +17,32 @@ pub fn nbr<A: Copy + 'static>(mut vm: RoundVM, expr: impl Fn(RoundVM) -> (RoundV
17
17
}
18
18
19
19
pub fn rep < A : Copy + ' static > ( mut vm : RoundVM , init : impl Fn ( ) -> A , fun : impl Fn ( RoundVM , A ) -> ( RoundVM , A ) ) -> ( RoundVM , A ) {
20
- println ! ( "rep: Init nbrs: {:?}" , vm. aligned_neighbours( ) ) ;
21
20
vm. nest_in ( Rep ( vm. index ( ) . clone ( ) ) ) ;
22
- let prev = vm. previous_round_val ( ) . unwrap_or ( & init ( ) ) . clone ( ) ;
23
- let ( mut vm_, val) = locally ( vm, |vm1| fun ( vm1, prev) ) ;
21
+ let ( mut vm_, val) = locally ( vm, |vm1| {
22
+ let prev = vm1. previous_round_val ( ) . unwrap_or ( & init ( ) ) . clone ( ) ;
23
+ fun ( vm1, prev)
24
+ } ) ;
24
25
let res = vm_. nest_write ( vm_. unless_folding_on_others ( ) , val) ;
25
26
vm_. nest_out ( true ) ;
26
- println ! ( "rep: End nbrs: {:?}" , vm_. aligned_neighbours( ) ) ;
27
27
( vm_, res)
28
28
}
29
29
30
30
pub fn foldhood < A : Copy + ' static + Debug > ( mut vm : RoundVM , init : impl Fn ( ) -> A , aggr : impl Fn ( A , A ) -> A , expr : impl Fn ( RoundVM ) -> ( RoundVM , A ) ) -> ( RoundVM , A ) {
31
31
// here we do nest_in after retrieving the neighbours because otherwise it would disalign the device
32
32
let nbrs = vm. aligned_neighbours ( ) . clone ( ) ;
33
- println ! ( "foldhood: nbrs: {:?}" , nbrs) ;
34
33
vm. nest_in ( FoldHood ( vm. index ( ) . clone ( ) ) ) ;
35
- let ( mut vm_, preval) = expr ( vm) ;
34
+ let ( vm_, preval) = expr ( vm) ;
35
+ let ( mut vm__, local_init) = locally ( vm_, |vm_| ( vm_, init ( ) ) ) ;
36
36
let nbrfield =
37
37
nbrs. iter ( )
38
38
. map ( |id| {
39
- let res= vm_ . folded_eval ( || preval, id. clone ( ) ) . unwrap_or ( init ( ) ) ;
39
+ let res= vm__ . folded_eval ( || preval, id. clone ( ) ) . unwrap_or ( local_init ) ;
40
40
res
41
41
} ) ;
42
- let val = nbrfield. fold ( init ( ) , |x, y| aggr ( x, y) ) ;
43
- let res = vm_ . nest_write ( true , val) ;
44
- vm_ . nest_out ( true ) ;
45
- ( vm_ , res)
42
+ let val = nbrfield. fold ( local_init , |x, y| aggr ( x, y) ) ;
43
+ let res = vm__ . nest_write ( true , val) ;
44
+ vm__ . nest_out ( true ) ;
45
+ ( vm__ , res)
46
46
}
47
47
48
48
pub fn branch < A : Copy + ' static > ( mut vm : RoundVM , cond : impl Fn ( ) -> bool , thn : impl Fn ( RoundVM ) -> ( RoundVM , A ) , els : impl Fn ( RoundVM ) -> ( RoundVM , A ) ) -> ( RoundVM , A ) {
0 commit comments