Struct slice_deque::SliceDeque[][src]

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

A double-ended queue that derefs into a slice.

It is implemented with a growable virtual ring buffer.

Methods

impl<T> SliceDeque<T>
[src]

Creates a new empty deque.

Examples

let deq = SliceDeque::new();

Creates a SliceDeque from its raw components.

The ptr must be a pointer to the beginning of the memory buffer from another SliceDeque, and capacity the capacity of this SliceDeque.

Create an empty deque with capacity to hold n elements.

Examples

let deq = SliceDeque::with_capacity(10);

Returns the number of elements that the deque can hold without reallocating.

Examples

let deq = SliceDeque::with_capacity(10);
assert!(deq.capacity() >= 10);

Number of elements in the ring buffer.

Examples

let mut deq = SliceDeque::with_capacity(10);
assert!(deq.len() == 0);
deq.push_back(3);
assert!(deq.len() == 1);

Is the ring buffer full ?

Examples

let mut deq = SliceDeque::with_capacity(10);
assert!(!deq.is_full());

Extracts a slice containing the entire deque.

Extracts a mutable slice containing the entire deque.

Returns a pair of slices, where the first slice contains the contents of the deque and the second one is empty.

Returns a pair of slices, where the first slice contains the contents of the deque and the second one is empty.

Returns the slice of uninitialized memory between the tail and the head.

Examples

let mut d = sdeq![1, 2, 3];
let cap = d.capacity();
let len = d.len();
unsafe {
    {
        // This slice contains the uninitialized elements in
        // the deque:
        let mut s = d.tail_head_slice();
        assert_eq!(s.len(), cap - len);
        // We can write to them and for example bump the tail of
        // the deque:
        s[0] = 4;
        s[1] = 5;
    }
    d.move_tail(2);
}
assert_eq!(d, sdeq![1, 2, 3, 4, 5]);

Reserves capacity for inserting at least additional elements without reallocating. Does nothing if the capacity is already sufficient.

The collection always reserves memory in multiples of the page size.

Panics

Panics if the new capacity overflows usize.

Reserves the minimum capacity for exactly additional more elements to be inserted in the given SliceDeq<T>. After calling reserve_exact, capacity will be greater than or equal to self.len() + additional. Does nothing if the capacity is already sufficient.

Note that the allocator may give the collection more space than it requests. Therefore capacity can not be relied upon to be precisely minimal. Prefer reserve if future insertions are expected.

Panics

Panics if the new capacity overflows usize.

Examples

let mut deq = sdeq![1];
deq.reserve_exact(10);
assert!(deq.capacity() >= 11);

Moves the deque head by x.

Panics

If the head wraps over the tail the behavior is undefined, that is, if x is out-of-range [-(capacity() - len()), len()].

If -C debug-assertions=1 violating this pre-condition panic!s.

Unsafe

It does not drop nor initialize elements, it just moves where the tail of the deque points to within the allocated buffer.

Moves the deque head by x.

Panics

If the head wraps over the tail, that is, if x is out-of-range [-(capacity() - len()), len()].

Unsafe

It does not drop nor initialize elements, it just moves where the tail of the deque points to within the allocated buffer.

Moves the deque tail by x.

Panics

If the tail wraps over the head the behavior is undefined, that is, if x is out-of-range [-len(), capacity() - len()].

If -C debug-assertions=1 violating this pre-condition panic!s.

Unsafe

It does not drop nor initialize elements, it just moves where the tail of the deque points to within the allocated buffer.

Moves the deque tail by x.

Panics

If the tail wraps over the head, that is, if x is out-of-range [-len(), capacity() - len()].

Unsafe

It does not drop nor initialize elements, it just moves where the tail of the deque points to within the allocated buffer.

Steal the elements from the slice s. You should mem::forget the slice afterwards.

Moves all the elements of other into Self, leaving other empty.

Panics

Panics if the number of elements in the deque overflows a isize.

Examples

let mut deq = sdeq![1, 2, 3];
let mut deq2 = sdeq![4, 5, 6];
deq.append(&mut deq2);
assert_eq!(deq, [1, 2, 3, 4, 5, 6]);
assert_eq!(deq2, []);

Provides a reference to the first element, or None if the deque is empty.

Examples

let mut deq = SliceDeque::new();
assert_eq!(deq.front(), None);

deq.push_back(1);
deq.push_back(2);
assert_eq!(deq.front(), Some(&1));
deq.push_front(3);
assert_eq!(deq.front(), Some(&3));

Provides a mutable reference to the first element, or None if the deque is empty.

Examples

let mut deq = SliceDeque::new();
assert_eq!(deq.front(), None);

deq.push_back(1);
deq.push_back(2);
assert_eq!(deq.front(), Some(&1));
(*deq.front_mut().unwrap()) = 3;
assert_eq!(deq.front(), Some(&3));

Provides a reference to the last element, or None if the deque is empty.

Examples

let mut deq = SliceDeque::new();
assert_eq!(deq.back(), None);

deq.push_back(1);
deq.push_back(2);
assert_eq!(deq.back(), Some(&2));
deq.push_front(3);
assert_eq!(deq.back(), Some(&2));

Provides a mutable reference to the last element, or None if the deque is empty.

Examples

let mut deq = SliceDeque::new();
assert_eq!(deq.front(), None);

deq.push_back(1);
deq.push_back(2);
assert_eq!(deq.back(), Some(&2));
(*deq.back_mut().unwrap()) = 3;
assert_eq!(deq.back(), Some(&3));

Prepends value to the deque.

Examples

let mut deq = SliceDeque::new();
deq.push_front(1);
deq.push_front(2);
assert_eq!(deq.front(), Some(&2));

Appends value to the deque.

Examples

let mut deq = SliceDeque::new();
deq.push_back(1);
deq.push_back(3);
assert_eq!(deq.back(), Some(&3));

Removes the first element and returns it, or None if the deque is empty.

Examples

let mut deq = SliceDeque::new();
assert_eq!(deq.pop_front(), None);

deq.push_back(1);
deq.push_back(2);

assert_eq!(deq.pop_front(), Some(1));
assert_eq!(deq.pop_front(), Some(2));
assert_eq!(deq.pop_front(), None);

Removes the last element from the deque and returns it, or None if it is empty.

Examples

let mut deq = SliceDeque::new();
assert_eq!(deq.pop_back(), None);

deq.push_back(1);
deq.push_back(3);

assert_eq!(deq.pop_back(), Some(3));
assert_eq!(deq.pop_back(), Some(1));
assert_eq!(deq.pop_back(), None);

Shrinks the capacity of the deque as much as possible.

It will drop down as close as possible to the length, but because SliceDeque allocates memory in multiples of the page size the deque might still have capacity for inserting new elements without reallocating.

Examples

let mut deq = SliceDeque::with_capacity(15);
deq.extend(0..4);
assert!(deq.capacity() >= 15);
deq.shrink_to_fit();
assert!(deq.capacity() >= 4);

Shortens the deque by removing excess elements from the back.

If len is greater than the SliceDeque's current length, this has no effect.

Examples

let mut deq = sdeq![5, 10, 15];
assert_eq!(deq, [5, 10, 15]);
deq.truncate_back(1);
assert_eq!(deq, [5]);

Shortens the deque by removing excess elements from the back.

If len is greater than the SliceDeque's current length, this has no effect. See truncate_back for examples.

Shortens the deque by removing excess elements from the front.

If len is greater than the SliceDeque's current length, this has no effect.

Examples

let mut deq = sdeq![5, 10, 15];
assert_eq!(deq, [5, 10, 15]);
deq.truncate_front(1);
assert_eq!(deq, [15]);

Removes all values from the deque.

Examples

let mut deq = sdeq![1];
assert!(!deq.is_empty());
deq.clear();
assert!(deq.is_empty());

Removes the element at index and return it in O(1) by swapping the last element into its place.

Examples

let mut deq = SliceDeque::new();
assert_eq!(deq.swap_remove_back(0), None);
deq.extend(1..4);
assert_eq!(deq, [1, 2, 3]);

assert_eq!(deq.swap_remove_back(0), Some(1));
assert_eq!(deq, [3, 2]);

Removes the element at index and returns it in O(1) by swapping the first element into its place.

Examples

let mut deq = SliceDeque::new();
assert_eq!(deq.swap_remove_front(0), None);
deq.extend(1..4);
assert_eq!(deq, [1, 2, 3]);

assert_eq!(deq.swap_remove_front(2), Some(3));
assert_eq!(deq, [2, 1]);

Inserts an element at index within the deque, shifting all elements with indices greater than or equal to index towards the back.

Element at index 0 is the front of the queue.

Panics

Panics if index is greater than deque's length

Examples

let mut deq = sdeq!['a', 'b', 'c'];
assert_eq!(deq, &['a', 'b', 'c']);

deq.insert(1, 'd');
assert_eq!(deq, &['a', 'd', 'b', 'c']);

Removes and returns the element at position index within the deque, shifting all elements after it to the front.

Panics

Panics if index is out of bounds.

Examples

let mut deq = sdeq![1, 2, 3];
assert_eq!(deq.remove(1), 2);
assert_eq!(deq, [1, 3]);

Splits the collection into two at the given index.

Returns a newly allocated Self. self contains elements [0, at), and the returned Self contains elements [at, len).

Note that the capacity of self does not change.

Panics

Panics if at > len.

Examples

let mut deq = sdeq![1, 2, 3];
let deq2 = deq.split_off(1);
assert_eq!(deq, [1]);
assert_eq!(deq2, [2, 3]);

Retains only the elements specified by the predicate.

That is, remove all elements e such that f(&e) returns false. This method operates in place and preserves the order of the retained elements.

Examples

let mut deq = sdeq![1, 2, 3, 4];
deq.retain(|&x| x % 2 == 0);
assert_eq!(deq, [2, 4]);

Removes all but the first of consecutive elements in the deque that resolve to the same key.

If the deque is sorted, this removes all duplicates.

Examples

let mut deq = sdeq![10, 20, 21, 30, 20];

deq.dedup_by_key(|i| *i / 10);
assert_eq!(deq, [10, 20, 30, 20]);

Removes all but the first of consecutive elements in the deque satisfying a given equality relation.

The same_bucket function is passed references to two elements from the deque, and returns true if the elements compare equal, or false if they do not. The elements are passed in opposite order from their order in the deque, so if same_bucket(a, b) returns true, a is removed.

If the deque is sorted, this removes all duplicates.

Examples

let mut deq = sdeq!["foo", "bar", "Bar", "baz", "bar"];

deq.dedup_by(|a, b| a.eq_ignore_ascii_case(b));

assert_eq!(deq, ["foo", "bar", "baz", "bar"]);

Important traits for DrainFilter<'a, T, F>

Creates an iterator which uses a closure to determine if an element should be removed.

If the closure returns true, then the element is removed and yielded. If the closure returns false, it will try again, and call the closure on the next element, seeing if it passes the test.

Using this method is equivalent to the following code:

let mut deq = SliceDeque::new();
deq.extend(1..7);
let mut i = 0;
while i != deq.len() {
    if some_predicate(&mut deq[i]) {
        let val = deq.remove(i);
        // your code here
    } else {
        i += 1;
    }
}

But drain_filter is easier to use. drain_filter is also more efficient, because it can backshift the elements of the deque in bulk.

Note that drain_filter also lets you mutate every element in the filter closure, regardless of whether you choose to keep or remove it.

Examples

Splitting a deque into evens and odds, reusing the original allocation:

let mut numbers = sdeq![1, 2, 3, 4, 5, 6, 8, 9, 11, 13, 14, 15];

let evens = numbers
    .drain_filter(|x| *x % 2 == 0)
    .collect::<SliceDeque<_>>();
let odds = numbers;

assert_eq!(sdeq![2, 4, 6, 8, 14], evens);
assert_eq!(odds, sdeq![1, 3, 5, 9, 11, 13, 15]);

impl<T> SliceDeque<T> where
    T: Clone
[src]

Clones and appends all elements in a slice to the SliceDeque.

Iterates over the slice other, clones each element, and then appends it to this SliceDeque. The other slice is traversed in-order.

Note that this function is same as extend except that it is specialized to work with slices instead. If and when Rust gets specialization this function will likely be deprecated (but still available).

Examples

let mut deq = SliceDeque::new();
deq.push_back(1);
deq.extend_from_slice(&[2, 3, 4]);
assert_eq!(deq, [1, 2, 3, 4]);

Modifies the SliceDeque in-place so that len() is equal to new_len, either by removing excess elements or by appending clones of value to the back.

Examples

let mut deq = sdeq![5, 10, 15];
assert_eq!(deq, [5, 10, 15]);

deq.resize(2, 0);
assert_eq!(deq, [5, 10]);

deq.resize(5, 20);
assert_eq!(deq, [5, 10, 20, 20, 20]);

impl<T: Default> SliceDeque<T>
[src]

Resizes the SliceDeque in-place so that len is equal to new_len.

If new_len is greater than len, the SliceDeque is extended by the difference, with each additional slot filled with Default::default(). If new_len is less than len, the SliceDeque is simply truncated.

This method uses Default to create new values on every push. If you'd rather Clone a given value, use resize.

Examples

let mut deq = sdeq![1, 2, 3];
deq.resize_default(5);
assert_eq!(deq, [1, 2, 3, 0, 0]);

deq.resize_default(2);
assert_eq!(deq, [1, 2]);

impl<T: PartialEq> SliceDeque<T>
[src]

Removes consecutive repeated elements in the deque.

If the deque is sorted, this removes all duplicates.

Examples

let mut deq = sdeq![1, 2, 2, 3, 2];

deq.dedup();
assert_eq!(deq, [1, 2, 3, 2]);

deq.sort();
assert_eq!(deq, [1, 2, 2, 3]);

deq.dedup();
assert_eq!(deq, [1, 2, 3]);

Removes the first instance of item from the deque if the item exists.

Examples

let mut deq = sdeq![1, 2, 3, 1];

deq.remove_item(&1);
assert_eq!(deq, &[2, 3, 1]);
deq.remove_item(&1);
assert_eq!(deq, &[2, 3]);

Methods from Deref<Target = [T]>

Returns the number of elements in the slice.

Examples

let a = [1, 2, 3];
assert_eq!(a.len(), 3);

Returns true if the slice has a length of 0.

Examples

let a = [1, 2, 3];
assert!(!a.is_empty());

Returns the first element of the slice, or None if it is empty.

Examples

let v = [10, 40, 30];
assert_eq!(Some(&10), v.first());

let w: &[i32] = &[];
assert_eq!(None, w.first());

Returns a mutable pointer to the first element of the slice, or None if it is empty.

Examples

let x = &mut [0, 1, 2];

if let Some(first) = x.first_mut() {
    *first = 5;
}
assert_eq!(x, &[5, 1, 2]);

Returns the first and all the rest of the elements of the slice, or None if it is empty.

Examples

let x = &[0, 1, 2];

if let Some((first, elements)) = x.split_first() {
    assert_eq!(first, &0);
    assert_eq!(elements, &[1, 2]);
}

Returns the first and all the rest of the elements of the slice, or None if it is empty.

Examples

let x = &mut [0, 1, 2];

if let Some((first, elements)) = x.split_first_mut() {
    *first = 3;
    elements[0] = 4;
    elements[1] = 5;
}
assert_eq!(x, &[3, 4, 5]);

Returns the last and all the rest of the elements of the slice, or None if it is empty.

Examples

let x = &[0, 1, 2];

if let Some((last, elements)) = x.split_last() {
    assert_eq!(last, &2);
    assert_eq!(elements, &[0, 1]);
}

Returns the last and all the rest of the elements of the slice, or None if it is empty.

Examples

let x = &mut [0, 1, 2];

if let Some((last, elements)) = x.split_last_mut() {
    *last = 3;
    elements[0] = 4;
    elements[1] = 5;
}
assert_eq!(x, &[4, 5, 3]);

Returns the last element of the slice, or None if it is empty.

Examples

let v = [10, 40, 30];
assert_eq!(Some(&30), v.last());

let w: &[i32] = &[];
assert_eq!(None, w.last());

Returns a mutable pointer to the last item in the slice.

Examples

let x = &mut [0, 1, 2];

if let Some(last) = x.last_mut() {
    *last = 10;
}
assert_eq!(x, &[0, 1, 10]);

Returns a reference to an element or subslice depending on the type of index.

  • If given a position, returns a reference to the element at that position or None if out of bounds.
  • If given a range, returns the subslice corresponding to that range, or None if out of bounds.

Examples

let v = [10, 40, 30];
assert_eq!(Some(&40), v.get(1));
assert_eq!(Some(&[10, 40][..]), v.get(0..2));
assert_eq!(None, v.get(3));
assert_eq!(None, v.get(0..4));

Returns a mutable reference to an element or subslice depending on the type of index (see get) or None if the index is out of bounds.

Examples

let x = &mut [0, 1, 2];

if let Some(elem) = x.get_mut(1) {
    *elem = 42;
}
assert_eq!(x, &[0, 42, 2]);

Returns a reference to an element or subslice, without doing bounds checking.

This is generally not recommended, use with caution! For a safe alternative see get.

Examples

let x = &[1, 2, 4];

unsafe {
    assert_eq!(x.get_unchecked(1), &2);
}

Returns a mutable reference to an element or subslice, without doing bounds checking.

This is generally not recommended, use with caution! For a safe alternative see get_mut.

Examples

let x = &mut [1, 2, 4];

unsafe {
    let elem = x.get_unchecked_mut(1);
    *elem = 13;
}
assert_eq!(x, &[1, 13, 4]);

Returns a raw pointer to the slice's buffer.

The caller must ensure that the slice outlives the pointer this function returns, or else it will end up pointing to garbage.

Modifying the container referenced by this slice may cause its buffer to be reallocated, which would also make any pointers to it invalid.

Examples

let x = &[1, 2, 4];
let x_ptr = x.as_ptr();

unsafe {
    for i in 0..x.len() {
        assert_eq!(x.get_unchecked(i), &*x_ptr.offset(i as isize));
    }
}

Returns an unsafe mutable pointer to the slice's buffer.

The caller must ensure that the slice outlives the pointer this function returns, or else it will end up pointing to garbage.

Modifying the container referenced by this slice may cause its buffer to be reallocated, which would also make any pointers to it invalid.

Examples

let x = &mut [1, 2, 4];
let x_ptr = x.as_mut_ptr();

unsafe {
    for i in 0..x.len() {
        *x_ptr.offset(i as isize) += 2;
    }
}
assert_eq!(x, &[3, 4, 6]);

Swaps two elements in the slice.

Arguments

  • a - The index of the first element
  • b - The index of the second element

Panics

Panics if a or b are out of bounds.

Examples

let mut v = ["a", "b", "c", "d"];
v.swap(1, 3);
assert!(v == ["a", "d", "c", "b"]);

Reverses the order of elements in the slice, in place.

Examples

let mut v = [1, 2, 3];
v.reverse();
assert!(v == [3, 2, 1]);

Returns an iterator over the slice.

Examples

let x = &[1, 2, 4];
let mut iterator = x.iter();

assert_eq!(iterator.next(), Some(&1));
assert_eq!(iterator.next(), Some(&2));
assert_eq!(iterator.next(), Some(&4));
assert_eq!(iterator.next(), None);

Returns an iterator that allows modifying each value.

Examples

let x = &mut [1, 2, 4];
for elem in x.iter_mut() {
    *elem += 2;
}
assert_eq!(x, &[3, 4, 6]);

Returns an iterator over all contiguous windows of length size. The windows overlap. If the slice is shorter than size, the iterator returns no values.

Panics

Panics if size is 0.

Examples

let slice = ['r', 'u', 's', 't'];
let mut iter = slice.windows(2);
assert_eq!(iter.next().unwrap(), &['r', 'u']);
assert_eq!(iter.next().unwrap(), &['u', 's']);
assert_eq!(iter.next().unwrap(), &['s', 't']);
assert!(iter.next().is_none());

If the slice is shorter than size:

let slice = ['f', 'o', 'o'];
let mut iter = slice.windows(4);
assert!(iter.next().is_none());

Returns an iterator over chunk_size elements of the slice at a time. The chunks are slices and do not overlap. If chunk_size does not divide the length of the slice, then the last chunk will not have length chunk_size.

See exact_chunks for a variant of this iterator that returns chunks of always exactly chunk_size elements.

Panics

Panics if chunk_size is 0.

Examples

let slice = ['l', 'o', 'r', 'e', 'm'];
let mut iter = slice.chunks(2);
assert_eq!(iter.next().unwrap(), &['l', 'o']);
assert_eq!(iter.next().unwrap(), &['r', 'e']);
assert_eq!(iter.next().unwrap(), &['m']);
assert!(iter.next().is_none());

🔬 This is a nightly-only experimental API. (exact_chunks)

Returns an iterator over chunk_size elements of the slice at a time. The chunks are slices and do not overlap. If chunk_size does not divide the length of the slice, then the last up to chunk_size-1 elements will be omitted.

Due to each chunk having exactly chunk_size elements, the compiler can often optimize the resulting code better than in the case of chunks.

Panics

Panics if chunk_size is 0.

Examples

#![feature(exact_chunks)]

let slice = ['l', 'o', 'r', 'e', 'm'];
let mut iter = slice.exact_chunks(2);
assert_eq!(iter.next().unwrap(), &['l', 'o']);
assert_eq!(iter.next().unwrap(), &['r', 'e']);
assert!(iter.next().is_none());

Returns an iterator over chunk_size elements of the slice at a time. The chunks are mutable slices, and do not overlap. If chunk_size does not divide the length of the slice, then the last chunk will not have length chunk_size.

See exact_chunks_mut for a variant of this iterator that returns chunks of always exactly chunk_size elements.

Panics

Panics if chunk_size is 0.

Examples

let v = &mut [0, 0, 0, 0, 0];
let mut count = 1;

for chunk in v.chunks_mut(2) {
    for elem in chunk.iter_mut() {
        *elem += count;
    }
    count += 1;
}
assert_eq!(v, &[1, 1, 2, 2, 3]);

🔬 This is a nightly-only experimental API. (exact_chunks)

Returns an iterator over chunk_size elements of the slice at a time. The chunks are mutable slices, and do not overlap. If chunk_size does not divide the length of the slice, then the last up to chunk_size-1 elements will be omitted.

Due to each chunk having exactly chunk_size elements, the compiler can often optimize the resulting code better than in the case of chunks_mut.

Panics

Panics if chunk_size is 0.

Examples

#![feature(exact_chunks)]

let v = &mut [0, 0, 0, 0, 0];
let mut count = 1;

for chunk in v.exact_chunks_mut(2) {
    for elem in chunk.iter_mut() {
        *elem += count;
    }
    count += 1;
}
assert_eq!(v, &[1, 1, 2, 2, 0]);

Divides one slice into two at an index.

The first will contain all indices from [0, mid) (excluding the index mid itself) and the second will contain all indices from [mid, len) (excluding the index len itself).

Panics

Panics if mid > len.

Examples

let v = [1, 2, 3, 4, 5, 6];

{
   let (left, right) = v.split_at(0);
   assert!(left == []);
   assert!(right == [1, 2, 3, 4, 5, 6]);
}

{
    let (left, right) = v.split_at(2);
    assert!(left == [1, 2]);
    assert!(right == [3, 4, 5, 6]);
}

{
    let (left, right) = v.split_at(6);
    assert!(left == [1, 2, 3, 4, 5, 6]);
    assert!(right == []);
}

Divides one mutable slice into two at an index.

The first will contain all indices from [0, mid) (excluding the index mid itself) and the second will contain all indices from [mid, len) (excluding the index len itself).

Panics

Panics if mid > len.

Examples

let mut v = [1, 0, 3, 0, 5, 6];
// scoped to restrict the lifetime of the borrows
{
    let (left, right) = v.split_at_mut(2);
    assert!(left == [1, 0]);
    assert!(right == [3, 0, 5, 6]);
    left[1] = 2;
    right[1] = 4;
}
assert!(v == [1, 2, 3, 4, 5, 6]);

Returns an iterator over subslices separated by elements that match pred. The matched element is not contained in the subslices.

Examples

let slice = [10, 40, 33, 20];
let mut iter = slice.split(|num| num % 3 == 0);

assert_eq!(iter.next().unwrap(), &[10, 40]);
assert_eq!(iter.next().unwrap(), &[20]);
assert!(iter.next().is_none());

If the first element is matched, an empty slice will be the first item returned by the iterator. Similarly, if the last element in the slice is matched, an empty slice will be the last item returned by the iterator:

let slice = [10, 40, 33];
let mut iter = slice.split(|num| num % 3 == 0);

assert_eq!(iter.next().unwrap(), &[10, 40]);
assert_eq!(iter.next().unwrap(), &[]);
assert!(iter.next().is_none());

If two matched elements are directly adjacent, an empty slice will be present between them:

let slice = [10, 6, 33, 20];
let mut iter = slice.split(|num| num % 3 == 0);

assert_eq!(iter.next().unwrap(), &[10]);
assert_eq!(iter.next().unwrap(), &[]);
assert_eq!(iter.next().unwrap(), &[20]);
assert!(iter.next().is_none());

Returns an iterator over mutable subslices separated by elements that match pred. The matched element is not contained in the subslices.

Examples

let mut v = [10, 40, 30, 20, 60, 50];

for group in v.split_mut(|num| *num % 3 == 0) {
    group[0] = 1;
}
assert_eq!(v, [1, 40, 30, 1, 60, 1]);

Returns an iterator over subslices separated by elements that match pred, starting at the end of the slice and working backwards. The matched element is not contained in the subslices.

Examples

let slice = [11, 22, 33, 0, 44, 55];
let mut iter = slice.rsplit(|num| *num == 0);

assert_eq!(iter.next().unwrap(), &[44, 55]);
assert_eq!(iter.next().unwrap(), &[11, 22, 33]);
assert_eq!(iter.next(), None);

As with split(), if the first or last element is matched, an empty slice will be the first (or last) item returned by the iterator.

let v = &[0, 1, 1, 2, 3, 5, 8];
let mut it = v.rsplit(|n| *n % 2 == 0);
assert_eq!(it.next().unwrap(), &[]);
assert_eq!(it.next().unwrap(), &[3, 5]);
assert_eq!(it.next().unwrap(), &[1, 1]);
assert_eq!(it.next().unwrap(), &[]);
assert_eq!(it.next(), None);

Returns an iterator over mutable subslices separated by elements that match pred, starting at the end of the slice and working backwards. The matched element is not contained in the subslices.

Examples

let mut v = [100, 400, 300, 200, 600, 500];

let mut count = 0;
for group in v.rsplit_mut(|num| *num % 3 == 0) {
    count += 1;
    group[0] = count;
}
assert_eq!(v, [3, 400, 300, 2, 600, 1]);

Returns an iterator over subslices separated by elements that match pred, limited to returning at most n items. The matched element is not contained in the subslices.

The last element returned, if any, will contain the remainder of the slice.

Examples

Print the slice split once by numbers divisible by 3 (i.e. [10, 40], [20, 60, 50]):

let v = [10, 40, 30, 20, 60, 50];

for group in v.splitn(2, |num| *num % 3 == 0) {
    println!("{:?}", group);
}

Returns an iterator over subslices separated by elements that match pred, limited to returning at most n items. The matched element is not contained in the subslices.

The last element returned, if any, will contain the remainder of the slice.

Examples

let mut v = [10, 40, 30, 20, 60, 50];

for group in v.splitn_mut(2, |num| *num % 3 == 0) {
    group[0] = 1;
}
assert_eq!(v, [1, 40, 30, 1, 60, 50]);

Returns an iterator over subslices separated by elements that match pred limited to returning at most n items. This starts at the end of the slice and works backwards. The matched element is not contained in the subslices.

The last element returned, if any, will contain the remainder of the slice.

Examples

Print the slice split once, starting from the end, by numbers divisible by 3 (i.e. [50], [10, 40, 30, 20]):

let v = [10, 40, 30, 20, 60, 50];

for group in v.rsplitn(2, |num| *num % 3 == 0) {
    println!("{:?}", group);
}

Returns an iterator over subslices separated by elements that match pred limited to returning at most n items. This starts at the end of the slice and works backwards. The matched element is not contained in the subslices.

The last element returned, if any, will contain the remainder of the slice.

Examples

let mut s = [10, 40, 30, 20, 60, 50];

for group in s.rsplitn_mut(2, |num| *num % 3 == 0) {
    group[0] = 1;
}
assert_eq!(s, [1, 40, 30, 20, 60, 1]);

Returns true if the slice contains an element with the given value.

Examples

let v = [10, 40, 30];
assert!(v.contains(&30));
assert!(!v.contains(&50));

Returns true if needle is a prefix of the slice.

Examples

let v = [10, 40, 30];
assert!(v.starts_with(&[10]));
assert!(v.starts_with(&[10, 40]));
assert!(!v.starts_with(&[50]));
assert!(!v.starts_with(&[10, 50]));

Always returns true if needle is an empty slice:

let v = &[10, 40, 30];
assert!(v.starts_with(&[]));
let v: &[u8] = &[];
assert!(v.starts_with(&[]));

Returns true if needle is a suffix of the slice.

Examples

let v = [10, 40, 30];
assert!(v.ends_with(&[30]));
assert!(v.ends_with(&[40, 30]));
assert!(!v.ends_with(&[50]));
assert!(!v.ends_with(&[50, 30]));

Always returns true if needle is an empty slice:

let v = &[10, 40, 30];
assert!(v.ends_with(&[]));
let v: &[u8] = &[];
assert!(v.ends_with(&[]));

Binary searches this sorted slice for a given element.

If the value is found then Ok is returned, containing the index of the matching element; if the value is not found then Err is returned, containing the index where a matching element could be inserted while maintaining sorted order.

Examples

Looks up a series of four elements. The first is found, with a uniquely determined position; the second and third are not found; the fourth could match any position in [1, 4].

let s = [0, 1, 1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55];

assert_eq!(s.binary_search(&13),  Ok(9));
assert_eq!(s.binary_search(&4),   Err(7));
assert_eq!(s.binary_search(&100), Err(13));
let r = s.binary_search(&1);
assert!(match r { Ok(1...4) => true, _ => false, });

Binary searches this sorted slice with a comparator function.

The comparator function should implement an order consistent with the sort order of the underlying slice, returning an order code that indicates whether its argument is Less, Equal or Greater the desired target.

If a matching value is found then returns Ok, containing the index for the matched element; if no match is found then Err is returned, containing the index where a matching element could be inserted while maintaining sorted order.

Examples

Looks up a series of four elements. The first is found, with a uniquely determined position; the second and third are not found; the fourth could match any position in [1, 4].

let s = [0, 1, 1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55];

let seek = 13;
assert_eq!(s.binary_search_by(|probe| probe.cmp(&seek)), Ok(9));
let seek = 4;
assert_eq!(s.binary_search_by(|probe| probe.cmp(&seek)), Err(7));
let seek = 100;
assert_eq!(s.binary_search_by(|probe| probe.cmp(&seek)), Err(13));
let seek = 1;
let r = s.binary_search_by(|probe| probe.cmp(&seek));
assert!(match r { Ok(1...4) => true, _ => false, });

Binary searches this sorted slice with a key extraction function.

Assumes that the slice is sorted by the key, for instance with sort_by_key using the same key extraction function.

If a matching value is found then returns Ok, containing the index for the matched element; if no match is found then Err is returned, containing the index where a matching element could be inserted while maintaining sorted order.

Examples

Looks up a series of four elements in a slice of pairs sorted by their second elements. The first is found, with a uniquely determined position; the second and third are not found; the fourth could match any position in [1, 4].

let s = [(0, 0), (2, 1), (4, 1), (5, 1), (3, 1),
         (1, 2), (2, 3), (4, 5), (5, 8), (3, 13),
         (1, 21), (2, 34), (4, 55)];

assert_eq!(s.binary_search_by_key(&13, |&(a,b)| b),  Ok(9));
assert_eq!(s.binary_search_by_key(&4, |&(a,b)| b),   Err(7));
assert_eq!(s.binary_search_by_key(&100, |&(a,b)| b), Err(13));
let r = s.binary_search_by_key(&1, |&(a,b)| b);
assert!(match r { Ok(1...4) => true, _ => false, });

Sorts the slice, but may not preserve the order of equal elements.

This sort is unstable (i.e. may reorder equal elements), in-place (i.e. does not allocate), and O(n log n) worst-case.

Current implementation

The current algorithm is based on pattern-defeating quicksort by Orson Peters, which combines the fast average case of randomized quicksort with the fast worst case of heapsort, while achieving linear time on slices with certain patterns. It uses some randomization to avoid degenerate cases, but with a fixed seed to always provide deterministic behavior.

It is typically faster than stable sorting, except in a few special cases, e.g. when the slice consists of several concatenated sorted sequences.

Examples

let mut v = [-5, 4, 1, -3, 2];

v.sort_unstable();
assert!(v == [-5, -3, 1, 2, 4]);

Sorts the slice with a comparator function, but may not preserve the order of equal elements.

This sort is unstable (i.e. may reorder equal elements), in-place (i.e. does not allocate), and O(n log n) worst-case.

Current implementation

The current algorithm is based on pattern-defeating quicksort by Orson Peters, which combines the fast average case of randomized quicksort with the fast worst case of heapsort, while achieving linear time on slices with certain patterns. It uses some randomization to avoid degenerate cases, but with a fixed seed to always provide deterministic behavior.

It is typically faster than stable sorting, except in a few special cases, e.g. when the slice consists of several concatenated sorted sequences.

Examples

let mut v = [5, 4, 1, 3, 2];
v.sort_unstable_by(|a, b| a.cmp(b));
assert!(v == [1, 2, 3, 4, 5]);

// reverse sorting
v.sort_unstable_by(|a, b| b.cmp(a));
assert!(v == [5, 4, 3, 2, 1]);

Sorts the slice with a key extraction function, but may not preserve the order of equal elements.

This sort is unstable (i.e. may reorder equal elements), in-place (i.e. does not allocate), and O(m n log(m n)) worst-case, where the key function is O(m).

Current implementation

The current algorithm is based on pattern-defeating quicksort by Orson Peters, which combines the fast average case of randomized quicksort with the fast worst case of heapsort, while achieving linear time on slices with certain patterns. It uses some randomization to avoid degenerate cases, but with a fixed seed to always provide deterministic behavior.

Examples

let mut v = [-5i32, 4, 1, -3, 2];

v.sort_unstable_by_key(|k| k.abs());
assert!(v == [1, 2, -3, 4, -5]);

Rotates the slice in-place such that the first mid elements of the slice move to the end while the last self.len() - mid elements move to the front. After calling rotate_left, the element previously at index mid will become the first element in the slice.

Panics

This function will panic if mid is greater than the length of the slice. Note that mid == self.len() does not panic and is a no-op rotation.

Complexity

Takes linear (in self.len()) time.

Examples

let mut a = ['a', 'b', 'c', 'd', 'e', 'f'];
a.rotate_left(2);
assert_eq!(a, ['c', 'd', 'e', 'f', 'a', 'b']);

Rotating a subslice:

let mut a = ['a', 'b', 'c', 'd', 'e', 'f'];
a[1..5].rotate_left(1);
assert_eq!(a, ['a', 'c', 'd', 'e', 'b', 'f']);

Rotates the slice in-place such that the first self.len() - k elements of the slice move to the end while the last k elements move to the front. After calling rotate_right, the element previously at index self.len() - k will become the first element in the slice.

Panics

This function will panic if k is greater than the length of the slice. Note that k == self.len() does not panic and is a no-op rotation.

Complexity

Takes linear (in self.len()) time.

Examples

let mut a = ['a', 'b', 'c', 'd', 'e', 'f'];
a.rotate_right(2);
assert_eq!(a, ['e', 'f', 'a', 'b', 'c', 'd']);

Rotate a subslice:

let mut a = ['a', 'b', 'c', 'd', 'e', 'f'];
a[1..5].rotate_right(1);
assert_eq!(a, ['a', 'e', 'b', 'c', 'd', 'f']);

Copies the elements from src into self.

The length of src must be the same as self.

If src implements Copy, it can be more performant to use copy_from_slice.

Panics

This function will panic if the two slices have different lengths.

Examples

Cloning two elements from a slice into another:

let src = [1, 2, 3, 4];
let mut dst = [0, 0];

dst.clone_from_slice(&src[2..]);

assert_eq!(src, [1, 2, 3, 4]);
assert_eq!(dst, [3, 4]);

Rust enforces that there can only be one mutable reference with no immutable references to a particular piece of data in a particular scope. Because of this, attempting to use clone_from_slice on a single slice will result in a compile failure:

This example deliberately fails to compile
let mut slice = [1, 2, 3, 4, 5];

slice[..2].clone_from_slice(&slice[3..]); // compile fail!

To work around this, we can use split_at_mut to create two distinct sub-slices from a slice:

let mut slice = [1, 2, 3, 4, 5];

{
    let (left, right) = slice.split_at_mut(2);
    left.clone_from_slice(&right[1..]);
}

assert_eq!(slice, [4, 5, 3, 4, 5]);

Copies all elements from src into self, using a memcpy.

The length of src must be the same as self.

If src does not implement Copy, use clone_from_slice.

Panics

This function will panic if the two slices have different lengths.

Examples

Copying two elements from a slice into another:

let src = [1, 2, 3, 4];
let mut dst = [0, 0];

dst.copy_from_slice(&src[2..]);

assert_eq!(src, [1, 2, 3, 4]);
assert_eq!(dst, [3, 4]);

Rust enforces that there can only be one mutable reference with no immutable references to a particular piece of data in a particular scope. Because of this, attempting to use copy_from_slice on a single slice will result in a compile failure:

This example deliberately fails to compile
let mut slice = [1, 2, 3, 4, 5];

slice[..2].copy_from_slice(&slice[3..]); // compile fail!

To work around this, we can use split_at_mut to create two distinct sub-slices from a slice:

let mut slice = [1, 2, 3, 4, 5];

{
    let (left, right) = slice.split_at_mut(2);
    left.copy_from_slice(&right[1..]);
}

assert_eq!(slice, [4, 5, 3, 4, 5]);

Swaps all elements in self with those in other.

The length of other must be the same as self.

Panics

This function will panic if the two slices have different lengths.

Example

Swapping two elements across slices:

let mut slice1 = [0, 0];
let mut slice2 = [1, 2, 3, 4];

slice1.swap_with_slice(&mut slice2[2..]);

assert_eq!(slice1, [3, 4]);
assert_eq!(slice2, [1, 2, 0, 0]);

Rust enforces that there can only be one mutable reference to a particular piece of data in a particular scope. Because of this, attempting to use swap_with_slice on a single slice will result in a compile failure:

This example deliberately fails to compile
let mut slice = [1, 2, 3, 4, 5];
slice[..2].swap_with_slice(&mut slice[3..]); // compile fail!

To work around this, we can use split_at_mut to create two distinct mutable sub-slices from a slice:

let mut slice = [1, 2, 3, 4, 5];

{
    let (left, right) = slice.split_at_mut(2);
    left.swap_with_slice(&mut right[1..]);
}

assert_eq!(slice, [4, 5, 3, 1, 2]);

🔬 This is a nightly-only experimental API. (slice_align_to)

Transmute the slice to a slice of another type, ensuring aligment of the types is maintained.

This method splits the slice into three distinct slices: prefix, correctly aligned middle slice of a new type, and the suffix slice. The middle slice will have the greatest length possible for a given type and input slice.

This method has no purpose when either input element T or output element U are zero-sized and will return the original slice without splitting anything.

Unsafety

This method is essentially a transmute with respect to the elements in the returned middle slice, so all the usual caveats pertaining to transmute::<T, U> also apply here.

Examples

Basic usage:

unsafe {
    let bytes: [u8; 7] = [1, 2, 3, 4, 5, 6, 7];
    let (prefix, shorts, suffix) = bytes.align_to::<u16>();
    // less_efficient_algorithm_for_bytes(prefix);
    // more_efficient_algorithm_for_aligned_shorts(shorts);
    // less_efficient_algorithm_for_bytes(suffix);
}

🔬 This is a nightly-only experimental API. (slice_align_to)

Transmute the slice to a slice of another type, ensuring aligment of the types is maintained.

This method splits the slice into three distinct slices: prefix, correctly aligned middle slice of a new type, and the suffix slice. The middle slice will have the greatest length possible for a given type and input slice.

This method has no purpose when either input element T or output element U are zero-sized and will return the original slice without splitting anything.

Unsafety

This method is essentially a transmute with respect to the elements in the returned middle slice, so all the usual caveats pertaining to transmute::<T, U> also apply here.

Examples

Basic usage:

unsafe {
    let mut bytes: [u8; 7] = [1, 2, 3, 4, 5, 6, 7];
    let (prefix, shorts, suffix) = bytes.align_to_mut::<u16>();
    // less_efficient_algorithm_for_bytes(prefix);
    // more_efficient_algorithm_for_aligned_shorts(shorts);
    // less_efficient_algorithm_for_bytes(suffix);
}

Trait Implementations

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

Formats the value using the given formatter. Read more

impl<T> Drop for SliceDeque<T>
[src]

Executes the destructor for this type. Read more

impl<T> Deref for SliceDeque<T>
[src]

The resulting type after dereferencing.

Dereferences the value.

impl<T> DerefMut for SliceDeque<T>
[src]

Mutably dereferences the value.

impl<T> Default for SliceDeque<T>
[src]

Returns the "default value" for a type. Read more

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

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

impl<'a, T: Clone> From<&'a [T]> for SliceDeque<T>
[src]

Performs the conversion.

impl<'a, T: Clone> From<&'a mut [T]> for SliceDeque<T>
[src]

Performs the conversion.

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

Feeds this value into the given [Hasher]. Read more

Feeds a slice of this type into the given [Hasher]. Read more

impl<'a, 'b, A: Sized, B> PartialEq<SliceDeque<B>> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<&'b [B]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<&'b mut [B]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<Vec<B>> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<[B; 0]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<&'b [B; 0]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<[B; 1]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<&'b [B; 1]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<[B; 2]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<&'b [B; 2]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<[B; 3]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<&'b [B; 3]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<[B; 4]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<&'b [B; 4]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<[B; 5]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<&'b [B; 5]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<[B; 6]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<&'b [B; 6]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<[B; 7]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<&'b [B; 7]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<[B; 8]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<&'b [B; 8]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<[B; 9]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<&'b [B; 9]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<[B; 10]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<&'b [B; 10]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<[B; 11]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<&'b [B; 11]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<[B; 12]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<&'b [B; 12]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<[B; 13]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<&'b [B; 13]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<[B; 14]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<&'b [B; 14]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<[B; 15]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<&'b [B; 15]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<[B; 16]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<&'b [B; 16]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<[B; 17]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<&'b [B; 17]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<[B; 18]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<&'b [B; 18]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<[B; 19]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<&'b [B; 19]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<[B; 20]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<&'b [B; 20]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<[B; 21]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<&'b [B; 21]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<[B; 22]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<&'b [B; 22]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<[B; 23]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<&'b [B; 23]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<[B; 24]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<&'b [B; 24]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<[B; 25]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<&'b [B; 25]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<[B; 26]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<&'b [B; 26]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<[B; 27]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<&'b [B; 27]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<[B; 28]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<&'b [B; 28]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<[B; 29]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<&'b [B; 29]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<[B; 30]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<&'b [B; 30]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<[B; 31]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<&'b [B; 31]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<[B; 32]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'a, 'b, A: Sized, B> PartialEq<&'b [B; 32]> for SliceDeque<A> where
    A: PartialEq<B>, 
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

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

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

This method returns an ordering between self and other values if one exists. Read more

This method tests less than (for self and other) and is used by the < operator. Read more

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

This method tests greater than (for self and other) and is used by the > operator. Read more

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

impl<'a, T: PartialOrd> PartialOrd<&'a [T]> for SliceDeque<T>
[src]

This method returns an ordering between self and other values if one exists. Read more

This method tests less than (for self and other) and is used by the < operator. Read more

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

This method tests greater than (for self and other) and is used by the > operator. Read more

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

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

The type of the elements being iterated over.

Which kind of iterator are we turning this into?

Important traits for IntoIter<T>

Creates a consuming iterator, that is, one that moves each value out of the deque (from start to end). The deque cannot be used after calling this.

Examples

let mut deq = sdeq!["a".to_string(), "b".to_string()];
let expected = ["a".to_string(), "b".to_string()];
for (i, s) in deq.into_iter().enumerate() {
    // s has type String, not &String
    println!("{}", s);
    assert_eq!(s, expected[i]);
}

impl<'a, T> IntoIterator for &'a SliceDeque<T>
[src]

The type of the elements being iterated over.

Which kind of iterator are we turning this into?

Creates an iterator from a value. Read more

impl<'a, T> IntoIterator for &'a mut SliceDeque<T>
[src]

The type of the elements being iterated over.

Which kind of iterator are we turning this into?

Creates an iterator from a value. Read more

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

Extends a collection with the contents of an iterator. Read more

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

Creates a value from an iterator. Read more

impl<'a, T: 'a + Copy> Extend<&'a T> for SliceDeque<T>
[src]

Extend implementation that copies elements out of references before pushing them onto the SliceDeque.

This implementation is specialized for slice iterators, where it uses copy_from_slice to append the entire slice at once.

Extends a collection with the contents of an iterator. Read more

impl<T> AsRef<[T]> for SliceDeque<T>
[src]

Performs the conversion.

impl<T> AsMut<[T]> for SliceDeque<T>
[src]

Performs the conversion.

Auto Trait Implementations

impl<T> Send for SliceDeque<T> where
    T: Send

impl<T> Sync for SliceDeque<T> where
    T: Sync