pub struct U32COSet { /* private fields */ }Expand description
Immutable canonical interval set.
Internally this is an Arc<[U32CO]>, so cloning a U32COSet 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 U32COSet
impl U32COSet
Sourcepub fn interval_count(&self) -> u32
pub fn interval_count(&self) -> u32
Returns the number of canonical intervals.
For the U32CO domain, the maximum canonical interval count is
128, e.g. [0, 1), [2, 3), ..., [254, 255).
Sourcepub fn as_slice(&self) -> &[U32CO]
pub fn as_slice(&self) -> &[U32CO]
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 = U32CO>
pub fn iter_intervals(&self) -> impl Iterator<Item = U32CO>
Iterates over canonical intervals by value.
Source§impl U32COSet
impl U32COSet
Sourcepub fn contains_point(&self, x: u32) -> bool
pub fn contains_point(&self, x: u32) -> bool
Returns whether x is covered by any interval in the set.
Complexity: O(log n).
Sourcepub fn contains_interval(&self, query: U32CO) -> bool
pub fn contains_interval(&self, query: U32CO) -> 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: U32CO) -> bool
pub fn intersects_interval(&self, query: U32CO) -> bool
Returns whether query intersects any interval in the set.
Complexity: O(log n).
Source§impl U32COSet
impl U32COSet
Sourcepub fn interval_containing_point(&self, x: u32) -> Option<U32CO>
pub fn interval_containing_point(&self, x: u32) -> Option<U32CO>
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 U32COSet
impl U32COSet
Sourcepub fn intervals_intersecting(
&self,
query: U32CO,
) -> impl Iterator<Item = U32CO>
pub fn intervals_intersecting( &self, query: U32CO, ) -> impl Iterator<Item = U32CO>
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: U32CO) -> impl Iterator<Item = U32CO>
pub fn intersections(&self, query: U32CO) -> impl Iterator<Item = U32CO>
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 U32COSet
impl U32COSet
Sourcepub fn covered_len(&self, query: U32CO) -> u32
pub fn covered_len(&self, query: U32CO) -> u32
Returns the covered length inside query.
Since U32COSet 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: U32CO) -> u32
pub fn uncovered_len(&self, query: U32CO) -> u32
Returns the uncovered length inside query.
Sourcepub fn coverage_ratio(&self, query: U32CO) -> f32
pub fn coverage_ratio(&self, query: U32CO) -> f32
Returns covered_len(query) / query.len() as f32.
query.len() is non-zero because U32CO cannot represent an
empty interval.