Struct tsil_cev::TsilCev[][src]

pub struct TsilCev<T> { /* fields omitted */ }

Implementations

impl<T> TsilCev<T>[src]

pub fn with_capacity(cap: usize) -> Self[src]

Constructs a new, empty TsilCev with the specified capacity like in Vec.

use tsil_cev::TsilCev;

let tc = TsilCev::<()>::with_capacity(4);
assert_eq!(tc.len(), 0);
assert_eq!(tc.capacity(), 4);

pub const fn new() -> Self[src]

Constructs a new, empty TsilCev.

use tsil_cev::TsilCev;

let mut tc = TsilCev::new();
assert_eq!(tc.len(), 0);
assert_eq!(tc.capacity(), 0);

tc.push_back(5);
assert_eq!(tc.len(), 1);
assert!(tc.capacity() >= 1);

pub fn clear(&mut self)[src]

Deletes all values from TsilCev like in Vec.

use tsil_cev::TsilCev;

let mut tc = TsilCev::from(vec![0, 1, 2, 3]);
assert_eq!(tc.len(), 4);
assert!(tc.capacity() >= 4);

tc.clear();
assert_eq!(tc.len(), 0);

pub fn iter_tsil(&self) -> TsilIter<'_, T>

Notable traits for TsilIter<'t, T>

impl<'t, T: 't> Iterator for TsilIter<'t, T> type Item = &'t T;
[src]

Returns Tsil iterator. Iterating as in LinkedList.

use tsil_cev::TsilCev;

let mut tc = TsilCev::new();
tc.push_back(10);
tc.push_front(0);
let mut cev_iter = tc.iter_tsil();

assert_eq!(cev_iter.next(), Some(&0));
assert_eq!(cev_iter.next(), Some(&10));
assert_eq!(cev_iter.next(), None);

pub fn iter_tsil_mut(&mut self) -> TsilIterMut<'_, T>

Notable traits for TsilIterMut<'t, T>

impl<'t, T: 't> Iterator for TsilIterMut<'t, T> type Item = &'t mut T;
[src]

Returns Tsil iterator. Iterating as in LinkedList that allows modifying each value.

use tsil_cev::TsilCev;

let mut tc = TsilCev::new();
tc.push_back(10);
tc.push_front(0);
for x in tc.iter_tsil_mut() {
    *x *= 20;
}

assert_eq!(tc.into_vec(), &[0, 200]);

pub fn iter_cev(&self) -> CevIter<'_, T>

Notable traits for CevIter<'t, T>

impl<'t, T: 't> Iterator for CevIter<'t, T> type Item = &'t T;
[src]

Returns Cev iterator. Iterating as in Vec.

use tsil_cev::TsilCev;

let mut tc = TsilCev::new();
tc.push_back(10);
tc.push_front(0);
let mut cev_iter = tc.iter_cev();

assert_eq!(cev_iter.next(), Some(&10));
assert_eq!(cev_iter.next(), Some(&0));
assert_eq!(cev_iter.next(), None);

pub fn iter_cev_mut(&mut self) -> CevIterMut<'_, T>

Notable traits for CevIterMut<'t, T>

impl<'t, T: 't> Iterator for CevIterMut<'t, T> type Item = &'t mut T;
[src]

Returns Cev iterator. Iterating as in Vec that allows modifying each value.

use tsil_cev::TsilCev;

let mut tc = TsilCev::new();
tc.push_back(10);
tc.push_front(0);
for x in tc.iter_cev_mut() {
    *x *= 20;
}

assert_eq!(tc.into_vec(), &[0, 200]);

pub fn drain_filter_tsil<F>(&mut self, pred: F) -> DrainFilterTsil<'_, T, F>

Notable traits for DrainFilterTsil<'_, T, F>

impl<T, F> Iterator for DrainFilterTsil<'_, T, F> where
    F: FnMut(&mut T) -> bool, 
type Item = T;
where
    F: FnMut(&mut T) -> bool, 
[src]

Creates an Tsil iterator which uses a mutate closure to determine if an element should be removed like in LinkedList.

If the closure returns true, then the element is removed and yielded. If the closure returns false, the element will remain in the TsilCev and will not be yielded by the iterator.

use tsil_cev::TsilCev;

let mut tc = TsilCev::new();
tc.push_front(4);
tc.push_front(3);
tc.push_front(2);
tc.push_front(1);
tc.push_front(0);
tc.push_back(5);
tc.push_back(6);
tc.push_back(7);
tc.push_back(8);
tc.push_back(9);

let less_eq_four = tc.drain_filter_tsil(|x| *x <= 4).collect::<Vec<_>>();

assert_eq!(less_eq_four, &[0, 1, 2, 3, 4]); // note the order of the sequence (Tsil iterator)
assert_eq!(tc.into_vec(), &[5, 6, 7, 8, 9]);

pub fn drain_filter_cev<F>(&mut self, pred: F) -> DrainFilterCev<'_, T, F>

Notable traits for DrainFilterCev<'_, T, F>

impl<T, F> Iterator for DrainFilterCev<'_, T, F> where
    F: FnMut(&mut T) -> bool, 
type Item = T;
where
    F: FnMut(&mut T) -> bool, 
[src]

More efficient then drain_filter_tsil because use Cev iterator. But the iteration order is not the same as in LinkedList. Creates an Cev iterator which uses a mutate closure to determine if an element should be removed like in Vec.

If the closure returns true, then the element is removed and yielded. If the closure returns false, the element will remain in the TsilCev and will not be yielded by the iterator.

use tsil_cev::TsilCev;

let mut tc = TsilCev::new();
tc.push_front(4);
tc.push_front(3);
tc.push_front(2);
tc.push_front(1);
tc.push_front(0);
tc.push_back(5);
tc.push_back(6);
tc.push_back(7);
tc.push_back(8);
tc.push_back(9);

let less_eq_four = tc.drain_filter_cev(|x| *x <= 4).collect::<Vec<_>>();

assert_eq!(less_eq_four, &[4, 3, 2, 1, 0]); // note the order of the sequence (Cev iterator)
assert_eq!(tc.into_vec(), &[5, 6, 7, 8, 9]);

pub fn front(&self) -> Option<&T>[src]

Returns reference to the front (start) element or None if TsilCev is empty like in LinkedList.

use tsil_cev::TsilCev;

let mut tc = TsilCev::from(vec![0, 1, 2, 3, 4]);
assert_eq!(tc.front(), Some(&0));
assert_eq!(TsilCev::<()>::new().front(), None);

pub fn back(&self) -> Option<&T>[src]

Returns reference to the back (end) element or None if TsilCev is empty like in LinkedList.

use tsil_cev::TsilCev;

let mut tc = TsilCev::from(vec![0, 1, 2, 3, 4]);
assert_eq!(tc.back(), Some(&4));
assert_eq!(TsilCev::<()>::new().back(), None);

pub fn front_mut(&mut self) -> Option<&mut T>[src]

Returns mutable reference to the front (start) element or None if TsilCev is empty like in LinkedList.

use tsil_cev::TsilCev;

let mut tc = TsilCev::from(vec![0, 1, 2, 3, 4]);
match tc.front_mut() {
    Some(x) => *x = 10,
    None => {},
}

assert_eq!(tc.front(), Some(&10));
assert_eq!(TsilCev::<()>::new().front(), None);

pub fn back_mut(&mut self) -> Option<&mut T>[src]

Returns mutable reference to the back (end) element or None if TsilCev is empty like in LinkedList.

use tsil_cev::TsilCev;

let mut tc = TsilCev::from(vec![0, 1, 2, 3, 4]);
match tc.back_mut() {
    Some(x) => *x = 14,
    None => {},
}

assert_eq!(tc.back(), Some(&14));
assert_eq!(TsilCev::<()>::new().back(), None);

pub fn cursor_front(&self) -> Cursor<'_, T>[src]

Returns cursor to the front (start) element.

use tsil_cev::TsilCev;

let tc = TsilCev::from(vec![0, 1, 2, 3, 4]);
let cursor = tc.cursor_front();

assert_eq!(cursor.current(), tc.front());

pub fn cursor_back(&self) -> Cursor<'_, T>[src]

Returns cursor to the end (back) element.

use tsil_cev::TsilCev;

let tc = TsilCev::from(vec![0, 1, 2, 3, 4]);
let cursor = tc.cursor_back();

assert_eq!(cursor.current(), tc.back());

pub fn cursor_front_mut(&mut self) -> CursorMut<'_, T>[src]

Returns mutable cursor to the front (start) element.

use tsil_cev::TsilCev;

let mut tc = TsilCev::from(vec![0, 1, 2, 3, 4]);
let mut cursor = tc.cursor_front_mut();
if let Some(x) = cursor.current_mut() {
    *x = 14;
}

assert_eq!(cursor.current(), Some(&14));
assert_eq!(tc.into_vec(), &[14, 1, 2, 3, 4]);

pub fn cursor_back_mut(&mut self) -> CursorMut<'_, T>[src]

Returns mutable cursor to the back (end) element.

use tsil_cev::TsilCev;

let mut tc = TsilCev::from(vec![0, 1, 2, 3, 4]);
let mut cursor = tc.cursor_back_mut();
if let Some(x) = cursor.current_mut() {
    *x = 14;
}

assert_eq!(cursor.current(), Some(&14));
assert_eq!(tc.into_vec(), &[0, 1, 2, 3, 14]);

pub fn cursor_idx_tsil(&self, idx: usize) -> Cursor<'_, T>[src]

Returns cursor to the element with LinkedList order.

use tsil_cev::TsilCev;

let mut tc = TsilCev::new();
tc.push_front(3);
tc.push_front(2);
tc.push_front(1);
tc.push_back(4);

assert_eq!(tc.cursor_idx_tsil(0).current(), Some(&1));
assert_eq!(tc.cursor_idx_tsil(1).current(), Some(&2));
assert_eq!(tc.cursor_idx_tsil(2).current(), Some(&3));
assert_eq!(tc.cursor_idx_tsil(3).current(), Some(&4));

pub fn cursor_idx_tsil_mut(&mut self, idx: usize) -> CursorMut<'_, T>[src]

Returns mutable cursor to the element with LinkedList order.

use tsil_cev::TsilCev;

let mut tc = TsilCev::new();
tc.push_front(3);
tc.push_front(2);
tc.push_front(1);
tc.push_back(4);

*tc.cursor_idx_tsil_mut(0).current_mut().unwrap() = 0;
*tc.cursor_idx_tsil_mut(1).current_mut().unwrap() = 0;
*tc.cursor_idx_tsil_mut(2).current_mut().unwrap() = 0;
*tc.cursor_idx_tsil_mut(3).current_mut().unwrap() = 1;
assert_eq!(tc.cursor_idx_tsil_mut(0).current(), Some(&0));
assert_eq!(tc.cursor_idx_tsil_mut(1).current(), Some(&0));
assert_eq!(tc.cursor_idx_tsil_mut(2).current(), Some(&0));
assert_eq!(tc.cursor_idx_tsil_mut(3).current(), Some(&1));

pub fn into_vec(self) -> Vec<T>[src]

Transform TsilCev to Vec with LinkedList order.

use tsil_cev::TsilCev;

let mut tc = TsilCev::new();
tc.push_front(3);
tc.push_front(2);
tc.push_front(1);
tc.push_back(4);

assert_eq!(tc.into_vec(), vec![1, 2, 3, 4]);

pub fn make_linked_list_order(&mut self)[src]

Places elements inside TsilCev in the order of LinkedList without using additional memory.

use tsil_cev::TsilCev;

let mut tc = TsilCev::new();
tc.push_front(3);
tc.push_front(2);
tc.push_front(1);
tc.push_back(4);

tc.make_linked_list_order();
assert_eq!(tc.iter_cev().copied().collect::<Vec<_>>(), vec![1, 2, 3, 4]);

pub fn sort_by(&mut self, mut cmp: impl FnMut(&T, &T) -> Ordering)[src]

Sorts the slice with a comparator function like in Vec. This sort is stable (i.e., does not reorder equal elements) and O(n * log(n)) worst-case.

use tsil_cev::TsilCev;

let mut tc = TsilCev::from(vec![5, 4, 1, 3, 2]);
tc.sort_by(|a, b| a.cmp(b));
assert_eq!(tc.to_vec(), &[1, 2, 3, 4, 5]);

// reverse sorting
tc.sort_by(|a, b| b.cmp(a));
assert_eq!(tc.to_vec(), &[5, 4, 3, 2, 1]);

pub fn sort_by_key<K: Ord>(&mut self, mut f: impl FnMut(&T) -> K)[src]

Sorts the slice with a key extraction function like in Vec. This sort is stable (i.e., does not reorder equal elements) and O(m * n * log(n)) worst-case, where the key function is O(m).

use tsil_cev::TsilCev;

let mut tc = TsilCev::from(vec![-5i32, 4, 1, -3, 2]);

tc.sort_by_key(|k| k.abs());
assert_eq!(tc.to_vec(), &[1, 2, -3, 4, -5]);

pub fn sort_by_cached_key<K: Ord>(&mut self, mut f: impl FnMut(&T) -> K)[src]

Sorts the slice with a key extraction function like in Vec. During sorting, the key function is called only once per element.

use tsil_cev::TsilCev;

let mut tc = TsilCev::from(vec![-5i32, 4, 32, -3, 2]);

tc.sort_by_cached_key(|k| k.to_string());
assert_eq!(tc.to_vec(), &[-3, -5, 2, 32, 4]);

pub fn sort_unstable_by(&mut self, mut cmp: impl FnMut(&T, &T) -> Ordering)[src]

Sorts the slice with a comparator function, but may not preserve the order of equal elements like in Vec. This sort is unstable (i.e., may reorder equal elements), in-place (i.e., does not allocate), and O(n * log(n)) worst-case.

use tsil_cev::TsilCev;

let mut tc = TsilCev::from(vec![5, 4, 1, 3, 2]);
tc.sort_unstable_by(|a, b| a.cmp(b));
assert_eq!(tc.to_vec(), &[1, 2, 3, 4, 5]);

// reverse sorting
tc.sort_unstable_by(|a, b| b.cmp(a));
assert_eq!(tc.to_vec(), &[5, 4, 3, 2, 1]);

pub fn sort_unstable_by_key<K: Ord>(&mut self, mut f: impl FnMut(&T) -> K)[src]

Sorts the slice with a key extraction function, but may not preserve the order of equal elements like in Vec. This sort is unstable (i.e., may reorder equal elements), in-place (i.e., does not allocate), and O(m * n * log(n)) worst-case, where the key function is O(m).

use tsil_cev::TsilCev;

let mut tc = TsilCev::from(vec![-5i32, 4, 1, -3, 2]);

tc.sort_unstable_by_key(|k| k.abs());
assert_eq!(tc.to_vec(), &[1, 2, -3, 4, -5]);

pub fn reserve(&mut self, additional: usize)[src]

Reserves capacity for at least additional more elements to be inserted like in Vec.

use tsil_cev::TsilCev;

let mut tc = TsilCev::from(vec![0, 1, 2, 3, 4]);

assert_eq!(tc.len(), 5);
assert!(tc.capacity() >= 5);

tc.reserve(10);
assert_eq!(tc.len(), 5);
assert!(tc.capacity() >= 15);

pub fn reserve_exact(&mut self, additional: usize)[src]

Reserves the minimum capacity for exactly additional more elements to be inserted in the given TsilCev like in Vec.

use tsil_cev::TsilCev;

let mut tc = TsilCev::from(vec![0, 1, 2, 3, 4]);

assert_eq!(tc.len(), 5);
assert!(tc.capacity() >= 5);

tc.reserve_exact(10);
assert_eq!(tc.len(), 5);
assert!(tc.capacity() >= 15);

pub fn shrink_to_fit(&mut self)[src]

Shrinks the capacity of the TsilCev as much as possible like in Vec.

use tsil_cev::TsilCev;

let mut tc = TsilCev::from(vec![0, 1, 2, 3, 4]);

assert!(tc.capacity() >= 5);

tc.shrink_to_fit();
assert_eq!(tc.capacity(), 5);

pub fn capacity(&self) -> usize[src]

Returns the number of elements the TsilCev can hold without reallocating like in Vec.

use tsil_cev::TsilCev;

let mut tc = TsilCev::from(vec![0, 1, 2, 3, 4]);

assert!(tc.capacity() >= 5);

pub fn len(&self) -> usize[src]

Returns the number of elements in the TsilCev like in Vec.

use tsil_cev::TsilCev;

let mut tc = TsilCev::from(vec![0, 1, 2, 3, 4]);
assert_eq!(tc.capacity(), 5);

pub fn is_empty(&self) -> bool[src]

Returns true if the TsilCev contains no elements like in Vec.

use tsil_cev::TsilCev;

let mut tc = TsilCev::from(vec![0, 1, 2, 3, 4]);
assert_eq!(tc.is_empty(), false);

tc.clear();
assert_eq!(tc.is_empty(), true);

pub fn push_back(&mut self, val: T)[src]

Appends an element to the back (end) of a TsilCev like in Vec.

use tsil_cev::TsilCev;

let mut tc = TsilCev::from(vec![0, 1, 2, 3, 4]);

tc.push_back(5);
assert_eq!(tc.into_vec(), &[0, 1, 2, 3, 4, 5]);

pub fn pop_back(&mut self) -> Option<T>[src]

Removes the last element from a TsilCev and returns it, or None if it is empty like in Vec.

use tsil_cev::TsilCev;

let mut tc = TsilCev::from(vec![0, 1, 2, 3, 4]);

tc.pop_back();
assert_eq!(tc.into_vec(), &[0, 1, 2, 3]);

pub fn push_front(&mut self, val: T)[src]

Appends an element to the front (start) of a TsilCev like in Vec.

use tsil_cev::TsilCev;

let mut tc = TsilCev::from(vec![0, 1, 2, 3, 4]);

tc.push_front(5);
assert_eq!(tc.into_vec(), &[5, 0, 1, 2, 3, 4]);

pub fn pop_front(&mut self) -> Option<T>[src]

Removes the first element from a TsilCev and returns it, or None if it is empty like in Vec.

use tsil_cev::TsilCev;

let mut tc = TsilCev::from(vec![0, 1, 2, 3, 4]);

tc.pop_front();
assert_eq!(tc.into_vec(), &[1, 2, 3, 4]);

impl<T: Clone> TsilCev<T>[src]

pub fn to_vec(&self) -> Vec<T>[src]

Copies TsilCev into a new Vec with LinkedList order.

use tsil_cev::TsilCev;

let mut tc = TsilCev::new();
tc.push_front(3);
tc.push_front(2);
tc.push_front(1);
tc.push_back(4);

assert_eq!(tc.to_vec(), vec![1, 2, 3, 4]);

Trait Implementations

impl<T: Clone> Clone for TsilCev<T>[src]

impl<T: Debug> Debug for TsilCev<T>[src]

impl<T: Default> Default for TsilCev<T>[src]

impl<T: Eq> Eq for TsilCev<T>[src]

impl<'t, T: 't + Copy> Extend<&'t T> for TsilCev<T>[src]

impl<T> Extend<T> for TsilCev<T>[src]

fn extend<I: IntoIterator<Item = T>>(&mut self, iter: I)[src]

use tsil_cev::TsilCev;

let mut tc = TsilCev::from(vec![0, 1, 2, 3, 4]);
tc.extend((5..=10).into_iter());

assert_eq!(tc.into_vec(), &[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);

let mut tc = TsilCev::new();
tc.extend((0..=4).into_iter());

assert_eq!(tc.into_vec(), TsilCev::from(vec![0, 1, 2, 3, 4]).into_vec());

impl<T: Clone> From<&'_ [T]> for TsilCev<T>[src]

fn from(slice: &[T]) -> Self[src]

use tsil_cev::TsilCev;

let tc = TsilCev::from(vec![0, 1, 2, 3, 4].as_slice());

assert_eq!(tc.front(), Some(&0));
assert_eq!(tc.back(), Some(&4));
assert_eq!(tc.into_vec(), &[0, 1, 2, 3, 4]);

impl<T: Clone> From<&'_ Vec<T, Global>> for TsilCev<T>[src]

fn from(vec: &Vec<T>) -> Self[src]

use tsil_cev::TsilCev;

let tc = TsilCev::from(&vec![0, 1, 2, 3, 4]);

assert_eq!(tc.front(), Some(&0));
assert_eq!(tc.back(), Some(&4));
assert_eq!(tc.into_vec(), &[0, 1, 2, 3, 4]);

impl<T> From<Vec<T, Global>> for TsilCev<T>[src]

fn from(vec: Vec<T>) -> Self[src]

use tsil_cev::TsilCev;

let tc = TsilCev::from(vec![0, 1, 2, 3, 4]);

assert_eq!(tc.front(), Some(&0));
assert_eq!(tc.back(), Some(&4));
assert_eq!(tc.into_vec(), &[0, 1, 2, 3, 4]);

impl<T> FromIterator<T> for TsilCev<T>[src]

fn from_iter<I: IntoIterator<Item = T>>(iter: I) -> Self[src]

use tsil_cev::TsilCev;

let tc = (0..=4).into_iter().map(|x| x).collect::<TsilCev<_>>();

assert_eq!(tc.into_vec(), &[0, 1, 2, 3, 4]);

impl<T: Hash> Hash for TsilCev<T>[src]

impl<T> IntoIterator for TsilCev<T>[src]

type Item = T

The type of the elements being iterated over.

type IntoIter = TsilIntoIter<T>

Which kind of iterator are we turning this into?

impl<'t, T> IntoIterator for &'t TsilCev<T>[src]

type Item = &'t T

The type of the elements being iterated over.

type IntoIter = TsilIter<'t, T>

Which kind of iterator are we turning this into?

impl<'t, T> IntoIterator for &'t mut TsilCev<T>[src]

type Item = &'t mut T

The type of the elements being iterated over.

type IntoIter = TsilIterMut<'t, T>

Which kind of iterator are we turning this into?

impl<T: Ord> Ord for TsilCev<T>[src]

impl<T: PartialEq> PartialEq<TsilCev<T>> for TsilCev<T>[src]

impl<T: PartialOrd> PartialOrd<TsilCev<T>> for TsilCev<T>[src]

Auto Trait Implementations

impl<T> Send for TsilCev<T> where
    T: Send
[src]

impl<T> Sync for TsilCev<T> where
    T: Sync
[src]

impl<T> Unpin for TsilCev<T> where
    T: Unpin
[src]

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.