pub struct UsizeCOSet { /* private fields */ }Expand description
Immutable canonical interval set.
Internally this is an Arc<[UsizeCO]>, so cloning a UsizeCOSet is cheap.
Canonical invariant:
for every adjacent pair a, b:
a.end_excl() < b.start()The strict < means both overlap and adjacency have already been merged.
Implementations§
Source§impl UsizeCOSet
impl UsizeCOSet
Sourcepub fn interval_count(&self) -> usize
pub fn interval_count(&self) -> usize
Returns the number of canonical intervals.
For the UsizeCO domain, the maximum canonical interval count is
128, e.g. [0, 1), [2, 3), ..., [254, 255).
Sourcepub fn as_slice(&self) -> &[UsizeCO]
pub fn as_slice(&self) -> &[UsizeCO]
Returns the canonical interval slice.
The returned slice is sorted, non-overlapping, and contains no adjacent intervals.
Sourcepub fn iter_intervals(&self) -> impl Iterator<Item = UsizeCO>
pub fn iter_intervals(&self) -> impl Iterator<Item = UsizeCO>
Iterates over canonical intervals by value.
Source§impl UsizeCOSet
impl UsizeCOSet
Sourcepub fn contains_point(&self, x: usize) -> bool
pub fn contains_point(&self, x: usize) -> bool
Returns whether x is covered by any interval in the set.
Complexity: O(log n).
Sourcepub fn contains_interval(&self, query: UsizeCO) -> bool
pub fn contains_interval(&self, query: UsizeCO) -> bool
Returns whether query is fully contained by one interval.
Since the set is canonical, a contained query interval can only
be contained by the interval immediately preceding or starting
at query.start().
Complexity: O(log n).
Sourcepub fn intersects_interval(&self, query: UsizeCO) -> bool
pub fn intersects_interval(&self, query: UsizeCO) -> bool
Returns whether query intersects any interval in the set.
Complexity: O(log n).
Source§impl UsizeCOSet
impl UsizeCOSet
Sourcepub fn interval_containing_point(&self, x: usize) -> Option<UsizeCO>
pub fn interval_containing_point(&self, x: usize) -> Option<UsizeCO>
Returns the unique interval containing x, if any.
Because the set is canonical, at most one interval can contain a single point.
Complexity: O(log n).
Source§impl UsizeCOSet
impl UsizeCOSet
Sourcepub fn intervals_intersecting(
&self,
query: UsizeCO,
) -> impl Iterator<Item = UsizeCO>
pub fn intervals_intersecting( &self, query: UsizeCO, ) -> impl Iterator<Item = UsizeCO>
Iterates over all canonical intervals intersecting query.
The iterator yields original intervals stored in the set, not clipped intersection segments.
Complexity: O(log n + k), where k is the number of
returned intervals.
Sourcepub fn intersections(&self, query: UsizeCO) -> impl Iterator<Item = UsizeCO>
pub fn intersections(&self, query: UsizeCO) -> impl Iterator<Item = UsizeCO>
Iterates over clipped intersection segments with query.
Example:
set: [10, 20), [30, 40)
query: [15, 35)
out: [15, 20), [30, 35)Complexity: O(log n + k), where k is the number of
intersecting intervals.
Source§impl UsizeCOSet
impl UsizeCOSet
Sourcepub fn covered_len(&self, query: UsizeCO) -> usize
pub fn covered_len(&self, query: UsizeCO) -> usize
Returns the covered length inside query.
Since UsizeCOSet is canonical, all intersection segments are
disjoint, so summing their lengths is valid.
The result is always <= query.len().
Sourcepub fn uncovered_len(&self, query: UsizeCO) -> usize
pub fn uncovered_len(&self, query: UsizeCO) -> usize
Returns the uncovered length inside query.
Sourcepub fn coverage_ratio(&self, query: UsizeCO) -> f32
pub fn coverage_ratio(&self, query: UsizeCO) -> f32
Returns covered_len(query) / query.len() as f32.
query.len() is non-zero because UsizeCO cannot represent an
empty interval.
Trait Implementations§
Source§impl Clone for UsizeCOSet
impl Clone for UsizeCOSet
Source§fn clone(&self) -> UsizeCOSet
fn clone(&self) -> UsizeCOSet
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for UsizeCOSet
impl Debug for UsizeCOSet
Source§impl PartialEq for UsizeCOSet
impl PartialEq for UsizeCOSet
Source§fn eq(&self, other: &UsizeCOSet) -> bool
fn eq(&self, other: &UsizeCOSet) -> bool
self and other values to be equal, and is used by ==.