Struct network_collections::ArrayVec[][src]

pub struct ArrayVec<A> where
    A: Array
{ /* fields omitted */ }

A vector with a fixed capacity.

The ArrayVec is a vector backed by a fixed size array. It keeps track of the number of initialized elements.

The vector is a contiguous value that you can store directly on the stack if needed.

It offers a simple API but also dereferences to a slice, so that the full slice API is available.

ArrayVec can be converted into a by value iterator.

Methods

impl<A> ArrayVec<A> where
    A: Array
[src]

Important traits for ArrayVec<A>

Create a new empty ArrayVec.

Capacity is inferred from the type parameter.

use arrayvec::ArrayVec;

let mut array = ArrayVec::<[_; 16]>::new();
array.push(1);
array.push(2);
assert_eq!(&array[..], &[1, 2]);
assert_eq!(array.capacity(), 16);

Return the number of elements in the ArrayVec.

use arrayvec::ArrayVec;

let mut array = ArrayVec::from([1, 2, 3]);
array.pop();
assert_eq!(array.len(), 2);

Return the capacity of the ArrayVec.

use arrayvec::ArrayVec;

let array = ArrayVec::from([1, 2, 3]);
assert_eq!(array.capacity(), 3);

Return if the ArrayVec is completely filled.

use arrayvec::ArrayVec;

let mut array = ArrayVec::<[_; 1]>::new();
assert!(!array.is_full());
array.push(1);
assert!(array.is_full());

Push element to the end of the vector.

Panics if the vector is already full.

use arrayvec::ArrayVec;

let mut array = ArrayVec::<[_; 2]>::new();

array.push(1);
array.push(2);

assert_eq!(&array[..], &[1, 2]);

Push element to the end of the vector.

Return Ok if the push succeeds, or return an error if the vector is already full.

use arrayvec::ArrayVec;

let mut array = ArrayVec::<[_; 2]>::new();

let push1 = array.try_push(1);
let push2 = array.try_push(2);

assert!(push1.is_ok());
assert!(push2.is_ok());

assert_eq!(&array[..], &[1, 2]);

let overflow = array.try_push(3);

assert!(overflow.is_err());

Push element to the end of the vector without checking the capacity.

It is up to the caller to ensure the capacity of the vector is sufficiently large.

This method uses debug assertions to check that the arrayvec is not full.

use arrayvec::ArrayVec;

let mut array = ArrayVec::<[_; 2]>::new();

if array.len() + 2 <= array.capacity() {
    unsafe {
        array.push_unchecked(1);
        array.push_unchecked(2);
    }
}

assert_eq!(&array[..], &[1, 2]);

Insert element at position index.

Shift up all elements after index.

It is an error if the index is greater than the length or if the arrayvec is full.

Panics on errors. See try_result for fallible version.

use arrayvec::ArrayVec;

let mut array = ArrayVec::<[_; 2]>::new();

array.insert(0, "x");
array.insert(0, "y");
assert_eq!(&array[..], &["y", "x"]);

Insert element at position index.

Shift up all elements after index; the index must be less than or equal to the length.

Returns an error if vector is already at full capacity.

Panics index is out of bounds.

use arrayvec::ArrayVec;

let mut array = ArrayVec::<[_; 2]>::new();

assert!(array.try_insert(0, "x").is_ok());
assert!(array.try_insert(0, "y").is_ok());
assert!(array.try_insert(0, "z").is_err());
assert_eq!(&array[..], &["y", "x"]);

Remove the last element in the vector and return it.

Return Some( element ) if the vector is non-empty, else None.

use arrayvec::ArrayVec;

let mut array = ArrayVec::<[_; 2]>::new();

array.push(1);

assert_eq!(array.pop(), Some(1));
assert_eq!(array.pop(), None);

Remove the element at index and swap the last element into its place.

This operation is O(1).

Return the element if the index is in bounds, else panic.

Panics if the index is out of bounds.

use arrayvec::ArrayVec;

let mut array = ArrayVec::from([1, 2, 3]);

assert_eq!(array.swap_remove(0), 1);
assert_eq!(&array[..], &[3, 2]);

assert_eq!(array.swap_remove(1), 2);
assert_eq!(&array[..], &[3]);

Remove the element at index and swap the last element into its place.

This is a checked version of .swap_remove.
This operation is O(1).

Return Some( element ) if the index is in bounds, else None.

use arrayvec::ArrayVec;

let mut array = ArrayVec::from([1, 2, 3]);

assert_eq!(array.swap_pop(0), Some(1));
assert_eq!(&array[..], &[3, 2]);

assert_eq!(array.swap_pop(10), None);

Remove the element at index and shift down the following elements.

The index must be strictly less than the length of the vector.

Panics if the index is out of bounds.

use arrayvec::ArrayVec;

let mut array = ArrayVec::from([1, 2, 3]);

let removed_elt = array.remove(0);
assert_eq!(removed_elt, 1);
assert_eq!(&array[..], &[2, 3]);

Remove the element at index and shift down the following elements.

This is a checked version of .remove(index). Returns None if there is no element at index. Otherwise, return the element inside Some.

use arrayvec::ArrayVec;

let mut array = ArrayVec::from([1, 2, 3]);

assert!(array.pop_at(0).is_some());
assert_eq!(&array[..], &[2, 3]);

assert!(array.pop_at(2).is_none());
assert!(array.pop_at(10).is_none());

Shortens the vector, keeping the first len elements and dropping the rest.

If len is greater than the vector’s current length this has no effect.

use arrayvec::ArrayVec;

let mut array = ArrayVec::from([1, 2, 3, 4, 5]);
array.truncate(3);
assert_eq!(&array[..], &[1, 2, 3]);
array.truncate(4);
assert_eq!(&array[..], &[1, 2, 3]);

Remove all elements in the vector.

Retains only the elements specified by the predicate.

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

use arrayvec::ArrayVec;

let mut array = ArrayVec::from([1, 2, 3, 4]);
array.retain(|x| *x & 1 != 0 );
assert_eq!(&array[..], &[1, 3]);

Set the vector’s length without dropping or moving out elements

This method is unsafe because it changes the notion of the number of “valid” elements in the vector. Use with care.

This method uses debug assertions to check that check that length is not greater than the capacity.

Important traits for Drain<'a, A>

Create a draining iterator that removes the specified range in the vector and yields the removed items from start to end. The element range is removed even if the iterator is not consumed until the end.

Note: It is unspecified how many elements are removed from the vector, if the Drain value is leaked.

Panics if the starting point is greater than the end point or if the end point is greater than the length of the vector.

use arrayvec::ArrayVec;

let mut v = ArrayVec::from([1, 2, 3]);
let u: ArrayVec<[_; 3]> = v.drain(0..2).collect();
assert_eq!(&v[..], &[3]);
assert_eq!(&u[..], &[1, 2]);

Return the inner fixed size array, if it is full to its capacity.

Return an Ok value with the array if length equals capacity, return an Err with self otherwise.

Note: This function may incur unproportionally large overhead to move the array out, its performance is not optimal.

Dispose of self without the overwriting that is needed in Drop.

Important traits for &'a [u8]

Return a slice containing all elements of the vector.

Important traits for &'a [u8]

Return a mutable slice containing all elements of the vector.

Methods from Deref<Target = [<A as Array>::Item]>

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]);

Important traits for Iter<'a, T>

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);

Important traits for IterMut<'a, T>

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]);

Important traits for Windows<'a, T>

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());

Important traits for Chunks<'a, T>

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());

Important traits for ExactChunks<'a, T>

🔬 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());

Important traits for ChunksMut<'a, T>

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]);

Important traits for ExactChunksMut<'a, T>

🔬 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]);

Important traits for Split<'a, T, P>

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());

Important traits for SplitMut<'a, T, P>

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]);

Important traits for RSplit<'a, T, P>

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);

Important traits for RSplitMut<'a, T, P>

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]);

Important traits for SplitN<'a, T, P>

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);
}

Important traits for SplitNMut<'a, T, P>

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]);

Important traits for RSplitN<'a, T, P>

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);
}

Important traits for RSplitNMut<'a, T, P>

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);
}

Checks if all bytes in this slice are within the ASCII range.

Checks that two slices are an ASCII case-insensitive match.

Same as to_ascii_lowercase(a) == to_ascii_lowercase(b), but without allocating and copying temporaries.

Converts this slice to its ASCII upper case equivalent in-place.

ASCII letters 'a' to 'z' are mapped to 'A' to 'Z', but non-ASCII letters are unchanged.

To return a new uppercased value without modifying the existing one, use to_ascii_uppercase.

Converts this slice to its ASCII lower case equivalent in-place.

ASCII letters 'A' to 'Z' are mapped to 'a' to 'z', but non-ASCII letters are unchanged.

To return a new lowercased value without modifying the existing one, use to_ascii_lowercase.

Sorts the slice.

This sort is stable (i.e. does not reorder equal elements) and O(n log n) worst-case.

When applicable, unstable sorting is preferred because it is generally faster than stable sorting and it doesn't allocate auxiliary memory. See sort_unstable.

Current implementation

The current algorithm is an adaptive, iterative merge sort inspired by timsort. It is designed to be very fast in cases where the slice is nearly sorted, or consists of two or more sorted sequences concatenated one after another.

Also, it allocates temporary storage half the size of self, but for short slices a non-allocating insertion sort is used instead.

Examples

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

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

Sorts the slice with a comparator function.

This sort is stable (i.e. does not reorder equal elements) and O(n log n) worst-case.

When applicable, unstable sorting is preferred because it is generally faster than stable sorting and it doesn't allocate auxiliary memory. See sort_unstable_by.

Current implementation

The current algorithm is an adaptive, iterative merge sort inspired by timsort. It is designed to be very fast in cases where the slice is nearly sorted, or consists of two or more sorted sequences concatenated one after another.

Also, it allocates temporary storage half the size of self, but for short slices a non-allocating insertion sort is used instead.

Examples

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

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

Sorts the slice with a key extraction function.

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

When applicable, unstable sorting is preferred because it is generally faster than stable sorting and it doesn't allocate auxiliary memory. See sort_unstable_by_key.

Current implementation

The current algorithm is an adaptive, iterative merge sort inspired by timsort. It is designed to be very fast in cases where the slice is nearly sorted, or consists of two or more sorted sequences concatenated one after another.

Also, it allocates temporary storage half the size of self, but for short slices a non-allocating insertion sort is used instead.

Examples

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

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

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

Sorts the slice with a key extraction function.

During sorting, the key function is called only once per element.

This sort is stable (i.e. does not reorder equal elements) and O(m n + n log n) worst-case, where the key function is O(m).

For simple key functions (e.g. functions that are property accesses or basic operations), sort_by_key is likely to be faster.

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.

In the worst case, the algorithm allocates temporary storage in a Vec<(K, usize)> the length of the slice.

Examples

#![feature(slice_sort_by_cached_key)]
let mut v = [-5i32, 4, 32, -3, 2];

v.sort_by_cached_key(|k| k.to_string());
assert!(v == [-3, -5, 2, 32, 4]);

Important traits for Vec<u8>

Copies self into a new Vec.

Examples

let s = [10, 40, 30];
let x = s.to_vec();
// Here, `s` and `x` can be modified independently.

Important traits for Vec<u8>

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

it's on str, why not on slice?

Creates a vector by repeating a slice n times.

Examples

Basic usage:

#![feature(repeat_generic_slice)]

fn main() {
    assert_eq!([1, 2].repeat(3), vec![1, 2, 1, 2, 1, 2]);
}

Important traits for Vec<u8>

Returns a vector containing a copy of this slice where each byte is mapped to its ASCII upper case equivalent.

ASCII letters 'a' to 'z' are mapped to 'A' to 'Z', but non-ASCII letters are unchanged.

To uppercase the value in-place, use make_ascii_uppercase.

Important traits for Vec<u8>

Returns a vector containing a copy of this slice where each byte is mapped to its ASCII lower case equivalent.

ASCII letters 'A' to 'Z' are mapped to 'a' to 'z', but non-ASCII letters are unchanged.

To lowercase the value in-place, use make_ascii_lowercase.

Trait Implementations

impl<A> BorrowMut<[<A as Array>::Item]> for ArrayVec<A> where
    A: Array
[src]

Important traits for &'a [u8]

Mutably borrows from an owned value. Read more

impl<A> PartialOrd<ArrayVec<A>> for ArrayVec<A> where
    A: Array,
    <A as Array>::Item: PartialOrd<<A as Array>::Item>, 
[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 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

impl<A> Extend<<A as Array>::Item> for ArrayVec<A> where
    A: Array
[src]

Extend the ArrayVec with an iterator.

Does not extract more items than there is space for. No error occurs if there are more iterator elements.

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

impl<A> Hash for ArrayVec<A> where
    A: Array,
    <A as Array>::Item: Hash
[src]

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

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

impl<A> Borrow<[<A as Array>::Item]> for ArrayVec<A> where
    A: Array
[src]

Important traits for &'a [u8]

Immutably borrows from an owned value. Read more

impl<A> Write for ArrayVec<A> where
    A: Array<Item = u8>, 
[src]

Write appends written data to the end of the vector.

Requires features="std".

Write a buffer into this object, returning how many bytes were written. Read more

Flush this output stream, ensuring that all intermediately buffered contents reach their destination. Read more

Attempts to write an entire buffer into this write. Read more

Writes a formatted string into this writer, returning any error encountered. Read more

Important traits for &'a mut R

Creates a "by reference" adaptor for this instance of Write. Read more

impl<A> Clone for ArrayVec<A> where
    A: Array,
    <A as Array>::Item: Clone
[src]

Important traits for ArrayVec<A>

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

impl<A> DerefMut for ArrayVec<A> where
    A: Array
[src]

Important traits for &'a [u8]

Mutably dereferences the value.

impl<A> Debug for ArrayVec<A> where
    A: Array,
    <A as Array>::Item: Debug
[src]

Formats the value using the given formatter. Read more

impl<A> Ord for ArrayVec<A> where
    A: Array,
    <A as Array>::Item: Ord
[src]

This method returns an Ordering between self and other. Read more

Compares and returns the maximum of two values. Read more

Compares and returns the minimum of two values. Read more

impl<'a, A> IntoIterator for &'a ArrayVec<A> where
    A: Array
[src]

Iterate the ArrayVec with references to each element.

use arrayvec::ArrayVec;

let array = ArrayVec::from([1, 2, 3]);

for elt in &array {
    // ...
}

The type of the elements being iterated over.

Which kind of iterator are we turning this into?

Important traits for ArrayVec<A>

Creates an iterator from a value. Read more

impl<'a, A> IntoIterator for &'a mut ArrayVec<A> where
    A: Array
[src]

Iterate the ArrayVec with mutable references to each element.

use arrayvec::ArrayVec;

let mut array = ArrayVec::from([1, 2, 3]);

for elt in &mut array {
    // ...
}

The type of the elements being iterated over.

Which kind of iterator are we turning this into?

Important traits for ArrayVec<A>

Creates an iterator from a value. Read more

impl<A> IntoIterator for ArrayVec<A> where
    A: Array
[src]

Iterate the ArrayVec with each element by value.

The vector is consumed by this operation.

use arrayvec::ArrayVec;

for elt in ArrayVec::from([1, 2, 3]) {
    // ...
}

The type of the elements being iterated over.

Which kind of iterator are we turning this into?

Important traits for IntoIter<A>

Creates an iterator from a value. Read more

impl<A> AsRef<[<A as Array>::Item]> for ArrayVec<A> where
    A: Array
[src]

Important traits for &'a [u8]

Performs the conversion.

impl<A> From<A> for ArrayVec<A> where
    A: Array
[src]

Create an ArrayVec from an array.

use arrayvec::ArrayVec;

let mut array = ArrayVec::from([1, 2, 3]);
assert_eq!(array.len(), 3);
assert_eq!(array.capacity(), 3);

Important traits for ArrayVec<A>

Performs the conversion.

impl<A> FromIterator<<A as Array>::Item> for ArrayVec<A> where
    A: Array
[src]

Create an ArrayVec from an iterator.

Does not extract more items than there is space for. No error occurs if there are more iterator elements.

Important traits for ArrayVec<A>

Creates a value from an iterator. Read more

impl<A> Default for ArrayVec<A> where
    A: Array
[src]

Important traits for ArrayVec<A>

Return an empty array

impl<A> Deref for ArrayVec<A> where
    A: Array
[src]

The resulting type after dereferencing.

Important traits for &'a [u8]

Dereferences the value.

impl<'de, T, A> Deserialize<'de> for ArrayVec<A> where
    A: Array<Item = T>,
    T: Deserialize<'de>, 
[src]

Requires crate feature "serde-1"

Deserialize this value from the given Serde deserializer. Read more

impl<T, A> Serialize for ArrayVec<A> where
    A: Array<Item = T>,
    T: Serialize
[src]

Requires crate feature "serde-1"

Serialize this value into the given Serde serializer. Read more

impl<A> AsMut<[<A as Array>::Item]> for ArrayVec<A> where
    A: Array
[src]

Important traits for &'a [u8]

Performs the conversion.

impl<A> Eq for ArrayVec<A> where
    A: Array,
    <A as Array>::Item: Eq
[src]

impl<A> Drop for ArrayVec<A> where
    A: Array
[src]

Executes the destructor for this type. Read more

impl<A> PartialEq<ArrayVec<A>> for ArrayVec<A> where
    A: Array,
    <A as Array>::Item: PartialEq<<A as Array>::Item>, 
[src]

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

This method tests for !=.

impl<A> PartialEq<[<A as Array>::Item]> for ArrayVec<A> where
    A: Array,
    <A as Array>::Item: PartialEq<<A as Array>::Item>, 
[src]

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

This method tests for !=.

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 0]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 0]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 1]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 1]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 2]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 2]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 3]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 3]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 4]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 4]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 5]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 5]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 6]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 6]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 7]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 7]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 8]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 8]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 9]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 9]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 10]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 10]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 11]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 11]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 12]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 12]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 13]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 13]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 14]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 14]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 15]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 15]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 16]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 16]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 17]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 17]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 18]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 18]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 19]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 19]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 20]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 20]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 21]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 21]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 22]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 22]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 23]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 23]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 24]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 24]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 25]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 25]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 26]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 26]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 27]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 27]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 28]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 28]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 29]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 29]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 30]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 30]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 31]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 31]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 32]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 32]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 40]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 40]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 48]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 48]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 50]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 50]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 56]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 56]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 64]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 64]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 72]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 72]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 96]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 96]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 100]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 100]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 128]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 128]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 160]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 160]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 192]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 192]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 200]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 200]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 224]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 224]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 256]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 256]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 512]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 512]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

impl<T> UnifiedArrayVecAndVec<T> for ArrayVec<[T; 1024]>
[src]

Obtain maximum capacity.

Obtain length.

Should return a pointer to just after the last element.

Set length.

Truncates without dropping any members (sets length to zero).

impl<T> NonNullUnifiedArrayVecAndVec<T> for ArrayVec<[NonNull<T>; 1024]>
[src]

To FFI data. Read more

To FFI data. Read more

To FFI data. Read more

From FFI data. Read more

From FFI data. Read more

From FFI data. Read more

Auto Trait Implementations

impl<A> Send for ArrayVec<A> where
    A: Send,
    <A as Array>::Index: Send

impl<A> Sync for ArrayVec<A> where
    A: Sync,
    <A as Array>::Index: Sync