File tree 1 file changed +40
-0
lines changed
1 file changed +40
-0
lines changed Original file line number Diff line number Diff line change
1
+ use salsa:: { Database , Setter } ;
2
+
3
+ #[ salsa:: tracked]
4
+ fn memoized ( db : & dyn Database , input : MyInput ) -> u32 {
5
+ memoized_a ( db, MyTracked :: new ( db, input. field ( db) ) )
6
+ }
7
+
8
+ #[ salsa:: tracked]
9
+ fn memoized_a < ' db > ( db : & ' db dyn Database , tracked : MyTracked < ' db > ) -> u32 {
10
+ MyTracked :: new ( db, 0 ) ;
11
+ memoized_b ( db, tracked)
12
+ }
13
+
14
+ fn recovery_fn < ' db > ( _db : & ' db dyn Database , _cycle : & salsa:: Cycle , _input : MyTracked < ' db > ) -> u32 {
15
+ 0
16
+ }
17
+
18
+ #[ salsa:: tracked( recovery_fn=recovery_fn) ]
19
+ fn memoized_b < ' db > ( db : & ' db dyn Database , tracked : MyTracked < ' db > ) -> u32 {
20
+ tracked. field ( db) + memoized_a ( db, tracked)
21
+ }
22
+
23
+ #[ salsa:: input]
24
+ struct MyInput {
25
+ field : u32 ,
26
+ }
27
+
28
+ #[ salsa:: tracked]
29
+ struct MyTracked < ' db > {
30
+ field : u32 ,
31
+ }
32
+
33
+ #[ test]
34
+ fn cycle_memoized ( ) {
35
+ let mut db = salsa:: DatabaseImpl :: new ( ) ;
36
+ let input = MyInput :: new ( & db, 2 ) ;
37
+ memoized ( & db, input) ;
38
+ input. set_field ( & mut db) . to ( 3 ) ;
39
+ memoized ( & db, input) ;
40
+ }
You can’t perform that action at this time.
0 commit comments