pub struct SerializedDepGraph {
nodes: IndexVec<SerializedDepNodeIndex, DepNode>,
value_fingerprints: IndexVec<SerializedDepNodeIndex, Fingerprint>,
edge_list_indices: IndexVec<SerializedDepNodeIndex, EdgeHeader>,
edge_list_data: Vec<u8>,
index: Vec<UnhashMap<PackedFingerprint, SerializedDepNodeIndex>>,
session_count: u64,
}Expand description
Data for use when recompiling the current crate.
There may be unused indices with DepKind::Null in this graph due to batch allocation of indices to threads.
Fields§
§nodes: IndexVec<SerializedDepNodeIndex, DepNode>The set of all DepNodes in the graph
value_fingerprints: IndexVec<SerializedDepNodeIndex, Fingerprint>A value fingerprint associated with each DepNode in Self::nodes,
typically a hash of the value returned by the node’s query in the
previous incremental-compilation session.
Some nodes don’t have a meaningful value hash (e.g. queries with no_hash),
so they store a dummy value here instead (e.g. Fingerprint::ZERO).
edge_list_indices: IndexVec<SerializedDepNodeIndex, EdgeHeader>For each DepNode, stores the list of edges originating from that DepNode. Encoded as a [start, end) pair indexing into edge_list_data, which holds the actual DepNodeIndices of the target nodes.
edge_list_data: Vec<u8>A flattened list of all edge targets in the graph, stored in the same varint encoding that we use on disk. Edge sources are implicit in edge_list_indices.
index: Vec<UnhashMap<PackedFingerprint, SerializedDepNodeIndex>>For each dep kind, stores a map from key fingerprints back to the index
of the corresponding node. This is the inverse of nodes.
session_count: u64The number of previous compilation sessions. This is used to generate unique anon dep nodes per session.
Implementations§
Source§impl SerializedDepGraph
impl SerializedDepGraph
pub fn edge_targets_from( &self, source: SerializedDepNodeIndex, ) -> impl Iterator<Item = SerializedDepNodeIndex> + Clone
pub fn index_to_node(&self, dep_node_index: SerializedDepNodeIndex) -> &DepNode
pub fn node_to_index_opt( &self, dep_node: &DepNode, ) -> Option<SerializedDepNodeIndex>
pub fn value_fingerprint_for_index( &self, dep_node_index: SerializedDepNodeIndex, ) -> Fingerprint
pub fn node_count(&self) -> usize
pub fn session_count(&self) -> u64
Source§impl SerializedDepGraph
impl SerializedDepGraph
pub fn decode(d: &mut MemDecoder<'_>) -> Arc<SerializedDepGraph>
Trait Implementations§
Source§impl Debug for SerializedDepGraph
impl Debug for SerializedDepGraph
Source§impl Default for SerializedDepGraph
impl Default for SerializedDepGraph
Source§fn default() -> SerializedDepGraph
fn default() -> SerializedDepGraph
Auto Trait Implementations§
impl DynSend for SerializedDepGraph
impl DynSync for SerializedDepGraph
impl Freeze for SerializedDepGraph
impl RefUnwindSafe for SerializedDepGraph
impl Send for SerializedDepGraph
impl Sync for SerializedDepGraph
impl Unpin for SerializedDepGraph
impl UnsafeUnpin for SerializedDepGraph
impl UnwindSafe for SerializedDepGraph
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<P> IntoQueryParam<P> for P
impl<P> IntoQueryParam<P> for P
fn into_query_param(self) -> P
Source§impl<T> MaybeResult<T> for T
impl<T> MaybeResult<T> for T
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
Source§impl<I, T> UpcastFrom<I, T> for T
impl<I, T> UpcastFrom<I, T> for T
fn upcast_from(from: T, _tcx: I) -> T
Source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
Source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
Source§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
impl<T> ErasedDestructor for Twhere
T: 'static,
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 128 bytes