diff options
author | Aleksey Kladov <[email protected]> | 2018-09-12 20:11:26 +0100 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2018-09-15 22:00:05 +0100 |
commit | cecc7ad5b20e693cb8d962187bd83b9ac234de97 (patch) | |
tree | 4bb388adae050ba0457cb0ca3b2bfcc9af353871 /crates/salsa/tests | |
parent | 8cf9c2719652d298006d51bc82a32908ab4e5335 (diff) |
be generic over data
Diffstat (limited to 'crates/salsa/tests')
-rw-r--r-- | crates/salsa/tests/integration.rs | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/crates/salsa/tests/integration.rs b/crates/salsa/tests/integration.rs index 7241eca38..2872d3913 100644 --- a/crates/salsa/tests/integration.rs +++ b/crates/salsa/tests/integration.rs | |||
@@ -7,6 +7,7 @@ use std::{ | |||
7 | }; | 7 | }; |
8 | 8 | ||
9 | type State = HashMap<u32, String>; | 9 | type State = HashMap<u32, String>; |
10 | type Data = Arc<Any + Send + Sync + 'static>; | ||
10 | const GET_TEXT: salsa::QueryTypeId = salsa::QueryTypeId(1); | 11 | const GET_TEXT: salsa::QueryTypeId = salsa::QueryTypeId(1); |
11 | const GET_FILES: salsa::QueryTypeId = salsa::QueryTypeId(2); | 12 | const GET_FILES: salsa::QueryTypeId = salsa::QueryTypeId(2); |
12 | const FILE_NEWLINES: salsa::QueryTypeId = salsa::QueryTypeId(3); | 13 | const FILE_NEWLINES: salsa::QueryTypeId = salsa::QueryTypeId(3); |
@@ -14,9 +15,9 @@ const TOTAL_NEWLINES: salsa::QueryTypeId = salsa::QueryTypeId(4); | |||
14 | 15 | ||
15 | fn mk_ground_query<T, R>( | 16 | fn mk_ground_query<T, R>( |
16 | state: &State, | 17 | state: &State, |
17 | params: &(Any + Send + Sync + 'static), | 18 | params: &Data, |
18 | f: fn(&State, &T) -> R, | 19 | f: fn(&State, &T) -> R, |
19 | ) -> (Box<Any + Send + Sync + 'static>, salsa::OutputFingerprint) | 20 | ) -> (Data, salsa::OutputFingerprint) |
20 | where | 21 | where |
21 | T: 'static, | 22 | T: 'static, |
22 | R: Hash + Send + Sync + 'static, | 23 | R: Hash + Send + Sync + 'static, |
@@ -24,21 +25,21 @@ where | |||
24 | let params = params.downcast_ref().unwrap(); | 25 | let params = params.downcast_ref().unwrap(); |
25 | let result = f(state, params); | 26 | let result = f(state, params); |
26 | let fingerprint = o_print(&result); | 27 | let fingerprint = o_print(&result); |
27 | (Box::new(result), fingerprint) | 28 | (Arc::new(result), fingerprint) |
28 | } | 29 | } |
29 | 30 | ||
30 | fn get<T, R>(db: &salsa::Db<State>, query_type: salsa::QueryTypeId, param: T) -> (Arc<R>, Vec<salsa::QueryTypeId>) | 31 | fn get<T, R>(db: &salsa::Db<State, Data>, query_type: salsa::QueryTypeId, param: T) -> (Arc<R>, Vec<salsa::QueryTypeId>) |
31 | where | 32 | where |
32 | T: Hash + Send + Sync + 'static, | 33 | T: Hash + Send + Sync + 'static, |
33 | R: Send + Sync + 'static, | 34 | R: Send + Sync + 'static, |
34 | { | 35 | { |
35 | let i_print = i_print(¶m); | 36 | let i_print = i_print(¶m); |
36 | let param = Box::new(param); | 37 | let param = Arc::new(param); |
37 | let (res, trace) = db.get(salsa::QueryId(query_type, i_print), param); | 38 | let (res, trace) = db.get(salsa::QueryId(query_type, i_print), param); |
38 | (res.downcast().unwrap(), trace) | 39 | (res.downcast().unwrap(), trace) |
39 | } | 40 | } |
40 | 41 | ||
41 | struct QueryCtx<'a>(&'a salsa::QueryCtx<State>); | 42 | struct QueryCtx<'a>(&'a salsa::QueryCtx<State, Data>); |
42 | 43 | ||
43 | impl<'a> QueryCtx<'a> { | 44 | impl<'a> QueryCtx<'a> { |
44 | fn get_text(&self, id: u32) -> Arc<String> { | 45 | fn get_text(&self, id: u32) -> Arc<String> { |
@@ -60,10 +61,10 @@ impl<'a> QueryCtx<'a> { | |||
60 | } | 61 | } |
61 | 62 | ||
62 | fn mk_query<T, R>( | 63 | fn mk_query<T, R>( |
63 | query_ctx: &salsa::QueryCtx<State>, | 64 | query_ctx: &salsa::QueryCtx<State, Data>, |
64 | params: &(Any + Send + Sync + 'static), | 65 | params: &Data, |
65 | f: fn(QueryCtx, &T) -> R, | 66 | f: fn(QueryCtx, &T) -> R, |
66 | ) -> (Box<Any + Send + Sync + 'static>, salsa::OutputFingerprint) | 67 | ) -> (Data, salsa::OutputFingerprint) |
67 | where | 68 | where |
68 | T: 'static, | 69 | T: 'static, |
69 | R: Hash + Send + Sync + 'static, | 70 | R: Hash + Send + Sync + 'static, |
@@ -72,11 +73,11 @@ where | |||
72 | let query_ctx = QueryCtx(query_ctx); | 73 | let query_ctx = QueryCtx(query_ctx); |
73 | let result = f(query_ctx, params); | 74 | let result = f(query_ctx, params); |
74 | let fingerprint = o_print(&result); | 75 | let fingerprint = o_print(&result); |
75 | (Box::new(result), fingerprint) | 76 | (Arc::new(result), fingerprint) |
76 | } | 77 | } |
77 | 78 | ||
78 | fn mk_queries() -> salsa::QueryConfig<State> { | 79 | fn mk_queries() -> salsa::QueryConfig<State, Data> { |
79 | salsa::QueryConfig::<State>::new() | 80 | salsa::QueryConfig::<State, Data>::new() |
80 | .with_ground_query(GET_TEXT, |state, id| { | 81 | .with_ground_query(GET_TEXT, |state, id| { |
81 | mk_ground_query::<u32, String>(state, id, |state, id| state[id].clone()) | 82 | mk_ground_query::<u32, String>(state, id, |state, id| state[id].clone()) |
82 | }) | 83 | }) |