]> git.proxmox.com Git - rustc.git/blame - src/librustc/dep_graph/prev.rs
New upstream version 1.34.2+dfsg1
[rustc.git] / src / librustc / dep_graph / prev.rs
CommitLineData
9fa01778 1use crate::ich::Fingerprint;
ea8adc8c
XL
2use rustc_data_structures::fx::FxHashMap;
3use super::dep_node::DepNode;
4use super::serialized::{SerializedDepGraph, SerializedDepNodeIndex};
5
0bf4aa26 6#[derive(Debug, RustcEncodable, RustcDecodable, Default)]
ea8adc8c
XL
7pub struct PreviousDepGraph {
8 data: SerializedDepGraph,
9 index: FxHashMap<DepNode, SerializedDepNodeIndex>,
10}
11
12impl 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}