[−][src]Struct lz_diet::Diet
An AVL balanced Discrete Interval Encoding Tree where each node represents a discrete (non-touching) interval.
Implementations
impl<T> Diet<T>
[src]
pub fn new() -> Self
[src]
Creates a new Diet<T>
.
use lz_diet::Diet; let diet : Diet<u32> = Diet::new();
pub fn iter(&self) -> Iter<'_, T>ⓘ
[src]
Iterate over a borrow of the Interval<T>
values.
use lz_diet::Diet; let mut diet = Diet::new(); diet.insert(5u32); let intervals : Vec<_> = diet.iter().collect(); assert_eq!(intervals, vec![&(5..6).into()]);
pub fn clear(&mut self)
[src]
Clears the Diet<T>
.
use lz_diet::Diet; let mut diet = Diet::new(); diet.insert(7u32); assert_eq!(diet.len(), 1); assert_eq!(diet.is_empty(), false); diet.clear(); assert_eq!(diet.len(), 0); assert_eq!(diet.is_empty(), true);
pub fn len(&self) -> usize
[src]
Gets the number of Interval<T>
values in the tree.
use lz_diet::Diet; let mut diet = Diet::new(); assert_eq!(diet.len(), 0); diet.insert(8u32); assert_eq!(diet.len(), 1); diet.insert(10); assert_eq!(diet.len(), 2, "a new interval should have started"); diet.insert(9); assert_eq!(diet.len(), 1, "the previous intervals should have merged");
pub fn is_empty(&self) -> bool
[src]
Gets whether the Diet<T>
is empty or contains Interval<T>
values.
use lz_diet::Diet; let mut diet = Diet::new(); assert!(diet.is_empty(), "a new tree should always be empty"); diet.insert(7u32); assert_eq!(diet.is_empty(), false); diet.clear(); assert_eq!(diet.is_empty(), true);
pub fn contains<Q: ?Sized>(&self, value: &Q) -> bool where
T: Borrow<Q>,
Q: Ord,
[src]
T: Borrow<Q>,
Q: Ord,
Gets whether the Diet<T>
contains the specified value.
use lz_diet::Diet; let mut diet = Diet::new(); assert_eq!(diet.contains(&5), false); diet.insert(5u32); assert!(diet.contains(&5));
pub fn find_next_gap<'a, 'b, Q: ?Sized>(&'b self, from: &'a Q) -> &'a Q where
T: Borrow<Q>,
Q: Ord,
'b: 'a,
[src]
T: Borrow<Q>,
Q: Ord,
'b: 'a,
Get the next value outside the Diet<T>
Returns a value r
that's greater or equal to from
and for which diet.contains(r)
returns false
.
impl<T: AdjacentBound> Diet<T>
[src]
pub fn insert(&mut self, value: T) -> bool
[src]
Inserts a new value into the Diet<T>
.
Returns
true - if the value was inserted. false - if the value already existed contained.
use lz_diet::Diet; let mut diet = Diet::new(); assert!(diet.insert(5u32)); assert_eq!(diet.insert(5), false); assert_eq!(diet.iter().collect::<Vec<_>>(), vec![&(5..6).into()]); assert!(diet.insert(15u32)); assert_eq!(diet.insert(15), false);
pub fn remove<Q: ?Sized>(&mut self, value: Cow<'_, Q>) -> bool where
T: Borrow<Q>,
Q: Ord + ToOwned<Owned = T> + AdjacentBound,
[src]
T: Borrow<Q>,
Q: Ord + ToOwned<Owned = T> + AdjacentBound,
Removes a value from the Diet<T>
.
This takes a Cow<T>
as an owned value is only required if the value
is in the middle of an Interval<T>
.
Returns
true - if the value was found and removed. false - if the value was not found.
use lz_diet::Diet; use std::borrow::Cow; let mut diet = Diet::new(); let to_remove = 5u32; // for a u32 we would probably just use Owned but this demonstrates how // borrowed values may also be used. assert_eq!(diet.remove(Cow::Borrowed(&to_remove)), false); diet.insert(5u32); assert!(diet.remove(Cow::Borrowed(&to_remove)));
pub fn split<Q: ?Sized>(&mut self, value: Cow<'_, Q>) -> (Diet<T>, Diet<T>) where
T: Borrow<Q>,
Q: Ord + ToOwned<Owned = T> + AdjacentBound,
[src]
T: Borrow<Q>,
Q: Ord + ToOwned<Owned = T> + AdjacentBound,
Splits a Diet<T>
on a value. This will drain the elements from self.
Returns
Two Diet<T>
values where the first contains children less than the
value and the second is all children greater than the value.
use lz_diet::Diet; use std::borrow::Cow; let mut diet = Diet::new(); diet.extend_from_slice(&[6u32, 7, 10, 11, 15, 16, 17]); let (left, right) = diet.split(Cow::Owned(16)); assert_eq!(left.into_iter().collect::<Vec<_>>(), vec![(6..8).into(), (10..12).into(), (15..16).into()]); assert_eq!(right.into_iter().collect::<Vec<_>>(), vec![(17..18).into()]);
impl<T: AdjacentBound + Clone> Diet<T>
[src]
pub fn extend_from_slice(&mut self, other: &[T])
[src]
Trait Implementations
impl<T> BinaryTree for Diet<T>
[src]
impl<T: Clone> Clone for Diet<T>
[src]
impl<T: Debug> Debug for Diet<T>
[src]
impl<T> Default for Diet<T>
[src]
impl<T> Drop for Diet<T>
[src]
impl<T: Eq> Eq for Diet<T>
[src]
impl<A: AdjacentBound> FromIterator<A> for Diet<A>
[src]
fn from_iter<T>(iter: T) -> Self where
T: IntoIterator<Item = A>,
[src]
T: IntoIterator<Item = A>,
impl<T: Hash> Hash for Diet<T>
[src]
fn hash<H: Hasher>(&self, state: &mut H)
[src]
fn hash_slice<H>(data: &[Self], state: &mut H) where
H: Hasher,
1.3.0[src]
H: Hasher,
impl<'a, T> IntoIterator for &'a Diet<T>
[src]
type Item = &'a Interval<T>
The type of the elements being iterated over.
type IntoIter = Iter<'a, T>
Which kind of iterator are we turning this into?
fn into_iter(self) -> Self::IntoIter
[src]
impl<T> IntoIterator for Diet<T>
[src]
type Item = Interval<T>
The type of the elements being iterated over.
type IntoIter = IntoIter<T>
Which kind of iterator are we turning this into?
fn into_iter(self) -> Self::IntoIter
[src]
impl<T: PartialEq> PartialEq<Diet<T>> for Diet<T>
[src]
impl<T> StructuralEq for Diet<T>
[src]
Auto Trait Implementations
impl<T> RefUnwindSafe for Diet<T> where
T: RefUnwindSafe,
T: RefUnwindSafe,
impl<T> Send for Diet<T> where
T: Send,
T: Send,
impl<T> Sync for Diet<T> where
T: Sync,
T: Sync,
impl<T> Unpin for Diet<T>
impl<T> UnwindSafe for Diet<T> where
T: UnwindSafe,
T: UnwindSafe,
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<I> IntoIterator for I where
I: Iterator,
[src]
I: Iterator,
type Item = <I as Iterator>::Item
The type of the elements being iterated over.
type IntoIter = I
Which kind of iterator are we turning this into?
pub fn into_iter(self) -> I
[src]
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
pub fn to_owned(&self) -> T
[src]
pub fn clone_into(&self, target: &mut T)
[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,