Struct kalloc::list::List [−][src]
pub struct List<T> { /* fields omitted */ }
Expand description
A doubly-linked list with owned nodes.
The List
allows pushing and popping elements at either end
in constant time.
NOTE: It is almost always better to use Vec
or Vecque
because
array-based containers are generally faster,
more memory efficient, and make better use of CPU cache.
Implementations
impl<T> List<T>
[src]
impl<T> List<T>
[src]pub fn append(&mut self, other: &mut Self)
[src]
pub fn append(&mut self, other: &mut Self)
[src]Moves all elements from other
to the end of the list.
This reuses all the nodes from other
and moves them into self
. After
this operation, other
becomes empty.
This operation should compute in O(1) time and O(1) memory.
Examples
use kalloc::list::List; let mut list1 = List::new(); list1.push_back('a'); let mut list2 = List::new(); list2.push_back('b'); list2.push_back('c'); list1.append(&mut list2); let mut iter = list1.iter(); assert_eq!(iter.next(), Some(&'a')); assert_eq!(iter.next(), Some(&'b')); assert_eq!(iter.next(), Some(&'c')); assert!(iter.next().is_none()); assert!(list2.is_empty());
pub fn prepend(&mut self, other: &mut Self)
[src]
pub fn prepend(&mut self, other: &mut Self)
[src]Moves all elements from other
to the begin of the list.
pub fn iter(&self) -> Iter<'_, T>ⓘ
[src]
pub fn iter(&self) -> Iter<'_, T>ⓘ
[src]Provides a forward iterator.
Examples
use kalloc::list::List; let mut list: List<u32> = List::new(); list.push_back(0); list.push_back(1); list.push_back(2); let mut iter = list.iter(); assert_eq!(iter.next(), Some(&0)); assert_eq!(iter.next(), Some(&1)); assert_eq!(iter.next(), Some(&2)); assert_eq!(iter.next(), None);
pub fn iter_mut(&mut self) -> IterMut<'_, T>ⓘ
[src]
pub fn iter_mut(&mut self) -> IterMut<'_, T>ⓘ
[src]Provides a forward iterator with mutable references.
Examples
use kalloc::list::List; let mut list: List<u32> = List::new(); list.push_back(0); list.push_back(1); list.push_back(2); for element in list.iter_mut() { *element += 10; } let mut iter = list.iter(); assert_eq!(iter.next(), Some(&10)); assert_eq!(iter.next(), Some(&11)); assert_eq!(iter.next(), Some(&12)); assert_eq!(iter.next(), None);
pub fn cursor_front(&self) -> Cursor<'_, T>
[src]
pub fn cursor_front(&self) -> Cursor<'_, T>
[src]Provides a cursor at the front element.
The cursor is pointing to the “ghost” non-element if the list is empty.
pub fn cursor_front_mut(&mut self) -> CursorMut<'_, T>
[src]
pub fn cursor_front_mut(&mut self) -> CursorMut<'_, T>
[src]Provides a cursor with editing operations at the front element.
The cursor is pointing to the “ghost” non-element if the list is empty.
pub fn cursor_back(&self) -> Cursor<'_, T>
[src]
pub fn cursor_back(&self) -> Cursor<'_, T>
[src]Provides a cursor at the back element.
The cursor is pointing to the “ghost” non-element if the list is empty.
pub fn cursor_back_mut(&mut self) -> CursorMut<'_, T>
[src]
pub fn cursor_back_mut(&mut self) -> CursorMut<'_, T>
[src]Provides a cursor with editing operations at the back element.
The cursor is pointing to the “ghost” non-element if the list is empty.
pub fn is_empty(&self) -> bool
[src]
pub fn is_empty(&self) -> bool
[src]Returns true
if the List
is empty.
This operation should compute in O(1) time.
Examples
use kalloc::list::List; let mut dl = List::new(); assert!(dl.is_empty()); dl.push_front("foo"); assert!(!dl.is_empty());
pub fn len(&self) -> usize
[src]
pub fn len(&self) -> usize
[src]Returns the length of the List
.
This operation should compute in O(1) time.
Examples
use kalloc::list::List; let mut dl = List::new(); dl.push_front(2); assert_eq!(dl.len(), 1); dl.push_front(1); assert_eq!(dl.len(), 2); dl.push_back(3); assert_eq!(dl.len(), 3);
pub fn clear(&mut self)
[src]
pub fn clear(&mut self)
[src]Removes all elements from the List
.
This operation should compute in O(n) time.
Examples
use kalloc::list::List; let mut dl = List::new(); dl.push_front(2); dl.push_front(1); assert_eq!(dl.len(), 2); assert_eq!(dl.front(), Some(&1)); dl.clear(); assert_eq!(dl.len(), 0); assert_eq!(dl.front(), None);
pub fn contains(&self, x: &T) -> bool where
T: PartialEq<T>,
[src]
pub fn contains(&self, x: &T) -> bool where
T: PartialEq<T>,
[src]Returns true
if the List
contains an element equal to the
given value.
Examples
use kalloc::list::List; let mut list: List<u32> = List::new(); list.push_back(0); list.push_back(1); list.push_back(2); assert_eq!(list.contains(&0), true); assert_eq!(list.contains(&10), false);
pub fn front(&self) -> Option<&T>
[src]
pub fn front(&self) -> Option<&T>
[src]Provides a reference to the front element, or None
if the list is
empty.
Examples
use kalloc::list::List; let mut dl = List::new(); assert_eq!(dl.front(), None); dl.push_front(1); assert_eq!(dl.front(), Some(&1));
pub fn front_mut(&mut self) -> Option<&mut T>
[src]
pub fn front_mut(&mut self) -> Option<&mut T>
[src]Provides a mutable reference to the front element, or None
if the list
is empty.
Examples
use kalloc::list::List; let mut dl = List::new(); assert_eq!(dl.front(), None); dl.push_front(1); assert_eq!(dl.front(), Some(&1)); match dl.front_mut() { None => {}, Some(x) => *x = 5, } assert_eq!(dl.front(), Some(&5));
pub fn back(&self) -> Option<&T>
[src]
pub fn back(&self) -> Option<&T>
[src]Provides a reference to the back element, or None
if the list is
empty.
Examples
use kalloc::list::List; let mut dl = List::new(); assert_eq!(dl.back(), None); dl.push_back(1); assert_eq!(dl.back(), Some(&1));
pub fn back_mut(&mut self) -> Option<&mut T>
[src]
pub fn back_mut(&mut self) -> Option<&mut T>
[src]Provides a mutable reference to the back element, or None
if the list
is empty.
Examples
use kalloc::list::List; let mut dl = List::new(); assert_eq!(dl.back(), None); dl.push_back(1); assert_eq!(dl.back(), Some(&1)); match dl.back_mut() { None => {}, Some(x) => *x = 5, } assert_eq!(dl.back(), Some(&5));
pub fn push_front(&mut self, elt: T) -> Result<(), AllocError>
[src]
pub fn push_front(&mut self, elt: T) -> Result<(), AllocError>
[src]Adds an element first in the list.
This operation should compute in O(1) time.
Examples
use kalloc::list::List; let mut dl = List::new(); dl.push_front(2); assert_eq!(dl.front().unwrap(), &2); dl.push_front(1); assert_eq!(dl.front().unwrap(), &1);
pub fn pop_front(&mut self) -> Option<T>
[src]
pub fn pop_front(&mut self) -> Option<T>
[src]Removes the first element and returns it, or None
if the list is
empty.
This operation should compute in O(1) time.
Examples
use kalloc::list::List; let mut d = List::new(); assert_eq!(d.pop_front(), None); d.push_front(1); d.push_front(3); assert_eq!(d.pop_front(), Some(3)); assert_eq!(d.pop_front(), Some(1)); assert_eq!(d.pop_front(), None);
pub fn push_back(&mut self, elt: T) -> Result<(), AllocError>
[src]
pub fn push_back(&mut self, elt: T) -> Result<(), AllocError>
[src]Appends an element to the back of a list.
This operation should compute in O(1) time.
Examples
use kalloc::list::List; let mut d = List::new(); d.push_back(1); d.push_back(3); assert_eq!(3, *d.back().unwrap());
pub fn pop_back(&mut self) -> Option<T>
[src]
pub fn pop_back(&mut self) -> Option<T>
[src]Removes the last element from a list and returns it, or None
if
it is empty.
This operation should compute in O(1) time.
Examples
use kalloc::list::List; let mut d = List::new(); assert_eq!(d.pop_back(), None); d.push_back(1); d.push_back(3); assert_eq!(d.pop_back(), Some(3));
pub fn split_off(&mut self, at: usize) -> List<T>
[src]
pub fn split_off(&mut self, at: usize) -> List<T>
[src]Splits the list into two at the given index. Returns everything after the given index, including the index.
This operation should compute in O(n) time.
Panics
Panics if at > len
.
Examples
use kalloc::list::List; let mut d = List::new(); d.push_front(1); d.push_front(2); d.push_front(3); let mut split = d.split_off(2); assert_eq!(split.pop_front(), Some(1)); assert_eq!(split.pop_front(), None);
pub fn remove(&mut self, at: usize) -> T
[src]
pub fn remove(&mut self, at: usize) -> T
[src]Removes the element at the given index and returns it.
This operation should compute in O(n) time.
Panics
Panics if at >= len
Examples
#![feature(linked_list_remove)] use kalloc::list::List; let mut d = List::new(); d.push_front(1); d.push_front(2); d.push_front(3); assert_eq!(d.remove(1), 2); assert_eq!(d.remove(0), 3); assert_eq!(d.remove(0), 1);
Trait Implementations
impl<T> IntoIterator for List<T>
[src]
impl<T> IntoIterator for List<T>
[src]impl<'a, T> IntoIterator for &'a List<T>
[src]
impl<'a, T> IntoIterator for &'a List<T>
[src]impl<'a, T> IntoIterator for &'a mut List<T>
[src]
impl<'a, T> IntoIterator for &'a mut List<T>
[src]impl<T: Ord> Ord for List<T>
[src]
impl<T: Ord> Ord for List<T>
[src]impl<T: PartialOrd> PartialOrd<List<T>> for List<T>
[src]
impl<T: PartialOrd> PartialOrd<List<T>> for List<T>
[src]fn partial_cmp(&self, other: &Self) -> Option<Ordering>
[src]
fn partial_cmp(&self, other: &Self) -> Option<Ordering>
[src]This method returns an ordering between self
and other
values if one exists. Read more
#[must_use]fn lt(&self, other: &Rhs) -> bool
1.0.0[src]
#[must_use]fn lt(&self, other: &Rhs) -> bool
1.0.0[src]This method tests less than (for self
and other
) and is used by the <
operator. Read more
#[must_use]fn le(&self, other: &Rhs) -> bool
1.0.0[src]
#[must_use]fn le(&self, other: &Rhs) -> bool
1.0.0[src]This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
impl<T: Eq> Eq for List<T>
[src]
impl<T: Send> Send for List<T>
[src]
impl<T: Sync> Sync for List<T>
[src]
Auto Trait Implementations
impl<T> RefUnwindSafe for List<T> where
T: RefUnwindSafe,
T: RefUnwindSafe,
impl<T> Unpin for List<T>
impl<T> UnwindSafe for List<T> where
T: RefUnwindSafe + UnwindSafe,
T: RefUnwindSafe + UnwindSafe,
Blanket Implementations
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]pub fn borrow_mut(&mut self) -> &mut T
[src]
pub fn borrow_mut(&mut self) -> &mut T
[src]Mutably borrows from an owned value. Read more