]>
Commit | Line | Data |
---|---|---|
9fa01778 | 1 | use crate::ich::Fingerprint; |
ea8adc8c XL |
2 | use rustc_data_structures::fx::FxHashMap; |
3 | use super::dep_node::DepNode; | |
4 | use super::serialized::{SerializedDepGraph, SerializedDepNodeIndex}; | |
5 | ||
0bf4aa26 | 6 | #[derive(Debug, RustcEncodable, RustcDecodable, Default)] |
ea8adc8c XL |
7 | pub struct PreviousDepGraph { |
8 | data: SerializedDepGraph, | |
9 | index: FxHashMap<DepNode, SerializedDepNodeIndex>, | |
10 | } | |
11 | ||
12 | impl PreviousDepGraph { | |
13 | pub fn new(data: SerializedDepGraph) -> PreviousDepGraph { | |
14 | let index: FxHashMap<_, _> = data.nodes | |
15 | .iter_enumerated() | |
0531ce1d | 16 | .map(|(idx, &dep_node)| (dep_node, idx)) |
ea8adc8c XL |
17 | .collect(); |
18 | PreviousDepGraph { data, index } | |
19 | } | |
20 | ||
21 | #[inline] | |
9fa01778 XL |
22 | pub fn edge_targets_from( |
23 | &self, | |
24 | dep_node_index: SerializedDepNodeIndex | |
25 | ) -> &[SerializedDepNodeIndex] { | |
26 | self.data.edge_targets_from(dep_node_index) | |
ea8adc8c XL |
27 | } |
28 | ||
29 | #[inline] | |
30 | pub fn index_to_node(&self, dep_node_index: SerializedDepNodeIndex) -> DepNode { | |
0531ce1d | 31 | self.data.nodes[dep_node_index] |
ea8adc8c XL |
32 | } |
33 | ||
abe05a73 XL |
34 | #[inline] |
35 | pub fn node_to_index(&self, dep_node: &DepNode) -> SerializedDepNodeIndex { | |
36 | self.index[dep_node] | |
37 | } | |
38 | ||
0531ce1d XL |
39 | #[inline] |
40 | pub fn node_to_index_opt(&self, dep_node: &DepNode) -> Option<SerializedDepNodeIndex> { | |
41 | self.index.get(dep_node).cloned() | |
42 | } | |
43 | ||
ea8adc8c XL |
44 | #[inline] |
45 | pub fn fingerprint_of(&self, dep_node: &DepNode) -> Option<Fingerprint> { | |
46 | self.index | |
47 | .get(dep_node) | |
0531ce1d | 48 | .map(|&node_index| self.data.fingerprints[node_index]) |
ea8adc8c XL |
49 | } |
50 | ||
51 | #[inline] | |
52 | pub fn fingerprint_by_index(&self, | |
53 | dep_node_index: SerializedDepNodeIndex) | |
54 | -> Fingerprint { | |
0531ce1d | 55 | self.data.fingerprints[dep_node_index] |
ea8adc8c | 56 | } |
ff7c6d11 XL |
57 | |
58 | pub fn node_count(&self) -> usize { | |
59 | self.index.len() | |
60 | } | |
ea8adc8c | 61 | } |