pub(super) struct CoverageCounters {
    next_counter_id: CounterId,
    next_expression_id: ExpressionId,
    bcb_counters: IndexVec<BasicCoverageBlock, Option<BcbCounter>>,
    bcb_edge_counters: FxHashMap<(BasicCoverageBlock, BasicCoverageBlock), BcbCounter>,
    bcb_has_incoming_edge_counters: BitSet<BasicCoverageBlock>,
    pub(super) intermediate_expressions: Vec<BcbCounter>,
}
Expand description

Generates and stores coverage counter and coverage expression information associated with nodes/edges in the BCB graph.

Fields§

§next_counter_id: CounterId§next_expression_id: ExpressionId§bcb_counters: IndexVec<BasicCoverageBlock, Option<BcbCounter>>

Coverage counters/expressions that are associated with individual BCBs.

§bcb_edge_counters: FxHashMap<(BasicCoverageBlock, BasicCoverageBlock), BcbCounter>

Coverage counters/expressions that are associated with the control-flow edge between two BCBs.

§bcb_has_incoming_edge_counters: BitSet<BasicCoverageBlock>

Tracks which BCBs have a counter associated with some incoming edge. Only used by debug assertions, to verify that BCBs with incoming edge counters do not have their own physical counters (expressions are allowed).

§intermediate_expressions: Vec<BcbCounter>

Expression nodes that are not directly associated with any particular BCB/edge, but are needed as operands to more complex expressions. These are always BcbCounter::Expression.

Implementations§

source§

impl CoverageCounters

source

pub(super) fn new(basic_coverage_blocks: &CoverageGraph) -> Self

source

pub fn make_bcb_counters( &mut self, basic_coverage_blocks: &CoverageGraph, bcb_has_coverage_spans: impl Fn(BasicCoverageBlock) -> bool ) -> Result<(), Error>

Makes BcbCounter Counters and Expressions for the BasicCoverageBlocks directly or indirectly associated with coverage spans, and accumulates additional Expressions representing intermediate values.

source

fn make_counter(&mut self) -> BcbCounter

source

fn make_expression(&mut self, lhs: Operand, op: Op, rhs: Operand) -> BcbCounter

source

fn next_counter(&mut self) -> CounterId

Counter IDs start from one and go up.

source

fn next_expression(&mut self) -> ExpressionId

Expression IDs start from 0 and go up. (Counter IDs and Expression IDs are distinguished by the Operand enum.)

source

fn set_bcb_counter( &mut self, bcb: BasicCoverageBlock, counter_kind: BcbCounter ) -> Result<Operand, Error>

source

fn set_bcb_edge_counter( &mut self, from_bcb: BasicCoverageBlock, to_bcb: BasicCoverageBlock, counter_kind: BcbCounter ) -> Result<Operand, Error>

source

pub(super) fn bcb_counter(&self, bcb: BasicCoverageBlock) -> Option<&BcbCounter>

source

pub(super) fn take_bcb_counter( &mut self, bcb: BasicCoverageBlock ) -> Option<BcbCounter>

source

pub(super) fn drain_bcb_counters( &mut self ) -> impl Iterator<Item = (BasicCoverageBlock, BcbCounter)> + '_

source

pub(super) fn drain_bcb_edge_counters( &mut self ) -> impl Iterator<Item = ((BasicCoverageBlock, BasicCoverageBlock), BcbCounter)> + '_

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.

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: 120 bytes