pub struct OrderedIntegerSet<E: Integer + Copy + ToPrimitive> { /* private fields */ }
Expand description
An OrderedIntegerSet
consists of a sequence of ContiguousIntegerSet
that
are sorted in ascending order where successive intervals are not
coalesceable, i.e., if intervals A and B are successive intervals, then
A.end + 1 < B.start
E.g. An OrderedIntegerSet
containing ContiguousIntegerSet
s [2,3] and
[5,7] will represent the set of integers {2, 3, 5, 6, 7}
Implementations§
Source§impl<E: Integer + Copy + ToPrimitive> OrderedIntegerSet<E>
impl<E: Integer + Copy + ToPrimitive> OrderedIntegerSet<E>
pub fn new() -> OrderedIntegerSet<E>
Sourcepub fn from_slice(slice: &[[E; 2]]) -> OrderedIntegerSet<E>
pub fn from_slice(slice: &[[E; 2]]) -> OrderedIntegerSet<E>
Creates an OrderedIntegerSet
where the i-th interval is represented by
the i-th two-element array in slice
.
E.g. [[2, 3], [5, 7]] will create an OrderedIntegerSet
representing
{2, 3, 5, 6, 7}, where the contiguous integers are stored as
ContiguousIntegerSet
s
Note that the intervals in the slice
parameters do not have to be
sorted or non-overlapping.
pub fn from_contiguous_integer_sets( sets: Vec<ContiguousIntegerSet<E>>, ) -> OrderedIntegerSet<E>
pub fn from_ordered_coalesced_contiguous_integer_sets( sets: Vec<ContiguousIntegerSet<E>>, ) -> OrderedIntegerSet<E>
Sourcepub fn first(&self) -> Option<E>
pub fn first(&self) -> Option<E>
Returns the smallest element in the set e.g. {[1,3], [4,8]} -> 1
Sourcepub fn last(&self) -> Option<E>
pub fn last(&self) -> Option<E>
Returns the largest element in the set e.g. {[1,3], [4,8]} -> 8
pub fn is_empty(&self) -> bool
Sourcepub fn first_and_last(&self) -> Option<(E, E)>
pub fn first_and_last(&self) -> Option<(E, E)>
Returns both the smallest and the largest element in the set e.g. {[1,3], [4,8]} -> the tuple (1, 8)
Sourcepub fn slice<'a, I: Slicing<&'a OrderedIntegerSet<E>, OrderedIntegerSet<E>>>(
&'a self,
slicer: I,
) -> OrderedIntegerSet<E>
pub fn slice<'a, I: Slicing<&'a OrderedIntegerSet<E>, OrderedIntegerSet<E>>>( &'a self, slicer: I, ) -> OrderedIntegerSet<E>
The slicer
can be any struct that implements the Slicing
trait.
For example, the Slicing
trait has been implemented for the
Range<usize>
struct.
For an OrderedIntegerSet
containing n elements, the Range<usize>
object created by a..b
will slice the integer set and return all
the elements from the a-th (inclusive) to the b-th (exclusive) in
the form of an OrderedIntegerSet
pub fn to_non_empty_intervals(&self) -> Self
pub fn into_non_empty_intervals(self) -> Self
pub fn remove_empty_intervals(&mut self)
pub fn get_intervals_by_ref(&self) -> &Vec<ContiguousIntegerSet<E>>
pub fn into_intervals(self) -> Vec<ContiguousIntegerSet<E>>
pub fn intervals_iter(&self) -> Iter<'_, ContiguousIntegerSet<E>>
pub fn num_intervals(&self) -> usize
Trait Implementations§
Source§impl<E: Clone + Integer + Copy + ToPrimitive> Clone for OrderedIntegerSet<E>
impl<E: Clone + Integer + Copy + ToPrimitive> Clone for OrderedIntegerSet<E>
Source§fn clone(&self) -> OrderedIntegerSet<E>
fn clone(&self) -> OrderedIntegerSet<E>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl<E> CoalesceIntervals<ContiguousIntegerSet<E>, E> for OrderedIntegerSet<E>
impl<E> CoalesceIntervals<ContiguousIntegerSet<E>, E> for OrderedIntegerSet<E>
fn to_coalesced_intervals(&self) -> Vec<ContiguousIntegerSet<E>>
fn coalesce_intervals_inplace(&mut self)
fn into_coalesced(self) -> Self
Source§impl<E: Integer + Copy + ToPrimitive> Collecting<E> for OrderedIntegerSet<E>
impl<E: Integer + Copy + ToPrimitive> Collecting<E> for OrderedIntegerSet<E>
Source§impl<E: Debug + Integer + Copy + ToPrimitive> Debug for OrderedIntegerSet<E>
impl<E: Debug + Integer + Copy + ToPrimitive> Debug for OrderedIntegerSet<E>
Source§impl<E: Integer + Copy + ToPrimitive> Default for OrderedIntegerSet<E>
impl<E: Integer + Copy + ToPrimitive> Default for OrderedIntegerSet<E>
Source§impl<E: Integer + Copy + Sum + ToPrimitive> Finite for OrderedIntegerSet<E>
impl<E: Integer + Copy + Sum + ToPrimitive> Finite for OrderedIntegerSet<E>
Source§impl<E: Integer + Copy + ToPrimitive> From<OrderedIntegerSet<E>> for IntegerSetIter<E>
impl<E: Integer + Copy + ToPrimitive> From<OrderedIntegerSet<E>> for IntegerSetIter<E>
Source§fn from(ordered_integer_set: OrderedIntegerSet<E>) -> IntegerSetIter<E> ⓘ
fn from(ordered_integer_set: OrderedIntegerSet<E>) -> IntegerSetIter<E> ⓘ
Source§impl<E: Integer + Copy + ToPrimitive> From<Vec<ContiguousIntegerSet<E>>> for OrderedIntegerSet<E>
impl<E: Integer + Copy + ToPrimitive> From<Vec<ContiguousIntegerSet<E>>> for OrderedIntegerSet<E>
Source§fn from(intervals: Vec<ContiguousIntegerSet<E>>) -> OrderedIntegerSet<E>
fn from(intervals: Vec<ContiguousIntegerSet<E>>) -> OrderedIntegerSet<E>
Source§impl<E> Intersect<&ContiguousIntegerSet<E>, OrderedIntegerSet<E>> for OrderedIntegerSet<E>
impl<E> Intersect<&ContiguousIntegerSet<E>, OrderedIntegerSet<E>> for OrderedIntegerSet<E>
fn intersect(&self, other: &ContiguousIntegerSet<E>) -> OrderedIntegerSet<E>
fn has_non_empty_intersection_with( &self, other: &ContiguousIntegerSet<E>, ) -> bool
Source§impl<E: Integer + Copy + ToPrimitive> Intersect<&OrderedIntegerSet<E>, OrderedIntegerSet<E>> for ContiguousIntegerSet<E>
impl<E: Integer + Copy + ToPrimitive> Intersect<&OrderedIntegerSet<E>, OrderedIntegerSet<E>> for ContiguousIntegerSet<E>
fn intersect(&self, other: &OrderedIntegerSet<E>) -> OrderedIntegerSet<E>
fn has_non_empty_intersection_with(&self, other: &OrderedIntegerSet<E>) -> bool
Source§impl<E> Intersect<&OrderedIntegerSet<E>, OrderedIntegerSet<E>> for OrderedIntegerSet<E>
impl<E> Intersect<&OrderedIntegerSet<E>, OrderedIntegerSet<E>> for OrderedIntegerSet<E>
fn intersect(&self, other: &OrderedIntegerSet<E>) -> OrderedIntegerSet<E>
fn has_non_empty_intersection_with(&self, other: &OrderedIntegerSet<E>) -> bool
Source§impl<E: PartialEq + Integer + Copy + ToPrimitive> PartialEq for OrderedIntegerSet<E>
impl<E: PartialEq + Integer + Copy + ToPrimitive> PartialEq for OrderedIntegerSet<E>
Source§impl<E> Sample<'_, ContiguousIntegerSetIter<E>, E, OrderedIntegerSet<E>> for ContiguousIntegerSet<E>
impl<E> Sample<'_, ContiguousIntegerSetIter<E>, E, OrderedIntegerSet<E>> for ContiguousIntegerSet<E>
Source§fn sample_subset_without_replacement<'s: 'a>(
&'s self,
size: usize,
) -> Result<O, String>
fn sample_subset_without_replacement<'s: 'a>( &'s self, size: usize, ) -> Result<O, String>
size
elements without replacement
size
: the number of samples to be drawn
returns Err if size
is larger than the population sizefn sample_with_replacement<'s: 'a>(&'s self, size: usize) -> Result<O, String>
Source§impl<E> Sample<'_, IntegerSetIter<E>, E, OrderedIntegerSet<E>> for OrderedIntegerSet<E>
impl<E> Sample<'_, IntegerSetIter<E>, E, OrderedIntegerSet<E>> for OrderedIntegerSet<E>
Source§fn sample_subset_without_replacement<'s: 'a>(
&'s self,
size: usize,
) -> Result<O, String>
fn sample_subset_without_replacement<'s: 'a>( &'s self, size: usize, ) -> Result<O, String>
size
elements without replacement
size
: the number of samples to be drawn
returns Err if size
is larger than the population sizefn sample_with_replacement<'s: 'a>(&'s self, size: usize) -> Result<O, String>
Source§impl<E: Integer + Copy + ToPrimitive> Set<E> for OrderedIntegerSet<E>
impl<E: Integer + Copy + ToPrimitive> Set<E> for OrderedIntegerSet<E>
Source§impl<E> Slicing<&OrderedIntegerSet<E>, OrderedIntegerSet<E>> for Range<usize>
impl<E> Slicing<&OrderedIntegerSet<E>, OrderedIntegerSet<E>> for Range<usize>
Source§fn slice(self, input: &OrderedIntegerSet<E>) -> OrderedIntegerSet<E>
fn slice(self, input: &OrderedIntegerSet<E>) -> OrderedIntegerSet<E>
the end
index is exclusive
Source§impl<E: Integer + Copy + ToPrimitive> Sub<&ContiguousIntegerSet<E>> for OrderedIntegerSet<E>
impl<E: Integer + Copy + ToPrimitive> Sub<&ContiguousIntegerSet<E>> for OrderedIntegerSet<E>
Source§type Output = OrderedIntegerSet<E>
type Output = OrderedIntegerSet<E>
-
operator.Source§impl<E: Integer + Copy + ToPrimitive> Sub<&OrderedIntegerSet<E>> for ContiguousIntegerSet<E>
impl<E: Integer + Copy + ToPrimitive> Sub<&OrderedIntegerSet<E>> for ContiguousIntegerSet<E>
Source§type Output = OrderedIntegerSet<E>
type Output = OrderedIntegerSet<E>
-
operator.Source§impl<E: Integer + Copy + ToPrimitive> Sub<&OrderedIntegerSet<E>> for OrderedIntegerSet<E>
impl<E: Integer + Copy + ToPrimitive> Sub<&OrderedIntegerSet<E>> for OrderedIntegerSet<E>
Source§type Output = OrderedIntegerSet<E>
type Output = OrderedIntegerSet<E>
-
operator.Source§impl<E: Integer + Copy + ToPrimitive> Sub<ContiguousIntegerSet<E>> for OrderedIntegerSet<E>
impl<E: Integer + Copy + ToPrimitive> Sub<ContiguousIntegerSet<E>> for OrderedIntegerSet<E>
Source§type Output = OrderedIntegerSet<E>
type Output = OrderedIntegerSet<E>
-
operator.Source§impl<E: Integer + Copy + ToPrimitive> Sub<OrderedIntegerSet<E>> for ContiguousIntegerSet<E>
impl<E: Integer + Copy + ToPrimitive> Sub<OrderedIntegerSet<E>> for ContiguousIntegerSet<E>
Source§type Output = OrderedIntegerSet<E>
type Output = OrderedIntegerSet<E>
-
operator.Source§impl<E: Integer + Copy + ToPrimitive> Sub for OrderedIntegerSet<E>
impl<E: Integer + Copy + ToPrimitive> Sub for OrderedIntegerSet<E>
Source§type Output = OrderedIntegerSet<E>
type Output = OrderedIntegerSet<E>
-
operator.Source§impl<E: Integer + Copy + ToPrimitive> SubAssign<&ContiguousIntegerSet<E>> for OrderedIntegerSet<E>
impl<E: Integer + Copy + ToPrimitive> SubAssign<&ContiguousIntegerSet<E>> for OrderedIntegerSet<E>
Source§fn sub_assign(&mut self, rhs: &ContiguousIntegerSet<E>)
fn sub_assign(&mut self, rhs: &ContiguousIntegerSet<E>)
-=
operation. Read moreSource§impl<E: Integer + Copy + ToPrimitive> SubAssign<&OrderedIntegerSet<E>> for OrderedIntegerSet<E>
impl<E: Integer + Copy + ToPrimitive> SubAssign<&OrderedIntegerSet<E>> for OrderedIntegerSet<E>
Source§fn sub_assign(&mut self, rhs: &OrderedIntegerSet<E>)
fn sub_assign(&mut self, rhs: &OrderedIntegerSet<E>)
-=
operation. Read moreSource§impl<E: Integer + Copy + ToPrimitive> SubAssign<ContiguousIntegerSet<E>> for OrderedIntegerSet<E>
impl<E: Integer + Copy + ToPrimitive> SubAssign<ContiguousIntegerSet<E>> for OrderedIntegerSet<E>
Source§fn sub_assign(&mut self, rhs: ContiguousIntegerSet<E>)
fn sub_assign(&mut self, rhs: ContiguousIntegerSet<E>)
-=
operation. Read moreSource§impl<E: Integer + Copy + ToPrimitive> SubAssign for OrderedIntegerSet<E>
impl<E: Integer + Copy + ToPrimitive> SubAssign for OrderedIntegerSet<E>
Source§fn sub_assign(&mut self, rhs: OrderedIntegerSet<E>)
fn sub_assign(&mut self, rhs: OrderedIntegerSet<E>)
-=
operation. Read moreSource§impl<E: Integer + Copy + ToPrimitive> ToIterator<'_, IntegerSetIter<E>, E> for OrderedIntegerSet<E>
impl<E: Integer + Copy + ToPrimitive> ToIterator<'_, IntegerSetIter<E>, E> for OrderedIntegerSet<E>
fn to_iter(&self) -> IntegerSetIter<E> ⓘ
impl<E: Eq + Integer + Copy + ToPrimitive> Eq for OrderedIntegerSet<E>
impl<E: Integer + Copy + ToPrimitive> StructuralPartialEq for OrderedIntegerSet<E>
Auto Trait Implementations§
impl<E> Freeze for OrderedIntegerSet<E>
impl<E> RefUnwindSafe for OrderedIntegerSet<E>where
E: RefUnwindSafe,
impl<E> Send for OrderedIntegerSet<E>where
E: Send,
impl<E> Sync for OrderedIntegerSet<E>where
E: Sync,
impl<E> Unpin for OrderedIntegerSet<E>where
E: Unpin,
impl<E> UnwindSafe for OrderedIntegerSet<E>where
E: UnwindSafe,
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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 more