pub struct DenseLocationMap {
statements_before_block: IndexVec<BasicBlock, usize>,
basic_blocks: IndexVec<PointIndex, BasicBlock>,
num_points: usize,
}
Expand description
Maps between a Location
and a PointIndex
(and vice versa).
Fields§
§statements_before_block: IndexVec<BasicBlock, usize>
For each basic block, how many points are contained within?
basic_blocks: IndexVec<PointIndex, BasicBlock>
Map backward from each point to the basic block that it belongs to.
num_points: usize
Implementations§
source§impl DenseLocationMap
impl DenseLocationMap
pub fn new(body: &Body<'_>) -> Self
sourcepub fn num_points(&self) -> usize
pub fn num_points(&self) -> usize
Total number of point indices
sourcepub fn point_from_location(&self, location: Location) -> PointIndex
pub fn point_from_location(&self, location: Location) -> PointIndex
Converts a Location
into a PointIndex
. O(1).
sourcepub fn entry_point(&self, block: BasicBlock) -> PointIndex
pub fn entry_point(&self, block: BasicBlock) -> PointIndex
Returns the PointIndex
for the first statement in the given BasicBlock
. O(1).
sourcepub fn to_block_start(&self, index: PointIndex) -> PointIndex
pub fn to_block_start(&self, index: PointIndex) -> PointIndex
Return the PointIndex for the block start of this index.
sourcepub fn to_location(&self, index: PointIndex) -> Location
pub fn to_location(&self, index: PointIndex) -> Location
Converts a PointIndex
back to a location. O(1).
sourcepub fn point_in_range(&self, index: PointIndex) -> bool
pub fn point_in_range(&self, index: PointIndex) -> bool
Sometimes we get point-indices back from bitsets that may be out of range (because they round up to the nearest 2^N number of bits). Use this function to filter such points out if you like.
Auto Trait Implementations§
impl DynSend for DenseLocationMap
impl DynSync for DenseLocationMap
impl Freeze for DenseLocationMap
impl RefUnwindSafe for DenseLocationMap
impl Send for DenseLocationMap
impl Sync for DenseLocationMap
impl Unpin for DenseLocationMap
impl UnwindSafe for DenseLocationMap
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> Filterable for T
impl<T> Filterable for T
source§fn filterable(
self,
filter_name: &'static str,
) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
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<Tcx, T> Value<Tcx> for Twhere
Tcx: DepContext,
impl<Tcx, T> Value<Tcx> for Twhere
Tcx: DepContext,
default fn from_cycle_error( tcx: Tcx, cycle_error: &CycleError, _guar: ErrorGuaranteed, ) -> 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<'a, T> Captures<'a> for Twhere
T: ?Sized,
impl<T> ErasedDestructor for Twhere
T: 'static,
impl<T> MaybeSendSync for T
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: 56 bytes