Struct ra_ap_rustc_index::bit_set::SparseBitMatrix
source · pub struct SparseBitMatrix<R, C>{ /* private fields */ }
Expand description
A fixed-column-size, variable-row-size 2D bit matrix with a moderately sparse representation.
Initially, every row has no explicit representation. If any bit within a
row is set, the entire row is instantiated as Some(<HybridBitSet>)
.
Furthermore, any previously uninstantiated rows prior to it will be
instantiated as None
. Those prior rows may themselves become fully
instantiated later on if any of their bits are set.
R
and C
are index types used to identify rows and columns respectively;
typically newtyped usize
wrappers, but they can also just be usize
.
Implementations§
source§impl<R: Idx, C: Idx> SparseBitMatrix<R, C>
impl<R: Idx, C: Idx> SparseBitMatrix<R, C>
sourcepub fn new(num_columns: usize) -> Self
pub fn new(num_columns: usize) -> Self
Creates a new empty sparse bit matrix with no rows or columns.
sourcepub fn insert(&mut self, row: R, column: C) -> bool
pub fn insert(&mut self, row: R, column: C) -> bool
Sets the cell at (row, column)
to true. Put another way, insert
column
to the bitset for row
.
Returns true
if this changed the matrix.
sourcepub fn remove(&mut self, row: R, column: C) -> bool
pub fn remove(&mut self, row: R, column: C) -> bool
Sets the cell at (row, column)
to false. Put another way, delete
column
from the bitset for row
. Has no effect if row
does not
exist.
Returns true
if this changed the matrix.
sourcepub fn clear(&mut self, row: R)
pub fn clear(&mut self, row: R)
Sets all columns at row
to false. Has no effect if row
does
not exist.
sourcepub fn contains(&self, row: R, column: C) -> bool
pub fn contains(&self, row: R, column: C) -> bool
Do the bits from row
contain column
? Put another way, is
the matrix cell at (row, column)
true? Put yet another way,
if the matrix represents (transitive) reachability, can
row
reach column
?
sourcepub fn union_rows(&mut self, read: R, write: R) -> bool
pub fn union_rows(&mut self, read: R, write: R) -> bool
Adds the bits from row read
to the bits from row write
, and
returns true
if anything changed.
This is used when computing transitive reachability because if
you have an edge write -> read
, because in that case
write
can reach everything that read
can (and
potentially more).
sourcepub fn insert_all_into_row(&mut self, row: R)
pub fn insert_all_into_row(&mut self, row: R)
Insert all bits in the given row.
pub fn rows(&self) -> impl Iterator<Item = R>
sourcepub fn iter(&self, row: R) -> impl Iterator<Item = C> + '_
pub fn iter(&self, row: R) -> impl Iterator<Item = C> + '_
Iterates through all the columns set to true in a given row of the matrix.
pub fn row(&self, row: R) -> Option<&HybridBitSet<C>>
sourcepub fn intersect_row<Set>(&mut self, row: R, set: &Set) -> boolwhere
HybridBitSet<C>: BitRelations<Set>,
pub fn intersect_row<Set>(&mut self, row: R, set: &Set) -> boolwhere
HybridBitSet<C>: BitRelations<Set>,
Intersects row
with set
. set
can be either BitSet
or
HybridBitSet
. Has no effect if row
does not exist.
Returns true if the row was changed.
sourcepub fn subtract_row<Set>(&mut self, row: R, set: &Set) -> boolwhere
HybridBitSet<C>: BitRelations<Set>,
pub fn subtract_row<Set>(&mut self, row: R, set: &Set) -> boolwhere
HybridBitSet<C>: BitRelations<Set>,
Subtracts set
from row
. set
can be either BitSet
or
HybridBitSet
. Has no effect if row
does not exist.
Returns true if the row was changed.
sourcepub fn union_row<Set>(&mut self, row: R, set: &Set) -> boolwhere
HybridBitSet<C>: BitRelations<Set>,
pub fn union_row<Set>(&mut self, row: R, set: &Set) -> boolwhere
HybridBitSet<C>: BitRelations<Set>,
Unions row
with set
. set
can be either BitSet
or
HybridBitSet
.
Returns true if the row was changed.
Trait Implementations§
source§impl<R, C> Clone for SparseBitMatrix<R, C>
impl<R, C> Clone for SparseBitMatrix<R, C>
source§fn clone(&self) -> SparseBitMatrix<R, C>
fn clone(&self) -> SparseBitMatrix<R, C>
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more