1
1
use std:: time:: Instant ;
2
2
3
- use crate :: output :: Output ;
4
- use facts :: FactTypes ;
3
+ use crate :: facts :: FactTypes ;
4
+ use crate :: output :: { InitializationContext , Output } ;
5
5
6
6
use datafrog:: { Iteration , Relation , RelationLeaper } ;
7
7
8
8
pub ( super ) fn init_var_maybe_initialized_on_exit < T : FactTypes > (
9
- child : Vec < ( T :: Path , T :: Path ) > ,
10
- path_belongs_to_var : Vec < ( T :: Path , T :: Variable ) > ,
11
- initialized_at : Vec < ( T :: Path , T :: Point ) > ,
12
- moved_out_at : Vec < ( T :: Path , T :: Point ) > ,
13
- path_accessed_at : Vec < ( T :: Path , T :: Point ) > ,
14
- cfg_edge : & [ ( T :: Point , T :: Point ) ] ,
9
+ ctx : InitializationContext < T > ,
10
+ cfg_edge : & Relation < ( T :: Point , T :: Point ) > ,
15
11
output : & mut Output < T > ,
16
- ) -> Vec < ( T :: Variable , T :: Point ) > {
17
- let computation_start = Instant :: now ( ) ;
12
+ ) -> Relation < ( T :: Variable , T :: Point ) > {
13
+ let timer = Instant :: now ( ) ;
18
14
let mut iteration = Iteration :: new ( ) ;
19
15
20
16
// Relations
21
17
//let parent: Relation<(Path, Path)> = child.iter().map(|&(child_path, parent_path)| (parent_path, child_path)).collect();
22
- let child: Relation < ( T :: Path , T :: Path ) > = child. into ( ) ;
23
- let path_belongs_to_var: Relation < ( T :: Path , T :: Variable ) > = path_belongs_to_var. into ( ) ;
24
- let initialized_at: Relation < ( T :: Path , T :: Point ) > = initialized_at. into ( ) ;
25
- let moved_out_at: Relation < ( T :: Path , T :: Point ) > = moved_out_at. into ( ) ;
26
- let cfg_edge: Relation < ( T :: Point , T :: Point ) > = cfg_edge. iter ( ) . cloned ( ) . collect ( ) ;
27
- let _path_accessed_at: Relation < ( T :: Path , T :: Point ) > = path_accessed_at. into ( ) ;
18
+ let child: Relation < ( T :: Path , T :: Path ) > = ctx. child . into ( ) ;
19
+ let path_belongs_to_var: Relation < ( T :: Path , T :: Variable ) > = ctx. path_belongs_to_var . into ( ) ;
20
+ let initialized_at: Relation < ( T :: Path , T :: Point ) > = ctx. initialized_at . into ( ) ;
21
+ let moved_out_at: Relation < ( T :: Path , T :: Point ) > = ctx. moved_out_at . into ( ) ;
22
+ let _path_accessed_at: Relation < ( T :: Path , T :: Point ) > = ctx. path_accessed_at . into ( ) ;
28
23
29
24
// Variables
30
25
@@ -60,10 +55,10 @@ pub(super) fn init_var_maybe_initialized_on_exit<T: FactTypes>(
60
55
// path_maybe_initialized_on_exit(Mother, point) :-
61
56
// path_maybe_initialized_on_exit(Daughter, point),
62
57
// child(Daughter, Mother).
63
- path_maybe_initialized_on_exit. from_leapjoin (
58
+ path_maybe_initialized_on_exit. from_join (
64
59
& path_maybe_initialized_on_exit,
65
- child . extend_with ( | & ( daughter , _point ) | daughter ) ,
66
- |& ( _daughter, point) , & mother| ( mother, point) ,
60
+ & child ,
61
+ |& _daughter, & point, & mother| ( mother, point) ,
67
62
) ;
68
63
69
64
// TODO: the following lines contain things left to implement for move
@@ -93,12 +88,12 @@ pub(super) fn init_var_maybe_initialized_on_exit<T: FactTypes>(
93
88
// END TODO
94
89
95
90
// var_maybe_initialized_on_exit(var, point) :-
96
- // path_belongs_to_var (path, var ),
97
- // path_maybe_initialized_at (path, point ).
98
- var_maybe_initialized_on_exit. from_leapjoin (
91
+ // path_maybe_initialized_on_exit (path, point ),
92
+ // path_belongs_to_var (path, var ).
93
+ var_maybe_initialized_on_exit. from_join (
99
94
& path_maybe_initialized_on_exit,
100
- path_belongs_to_var . extend_with ( | & ( path , _point ) | path ) ,
101
- |& ( _path, point) , & var| ( var, point) ,
95
+ & path_belongs_to_var ,
96
+ |& _path, & point, & var| ( var, point) ,
102
97
) ;
103
98
}
104
99
@@ -107,7 +102,7 @@ pub(super) fn init_var_maybe_initialized_on_exit<T: FactTypes>(
107
102
info ! (
108
103
"init_var_maybe_initialized_on_exit() completed: {} tuples, {:?}" ,
109
104
var_maybe_initialized_on_exit. len( ) ,
110
- computation_start . elapsed( )
105
+ timer . elapsed( )
111
106
) ;
112
107
113
108
if output. dump_enabled {
@@ -130,7 +125,4 @@ pub(super) fn init_var_maybe_initialized_on_exit<T: FactTypes>(
130
125
}
131
126
132
127
var_maybe_initialized_on_exit
133
- . iter ( )
134
- . map ( |& ( var, point) | ( var, point) )
135
- . collect ( )
136
128
}
0 commit comments