Skip to content

Commit 1215e3b

Browse files
Update examples with new interface
1 parent 22e1b54 commit 1215e3b

File tree

2 files changed

+29
-29
lines changed

2 files changed

+29
-29
lines changed

examples/borrow_check.rs

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
extern crate datafrog;
2-
use datafrog::Iteration;
2+
use datafrog::{Iteration, Relation};
33

44
type Region = u32;
55
type Borrow = u32;
@@ -14,15 +14,15 @@ fn main() {
1414
let subset = iteration1.variable::<(Region, Region, Point)>("subset");
1515

1616
// different indices for `subset`.
17-
let subset_r1p = iteration1.variable::<((Region, Point), Region)>("subset_r1p");
18-
let subset_r2p = iteration1.variable::<((Region, Point), Region)>("subset_r2p");
19-
let subset_p = iteration1.variable::<(Point, (Region, Region))>("subset_p");
17+
let subset_r1p = iteration1.variable::<(Region, Point, Region)>("subset_r1p");
18+
let subset_r2p = iteration1.variable::<(Region, Point, Region)>("subset_r2p");
19+
let subset_p = iteration1.variable::<(Point, Region, Region)>("subset_p");
2020

2121
// temporaries as we perform a multi-way join.
22-
let subset_1 = iteration1.variable::<((Region, Point), Region)>("subset_1");
23-
let subset_2 = iteration1.variable::<((Region, Point), Region)>("subset_2");
22+
let subset_1 = iteration1.variable::<(Region, Point, Region)>("subset_1");
23+
let subset_2 = iteration1.variable::<(Region, Point, Region)>("subset_2");
2424

25-
let region_live_at = iteration1.variable::<((Region, Point), ())>("region_live_at");
25+
let region_live_at = iteration1.variable::<(Region, Point)>("region_live_at");
2626
let cfg_edge_p = iteration1.variable::<(Point, Point)>("cfg_edge_p");
2727

2828
// load initial facts.
@@ -33,29 +33,29 @@ fn main() {
3333
// .. and then start iterating rules!
3434
while iteration1.changed() {
3535
// remap fields to re-index by keys.
36-
subset_r1p.from_map(&subset, |&(r1, r2, p)| ((r1, p), r2));
37-
subset_r2p.from_map(&subset, |&(r1, r2, p)| ((r2, p), r1));
38-
subset_p.from_map(&subset, |&(r1, r2, p)| (p, (r1, r2)));
36+
subset_r1p.from_map(&subset, |&(r1, r2, p)| (r1, p, r2));
37+
subset_r2p.from_map(&subset, |&(r1, r2, p)| (r2, p, r1));
38+
subset_p.from_map(&subset, |&(r1, r2, p)| (p, r1, r2));
3939

4040
// R0: subset(R1, R2, P) :- outlives(R1, R2, P).
4141
// Already loaded; outlives is static.
4242

4343
// R1: subset(R1, R3, P) :-
4444
// subset(R1, R2, P),
4545
// subset(R2, R3, P).
46-
subset.from_join(&subset_r2p, &subset_r1p, |&(_r2, p), &r1, &r3| (r1, r3, p));
46+
subset.from_join(&subset_r2p, &subset_r1p, |(_r2, p), (r1,), (r3,)| (r1, r3, p));
4747

4848
// R2: subset(R1, R2, Q) :-
4949
// subset(R1, R2, P),
5050
// cfg_edge(P, Q),
5151
// region_live_at(R1, Q),
5252
// region_live_at(R2, Q).
5353

54-
subset_1.from_join(&subset_p, &cfg_edge_p, |&_p, &(r1, r2), &q| ((r1, q), r2));
55-
subset_2.from_join(&subset_1, &region_live_at, |&(r1, q), &r2, &()| {
56-
((r2, q), r1)
54+
subset_1.from_join(&subset_p, &cfg_edge_p, |_p: (Point,), (r1, r2), (q,)| (r1, q, r2));
55+
subset_2.from_join(&subset_1, &region_live_at, |(r1, q), (r2,), ()| {
56+
(r2, q, r1)
5757
});
58-
subset.from_join(&subset_2, &region_live_at, |&(r2, q), &r1, &()| (r1, r2, q));
58+
subset.from_join(&subset_2, &region_live_at, |(r2, q), (r1,), ()| (r1, r2, q));
5959
}
6060

6161
subset_r1p.complete()
@@ -69,41 +69,41 @@ fn main() {
6969
let requires = iteration2.variable::<(Region, Borrow, Point)>("requires");
7070
requires.insert(Vec::new().into());
7171

72-
let requires_rp = iteration2.variable::<((Region, Point), Borrow)>("requires_rp");
73-
let requires_bp = iteration2.variable::<((Borrow, Point), Region)>("requires_bp");
72+
let requires_rp = iteration2.variable::<(Region, Point, Borrow)>("requires_rp");
73+
let requires_bp = iteration2.variable::<(Borrow, Point, Region)>("requires_bp");
7474

75-
let requires_1 = iteration2.variable::<(Point, (Borrow, Region))>("requires_1");
76-
let requires_2 = iteration2.variable::<((Region, Point), Borrow)>("requires_2");
75+
let requires_1 = iteration2.variable::<(Point, Borrow, Region)>("requires_1");
76+
let requires_2 = iteration2.variable::<(Region, Point, Borrow)>("requires_2");
7777

78-
let subset_r1p = iteration2.variable::<((Region, Point), Region)>("subset_r1p");
78+
let subset_r1p = iteration2.variable::<(Region, Point, Region)>("subset_r1p");
7979
subset_r1p.insert(subset);
8080

81-
let killed = Vec::new().into();
82-
let region_live_at = iteration2.variable::<((Region, Point), ())>("region_live_at");
81+
let killed: Relation<(Borrow, Point)> = Vec::new().into();
82+
let region_live_at = iteration2.variable::<(Region, Point)>("region_live_at");
8383
let cfg_edge_p = iteration2.variable::<(Point, Point)>("cfg_edge_p");
8484

8585
// .. and then start iterating rules!
8686
while iteration2.changed() {
87-
requires_rp.from_map(&requires, |&(r, b, p)| ((r, p), b));
88-
requires_bp.from_map(&requires, |&(r, b, p)| ((b, p), r));
87+
requires_rp.from_map(&requires, |&(r, b, p)| (r, p, b));
88+
requires_bp.from_map(&requires, |&(r, b, p)| (b, p, r));
8989

9090
// requires(R, B, P) :- borrow_region(R, B, P).
9191
// Already loaded; borrow_region is static.
9292

9393
// requires(R2, B, P) :-
9494
// requires(R1, B, P),
9595
// subset(R1, R2, P).
96-
requires.from_join(&requires_rp, &subset_r1p, |&(_r1, p), &b, &r2| (r2, b, p));
96+
requires.from_join(&requires_rp, &subset_r1p, |(_r1, p), (b,), (r2,)| (r2, b, p));
9797

9898
// requires(R, B, Q) :-
9999
// requires(R, B, P),
100100
// !killed(B, P),
101101
// cfg_edge(P, Q),
102102
// (region_live_at(R, Q); universal_region(R)).
103103

104-
requires_1.from_antijoin(&requires_bp, &killed, |&(b, p), &r| (p, (b, r)));
105-
requires_2.from_join(&requires_1, &cfg_edge_p, |&_p, &(b, r), &q| ((r, q), b));
106-
requires.from_join(&requires_2, &region_live_at, |&(r, q), &b, &()| (r, b, q));
104+
requires_1.from_antijoin(&requires_bp, &killed, |(b, p, r)| (p, b, r));
105+
requires_2.from_join(&requires_1, &cfg_edge_p, |_p: (Point,), (b, r), (q,)| (r, q, b));
106+
requires.from_join(&requires_2, &region_live_at, |(r, q), (b,), ()| (r, b, q));
107107
}
108108

109109
requires.complete()

examples/graspan1.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ fn main() {
4949
// .. and then start iterating rules!
5050
while iteration.changed() {
5151
// N(a,c) <- N(a,b), E(b,c)
52-
variable1.from_join(&variable1, &variable2, |_b, &a, &c| (c, a));
52+
variable1.from_join(&variable1, &variable2, |_b: (u32,), a, c| (c.0, a.0));
5353
}
5454

5555
let reachable = variable1.complete();

0 commit comments

Comments
 (0)