pub struct Destaque<T, const CAP: usize, IDX, S: Storage = Bare> { /* private fields */ }_destaqueยทยท only.Expand description
๐๏ธ
A static double-ended queue and stack backed by an Array.
๐ data/layout/queue
It is generic in respect to its
elements (T),
capacity (CAP),
index size (IDX)
and storage (S).
The index size will upper-bound the capacity to the maximum for that type,
e.g. u8::MAX for DestaqueU8.
The index size determines the maximum possible number of elements in the destaque,
thereby upper-bounding the capacity to the maximum value representable by the
index type. For example, u8::MAX for DestaqueU8.
The total size in bytes of the stack may be influenced by the chosen index size, depending on the size and alignment of the elements. This difference could only be significant for small capacities, as only one index is stored.
See also the related aliases that specify IDX:
DestaqueU8, [DestaqueU16], [DestaqueU32], [DestaqueUsize],
and the related traits:
DataQueue, DataDeque,
DataStack, DataDesta.
ยงMethods
It implements methods that operate from both the front and the back. Rememeber that a single-ended stack operates only from the back, while a single-ended queue pushes to the back and pops from the front.
-
General methods:
new,len,is_empty,is_full,clear,contains,capacity,remaining_capacity.iter,extend_back,extend_front,from_array(copy),to_array,to_vec.
-
Queue and stack methods:
- push:
push_back(uc) =enqueue,push_front(uc). - pop:
pop_front=dequeue,pop_back. - peek:
peek_back(mut)peek_nth_back(mut),peek_front(mut),peek_nth_front(mut). - drop:
drop_back,drop_front,drop_n_back,drop_n_front. - swap:
swap_back(uc),swap_front(uc),swap2_back(uc),swap2_front(uc),swap_ends,swap2_ends. - rot:
rot_right,rot_right_n,rot_left,rot_left_n. - dup:
dup_back,dup_front,dup2_back,dup2_front. - over:
over_back,over_front,over2_back,over2_front. - tuck:
tuck_back,tuck_front,tuck2_back,tuck2_front.
- push:
Implementationsยง
impl<T: Clone, const CAP: usize> Destaque<T, CAP, u8, Bare>
Sourceยงimpl<T: Clone, const CAP: usize> Destaque<T, CAP, u8, Bare>
impl<T: Clone, const CAP: usize> Destaque<T, CAP, u8, Bare>
Sourcepub fn new(element: T) -> Result<Self, MismatchedCapacity> โ
pub fn new(element: T) -> Result<Self, MismatchedCapacity> โ
Returns an empty destaque, allocated in the stack,
cloning element to fill the remaining free data.
ยงErrors
Returns MismatchedCapacity if CAP > u8::MAX
or if CAP > isize::MAX / size_of::<T>().
ยงExamples
let q = DestaqueU8::<_, 16>::new(0).unwrap();Sourceยงimpl<T: Copy, const CAP: usize> Destaque<T, CAP, u8, Bare>
impl<T: Copy, const CAP: usize> Destaque<T, CAP, u8, Bare>
Sourcepub const fn new_copied(element: T) -> Result<Self, MismatchedCapacity> โ
pub const fn new_copied(element: T) -> Result<Self, MismatchedCapacity> โ
Returns an empty destaque, allocated in the stack,
copying element to fill the remaining free data, in compile-time.
ยงErrors
Returns MismatchedCapacity if CAP > u8::MAX
or if CAP > isize::MAX / size_of::<T>().
ยงExamples
const S: DestaqueU8<i32, 16> = unwrap![ok DestaqueU8::new_copied(0)];Sourceยงimpl<T, const CAP: usize, S: Storage> Destaque<T, CAP, u8, S>
impl<T, const CAP: usize, S: Storage> Destaque<T, CAP, u8, S>
Sourcepub fn from_array(arr: [T; CAP]) -> Destaque<T, CAP, u8, S>
pub fn from_array(arr: [T; CAP]) -> Destaque<T, CAP, u8, S>
Sourcepub const fn is_empty(&self) -> bool
pub const fn is_empty(&self) -> bool
Returns true if the destaque is empty.
ยงExamples
let q = DestaqueU8::<i32, 8>::default();
assert![q.is_empty()];Sourcepub const fn is_full(&self) -> bool
pub const fn is_full(&self) -> bool
Returns true if the destaque is full.
ยงExamples
let q = DestaqueU8::<_, 3>::from([1, 2, 3]);
assert![q.is_full()];Sourcepub const fn capacity(&self) -> u8
pub const fn capacity(&self) -> u8
Returns the destaqueโs total capacity.
ยงExamples
let q = DestaqueU8::<i32, 3>::default();
assert_eq![3, q.capacity()];Sourcepub const fn remaining_capacity(&self) -> u8
pub const fn remaining_capacity(&self) -> u8
Returns the destaqueโs remaining capacity.
ยงExamples
let mut q = DestaqueU8::<i32, 3>::default();
assert_eq![3, q.remaining_capacity()];
q.push_back(1)?;
assert_eq![2, q.remaining_capacity()];Sourcepub fn as_slices(&self) -> (&[T], &[T]) โ
pub fn as_slices(&self) -> (&[T], &[T]) โ
Returns the destaque as pair of shared slices, which contain, in order, the contents of the destaque.
ยงExamples
let q = DestaqueU8::<_, 3>::from([1, 2, 3]);
assert_eq![q.as_slices(), (&[1, 2, 3][..], &[][..])];Sourcepub const fn is_contiguous(&self) -> bool
pub const fn is_contiguous(&self) -> bool
Returns true if the destaque is contiguous.
ยงExamples
let mut q = DestaqueU8::<_, 3>::from([1, 2, 3]);
assert_eq![q.as_slices(), (&[1, 2, 3][..], &[][..])];
assert![q.is_contiguous()];
q.pop_back()?;
q.push_front(4)?;
assert![!q.is_contiguous()];
assert_eq![q.as_slices(), (&[4][..], &[1, 2][..])];Sourcepub fn push_front(&mut self, element: T) -> Result<(), NotEnoughSpace> โ
pub fn push_front(&mut self, element: T) -> Result<(), NotEnoughSpace> โ
Pushes a new element to the front of the destaque.
( 1 2 -- 3 1 2 )
ยงErrors
Returns NotEnoughSpace if the destaque is full.
ยงExamples
let mut q = DestaqueU8::<u8, 3>::default();
q.push_front(1)?;
q.push_front(2)?;
q.push_front(3)?;
assert_eq![q.to_array(), Some([3, 2, 1])];Sourcepub fn push_front_unchecked(&mut self, element: T)
pub fn push_front_unchecked(&mut self, element: T)
Sourcepub fn push_front_override(&mut self, element: T) -> bool
pub fn push_front_override(&mut self, element: T) -> bool
Pushes a new element to the front of the destaque,
overriding an element from the back if the destaque is full.
Returns true if an element was overridden, and false otherwise.
ยงExamples
let mut q = DestaqueU8::<_, 3>::from([1, 2]);
assert_eq!(q.push_front_override(3), false);
assert_eq![q.to_array(), Some([3, 1, 2])];
assert_eq!(q.push_front_override(4), true);
assert_eq![q.to_array(), Some([4, 3, 1])];Sourcepub fn push_back(&mut self, element: T) -> Result<(), NotEnoughSpace> โ
pub fn push_back(&mut self, element: T) -> Result<(), NotEnoughSpace> โ
Pushes a new element to the back of the destaque.
This is the habitual enqueue operation for a single-ended queue.
( 1 2 -- 1 2 3 )
ยงErrors
Returns NotEnoughSpace if the destaque is full.
ยงExamples
let mut q = DestaqueU8::<u8, 3>::default();
q.push_back(1)?;
q.push_back(2)?;
q.push_back(3)?;
assert_eq![q.to_array(), Some([1, 2, 3])];Sourcepub fn enqueue(&mut self, element: T) -> Result<(), NotEnoughSpace> โ
pub fn enqueue(&mut self, element: T) -> Result<(), NotEnoughSpace> โ
Alias of push_back.
This is the habitual enqueue operation for a single-ended queue.
Sourcepub fn push_back_unchecked(&mut self, element: T)
pub fn push_back_unchecked(&mut self, element: T)
Sourcepub fn push_back_override(&mut self, element: T) -> bool
pub fn push_back_override(&mut self, element: T) -> bool
Pushes a new element to the back of the destaque,
overriding the first element if the destaque is full.
Returns true if an element was overridden, and false otherwise.
ยงExamples
let mut q = DestaqueU8::<_, 3>::from([1, 2]);
assert_eq!(q.push_back_override(3), false);
assert_eq![q.to_array(), Some([1, 2, 3])];
assert_eq!(q.push_back_override(4), true);
assert_eq![q.to_array(), Some([2, 3, 4])];Sourcepub fn pop_front(&mut self) -> Result<T, NotEnoughElements> โ
Available on crate feature unsafe_ptr only.
pub fn pop_front(&mut self) -> Result<T, NotEnoughElements> โ
unsafe_ptr only.Pops the front element.
This is the habitual dequeue operation for a signle-ended queue.
( 1 2 -- 2 )
ยงErrors
Returns NotEnoughElements if the queue is empty.
ยงExamples
let mut q = DestaqueU8::<_, 8>::from([1, 2, 3]);
assert_eq![1, q.pop_front()?];
assert_eq![2, q.pop_front()?];
assert_eq![3, q.pop_front()?];
assert![q.is_empty()];ยงFeatures
Itโs depends on T: Clone, unless the unsafe_ptr feature is enabled.
Sourcepub fn dequeue(&mut self) -> Result<T, NotEnoughElements> โ
Available on crate feature unsafe_ptr only.
pub fn dequeue(&mut self) -> Result<T, NotEnoughElements> โ
unsafe_ptr only.Alias of pop_front.
This is the habitual dequeue operation for a single-ended queue.
Sourcepub fn pop_back(&mut self) -> Result<T, NotEnoughElements> โ
Available on crate feature unsafe_ptr only.
pub fn pop_back(&mut self) -> Result<T, NotEnoughElements> โ
unsafe_ptr only.Pops the back element.
( 1 2-- 1 )
ยงErrors
Returns NotEnoughElements if the destaque is empty.
ยงExamples
let mut q = DestaqueU8::<_, 8>::from([1, 2, 3]);
assert_eq![3, q.pop_back()?];
assert_eq![2, q.pop_back()?];
assert_eq![1, q.pop_back()?];
assert![q.is_empty()];ยงFeatures
Itโs depends on T: Clone, unless the unsafe_ptr feature is enabled.
Sourcepub fn peek_back(&self) -> Result<&T, NotEnoughElements> โ
pub fn peek_back(&self) -> Result<&T, NotEnoughElements> โ
Returns a shared reference to the back element.
ยงErrors
Returns NotEnoughElements if the destaque is empty.
ยงExamples
let q = DestaqueU8::<_, 8>::from([1, 2, 3]);
assert_eq![&3, q.peek_back()?];Sourcepub fn peek_back_mut(&mut self) -> Result<&mut T, NotEnoughElements> โ
pub fn peek_back_mut(&mut self) -> Result<&mut T, NotEnoughElements> โ
Returns an exclusive reference to the back element.
ยงErrors
Returns NotEnoughElements if the destaque is empty.
ยงExamples
let mut q = DestaqueU8::<_, 8>::from([1, 2, 3]);
assert_eq![&mut 3, q.peek_back_mut()?];Sourcepub fn peek_nth_back(&self, nth: u8) -> Result<&T, NotEnoughElements> โ
pub fn peek_nth_back(&self, nth: u8) -> Result<&T, NotEnoughElements> โ
Returns a shared reference to the nth back element.
ยงErrors
Returns NotEnoughElements if the destaque doesnโt have at least nth elements.
ยงExamples
let q = DestaqueU8::<_, 8>::from([1, 2, 3]);
assert_eq![&1, q.peek_nth_back(2)?];Sourcepub fn peek_nth_back_mut(
&mut self,
nth: u8,
) -> Result<&mut T, NotEnoughElements> โ
pub fn peek_nth_back_mut( &mut self, nth: u8, ) -> Result<&mut T, NotEnoughElements> โ
Returns an exclusive reference to the nth back element.
ยงErrors
Returns NotEnoughElements if the destaque doesnโt have at least nth elements.
ยงExamples
let mut q = DestaqueU8::<_, 8>::from([1, 2, 3]);
assert_eq![&mut 1, q.peek_nth_back_mut(2)?];Sourcepub fn peek_front(&self) -> Result<&T, NotEnoughElements> โ
pub fn peek_front(&self) -> Result<&T, NotEnoughElements> โ
Returns a shared reference to the front element.
ยงErrors
Returns NotEnoughElements if the destaque is empty.
ยงExamples
let q = DestaqueU8::<_, 8>::from([1, 2, 3]);
assert_eq![&1, q.peek_front()?];Sourcepub fn peek_front_mut(&mut self) -> Result<&mut T, NotEnoughElements> โ
pub fn peek_front_mut(&mut self) -> Result<&mut T, NotEnoughElements> โ
Returns an exclusive reference to the front element.
ยงErrors
Returns NotEnoughElements if the destaque is empty.
ยงExamples
let mut q = DestaqueU8::<_, 8>::from([1, 2, 3]);
assert_eq![&mut 1, q.peek_front_mut()?];Sourcepub fn peek_nth_front(&self, nth: u8) -> Result<&T, NotEnoughElements> โ
pub fn peek_nth_front(&self, nth: u8) -> Result<&T, NotEnoughElements> โ
Returns a shared reference to the nth front element.
ยงErrors
Returns NotEnoughElements if the destaque doesnโt have at least nth elements.
ยงExamples
let q = DestaqueU8::<_, 8>::from([1, 2, 3, 4]);
assert_eq![&3, q.peek_nth_front(2)?];Sourcepub fn peek_nth_front_mut(
&mut self,
nth: u8,
) -> Result<&mut T, NotEnoughElements> โ
pub fn peek_nth_front_mut( &mut self, nth: u8, ) -> Result<&mut T, NotEnoughElements> โ
Returns an exclusive reference to the nth front element.
ยงErrors
Returns NotEnoughElements if the destaque doesnโt have at least nth elements.
ยงExamples
let mut q = DestaqueU8::<_, 8>::from([1, 2, 3, 4]);
assert_eq![&mut 3, q.peek_nth_front_mut(2)?];Sourcepub const fn clear(&mut self)
pub const fn clear(&mut self)
Clears the destaque.
( 1 2 -- )
ยงExamples
let mut q = DestaqueU8::<_, 8>::from([1, 2, 3, 4]);
q.clear();
assert![q.is_empty()];Sourcepub fn drop_back(&mut self) -> Result<(), NotEnoughElements> โ
pub fn drop_back(&mut self) -> Result<(), NotEnoughElements> โ
Drops the back element.
( 1 2 -- 1 )
ยงErrors
Returns NotEnoughElements if the destaque is empty.
ยงExamples
let mut q = DestaqueU8::<_, 8>::from([1, 2]);
q.drop_back()?;
assert_eq![q.to_array(), Some([1])];Sourcepub fn drop_front(&mut self) -> Result<(), NotEnoughElements> โ
pub fn drop_front(&mut self) -> Result<(), NotEnoughElements> โ
Drops the front element.
( 1 2 -- 2 )
ยงErrors
Returns NotEnoughElements if the destaque is empty.
ยงExamples
let mut q = DestaqueU8::<_, 8>::from([1, 2]);
q.drop_front()?;
assert_eq![q.to_array(), Some([2])];Sourcepub fn drop_n_back(&mut self, nth: u8) -> Result<(), NotEnoughElements> โ
pub fn drop_n_back(&mut self, nth: u8) -> Result<(), NotEnoughElements> โ
Drops n elements from the back.
( 1 2 3 4 -- 1 ) for n = 3
ยงErrors
Returns NotEnoughElements if the destaque doesnโt contain at least nth elements.
ยงExamples
let mut q = DestaqueU8::<_, 8>::from([1, 2, 3, 4]);
q.drop_n_back(3)?;
assert_eq![q.to_array(), Some([1])];Sourcepub fn drop_n_front(&mut self, nth: u8) -> Result<(), NotEnoughElements> โ
pub fn drop_n_front(&mut self, nth: u8) -> Result<(), NotEnoughElements> โ
Drops n elements from the front.
( 1 2 3 4 -- 4 ) for n = 3
ยงErrors
Returns NotEnoughElements
if the destaque doesnโt contain at least nth elements.
ยงExamples
let mut q = DestaqueU8::<_, 8>::from([1, 2, 3, 4]);
q.drop_n_front(3)?;
assert_eq![q.to_array(), Some([4])];Sourcepub fn swap_back(&mut self) -> Result<(), NotEnoughElements> โ
pub fn swap_back(&mut self) -> Result<(), NotEnoughElements> โ
Swaps the last two elements at the back of the destaque.
( 1 2 3 4 -- 1 2 4 3 )
ยงErrors
Returns NotEnoughElements if the destaque doesnโt contain at least 2 elements.
ยงExamples
let mut q = DestaqueU8::<_, 4>::from([1, 2, 3, 4]);
q.swap_back();
assert_eq![q.to_array(), Some([1, 2, 4, 3])];Sourcepub fn swap_back_unchecked(&mut self)
pub fn swap_back_unchecked(&mut self)
Sourcepub fn swap_front(&mut self) -> Result<(), NotEnoughElements> โ
pub fn swap_front(&mut self) -> Result<(), NotEnoughElements> โ
Swaps the first two elements at the front of the destaque.
( 1 2 3 4 -- 2 1 3 4 )
ยงErrors
Returns NotEnoughElements if the destaque doesnโt contain at least 2 elements.
ยงExamples
let mut q = DestaqueU8::<_, 4>::from([1, 2, 3, 4]);
q.swap_front();
assert_eq![q.to_array(), Some([2, 1, 3, 4])];Sourcepub fn swap_front_unchecked(&mut self)
pub fn swap_front_unchecked(&mut self)
Unchecked version of swap_front.
ยงPanics
Panics if the destaque doesnโt contain at least 2 elements.
Sourcepub fn swap2_back(&mut self) -> Result<(), NotEnoughElements> โ
pub fn swap2_back(&mut self) -> Result<(), NotEnoughElements> โ
Swaps the last two pairs of elements at the back of the destaque.
( 1 2 3 4 5 6 7 8 -- 1 2 3 4 7 8 5 6 )
ยงErrors
Returns NotEnoughElements if the destaque doesnโt contain at least 2 elements.
ยงExamples
let mut q = DestaqueU8::<_, 16>::from([1, 2, 3, 4, 5, 6, 7, 8]);
q.swap2_back();
assert_eq![q.to_array(), Some([1, 2, 3, 4, 7, 8, 5, 6])];Sourcepub fn swap2_back_unchecked(&mut self)
pub fn swap2_back_unchecked(&mut self)
Unchecked version of swap2_back.
ยงPanics
Panics if the destaque doesnโt contain at least 2 elements.
Sourcepub fn swap2_front(&mut self) -> Result<(), NotEnoughElements> โ
pub fn swap2_front(&mut self) -> Result<(), NotEnoughElements> โ
Swaps the first two pairs of elements at the front of the destaque.
( 1 2 3 4 5 6 7 8 -- 3 4 1 2 5 6 7 8 )
ยงErrors
Returns NotEnoughElements if the destaque doesnโt contain at least 4 elements.
ยงExamples
let mut q = DestaqueU8::<_, 16>::from([1, 2, 3, 4, 5, 6, 7, 8]);
q.swap2_front();
assert_eq![q.to_array(), Some([3, 4, 1, 2, 5, 6, 7, 8])];Sourcepub fn swap2_front_unchecked(&mut self)
pub fn swap2_front_unchecked(&mut self)
Unchecked version of swap2_back.
ยงPanics
Panics if the destaque doesnโt contain at least 2 elements.
Sourcepub fn swap_ends(&mut self) -> Result<(), NotEnoughElements> โ
pub fn swap_ends(&mut self) -> Result<(), NotEnoughElements> โ
Swaps the front and back elements.
( 1 2 3 4 -- 4 2 3 1 )
ยงErrors
Returns NotEnoughElements if the destaque doesnโt contain at least 2 elements.
ยงExamples
let mut q = DestaqueU8::<_, 6>::from([1, 2, 3, 4, 5]);
q.swap_ends();
assert_eq![q.to_array(), Some([5, 2, 3, 4, 1])];Sourcepub fn swap2_ends(&mut self) -> Result<(), NotEnoughElements> โ
pub fn swap2_ends(&mut self) -> Result<(), NotEnoughElements> โ
Swaps the front and back pairs of elements.
( 1 2 3 4 5 6 7 8 -- 7 8 3 4 5 6 1 2 )
ยงErrors
Returns NotEnoughElements if the destaque doesnโt contain at least 4 elements.
ยงExamples
let mut q = DestaqueU8::<_, 16>::from([1, 2, 3, 4, 5, 6, 7, 8]);
q.swap2_ends();
assert_eq![q.to_array(), Some([7, 8, 3, 4, 5, 6, 1, 2])];Sourcepub fn rot_right(&mut self)
pub fn rot_right(&mut self)
Rotates all the destaqued elements one place to the right.
( 1 2 3 4 -- 4 1 2 3 )
ยงExamples
let mut q = DestaqueU8::<i32, 8>::from([2, 3]);
q.push_front(1)?;
q.push_back(4)?;
assert_eq![q.to_array(), Some([1, 2, 3, 4])];
q.rot_right();
assert_eq![q.to_array(), Some([4, 1, 2, 3])];Sourcepub fn rot_right_n(&mut self, nth: u8)
pub fn rot_right_n(&mut self, nth: u8)
Rotates all the destaqued elements n places to the right.
( 1 2 3 4 -- 2 3 4 1 ) for n = 3
ยงExamples
let mut q = DestaqueU8::<i32, 8>::from([2, 3]);
q.push_front(1)?;
q.push_back(4)?;
assert_eq![q.to_array(), Some([1, 2, 3, 4])];
q.rot_right_n(3);
assert_eq![q.to_array(), Some([2, 3, 4, 1])];Sourcepub fn rot_left(&mut self)
pub fn rot_left(&mut self)
Rotates all the destaqued elements one place to the left.
( 1 2 3 4 -- 2 3 4 1 )
ยงExamples
let mut q = DestaqueU8::<i32, 8>::from([2, 3]);
q.push_front(1)?;
q.push_back(4)?;
assert_eq![q.to_array(), Some([1, 2, 3, 4])];
q.rot_left();
assert_eq![q.to_array(), Some([2, 3, 4, 1])];Sourcepub fn rot_left_n(&mut self, nth: u8)
pub fn rot_left_n(&mut self, nth: u8)
Rotates all the destaqued elements n places to the left.
( 1 2 3 4 -- 4 1 2 3 ) for nth = 3
ยงExamples
let mut q = DestaqueU8::<i32, 8>::from([2, 3]);
q.push_front(1)?;
q.push_back(4)?;
assert_eq![q.to_array(), Some([1, 2, 3, 4])];
q.rot_left_n(3);
assert_eq![q.to_array(), Some([4, 1, 2, 3])];Sourceยงimpl<T: Clone, const CAP: usize, S: Storage> Destaque<T, CAP, u8, S>
impl<T: Clone, const CAP: usize, S: Storage> Destaque<T, CAP, u8, S>
Sourcepub fn make_contiguous(&mut self, element: T) -> &mut [T] โ
pub fn make_contiguous(&mut self, element: T) -> &mut [T] โ
Makes the elements of the destaque contiguous, rearranging the elements so that they are in a single, continuous block starting from the front.
This operation might rearrange the internal representation of the elements to ensure they are contiguous. It clones the default element provided during the destaqueโs construction to fill any gaps if necessary.
Returns a mutable slice to the now contiguous elements.
ยงExamples
let mut q = DestaqueU8::<_, 5>::new(0).unwrap();
q.push_back(1);
q.push_back(2);
q.push_front(5);
assert_eq!(q.as_slices(), (&[5][..], &[1, 2][..]));
assert_eq!(q.make_contiguous(0), &[5, 1, 2]);
assert_eq!(q.as_slices(), (&[5, 1, 2][..], &[][..]));Sourcepub fn to_vec(&self) -> Vec<T> โ
Available on crate feature alloc only.
pub fn to_vec(&self) -> Vec<T> โ
alloc only.Returns the destaqued elements as a vector.
ยงExamples
let mut q = DestaqueU8::<_, 5>::from([3, 4]);
q.push_front(2)?;
q.push_back(5)?;
q.push_front(1)?;
assert_eq![q.to_vec(), vec![1, 2, 3, 4, 5]];Sourcepub fn to_array<const LEN: usize>(&self) -> Option<[T; LEN]> โ
pub fn to_array<const LEN: usize>(&self) -> Option<[T; LEN]> โ
Returns some LEN destaqued elements as an array, or None if the destaque
is empty, or there are not at least LEN elements.
This is a non alloc alternative method to to_vec.
ยงPanics
Panics if the new LEN sized array canโt be allocated.
ยงExamples
let mut q = DestaqueU8::<_, 5>::from([3, 4]);
q.push_front(2)?;
q.push_back(5)?;
q.push_front(1)?;
assert_eq![q.to_array::<5>(), Some([1, 2, 3, 4, 5])];ยงFeatures
Makes use of the unsafe_array feature if enabled.
Sourcepub fn dup_back(&mut self) -> Result<(), DataNotEnough> โ
pub fn dup_back(&mut self) -> Result<(), DataNotEnough> โ
Duplicates the back element at the back
( 1 2 -- 1 2 2 )
ยงErrors
Returns NotEnoughElements if the destaque is empty
or NotEnoughSpace if it is full.
ยงExamples
let mut q = DestaqueU8::<u8, 4>::from([1, 2, 3]);
q.dup_back()?;
assert_eq![q.to_array(), Some([1, 2, 3, 3])];Sourcepub fn dup_front(&mut self) -> Result<(), DataNotEnough> โ
pub fn dup_front(&mut self) -> Result<(), DataNotEnough> โ
Duplicates the front element at the front.
( 1 2 -- 1 1 2 )
ยงErrors
Returns NotEnoughElements if the destaque is empty
or NotEnoughSpace if it is full.
ยงExamples
let mut q = DestaqueU8::<u8, 4>::from([1, 2, 3]);
q.dup_front()?;
assert_eq![q.to_array(), Some([1, 1, 2, 3])];Sourcepub fn dup2_back(&mut self) -> Result<(), DataNotEnough> โ
pub fn dup2_back(&mut self) -> Result<(), DataNotEnough> โ
Duplicates the back pair of elements, at the back.
( 1 2 3 4 -- 1 2 3 4 3 4)
ยงErrors
Returns NotEnoughElements if the destaque doesnโt have at least 2 elements,
or NotEnoughSpace if it doesnโt have space for 2 additional elements.
ยงExamples
let mut q = DestaqueU8::<u8, 6>::from([1, 2, 3, 4]);
q.dup2_back()?;
assert_eq![q.to_array(), Some([1, 2, 3, 4, 3, 4])];Sourcepub fn dup2_front(&mut self) -> Result<(), DataNotEnough> โ
pub fn dup2_front(&mut self) -> Result<(), DataNotEnough> โ
Duplicates the front pair of elements, at the front.
( 1 2 3 4 -- 1 2 1 2 3 4)
ยงErrors
Returns NotEnoughElements if the destaque doesnโt have at least 2 elements,
or NotEnoughSpace if it doesnโt have space for 2 additional elements.
ยงExamples
let mut q = DestaqueU8::<u8, 6>::from([1, 2, 3, 4]);
q.dup2_front()?;
assert_eq![q.to_array(), Some([1, 2, 1, 2, 3, 4])];Sourcepub fn over_back(&mut self) -> Result<(), DataNotEnough> โ
pub fn over_back(&mut self) -> Result<(), DataNotEnough> โ
Duplicates the second back element, at the back.
( 1 2 3 4 -- 1 2 3 4 3 )
ยงErrors
Returns NotEnoughElements if the destaque doesnโt have at least 2 elements,
or NotEnoughSpace if it is full.
ยงExamples
let mut q = DestaqueU8::<u8, 7>::from([1, 2, 3, 4]);
q.over_back()?;
assert_eq![q.to_array(), Some([1, 2, 3, 4, 3])];Sourcepub fn over_front(&mut self) -> Result<(), DataNotEnough> โ
pub fn over_front(&mut self) -> Result<(), DataNotEnough> โ
Duplicates the second front element, at the front.
( 1 2 3 4 -- 2 1 2 3 4 )
ยงErrors
Returns NotEnoughElements if the destaque doesnโt have at least 2 elements,
or NotEnoughSpace if it is full.
ยงExamples
let mut q = DestaqueU8::<u8, 7>::from([1, 2, 3, 4]);
q.over_front()?;
assert_eq![q.to_array(), Some([2, 1, 2, 3, 4])];Sourcepub fn over2_back(&mut self) -> Result<(), DataNotEnough> โ
pub fn over2_back(&mut self) -> Result<(), DataNotEnough> โ
Duplicates the second back pair of elements, at the back.
( 1 2 3 4 5 6 7 8 -- 1 2 3 4 5 6 7 8 5 6 )
ยงErrors
Returns NotEnoughElements if the destaque doesnโt have at least 4 elements,
or NotEnoughSpace if it doesnโt have space for 2 additional elements.
ยงExamples
let mut q = DestaqueU8::<u8, 8>::from([1, 2, 3, 4, 5, 6]);
q.over2_back()?;
assert_eq![q.to_array(), Some([1, 2, 3, 4, 5, 6, 3, 4])];Sourcepub fn over2_front(&mut self) -> Result<(), DataNotEnough> โ
pub fn over2_front(&mut self) -> Result<(), DataNotEnough> โ
Duplicates the second front pair of elements, at the front.
( 1 2 3 4 5 6 7 8 -- 3 4 1 2 3 4 5 6 7 8 )
ยงErrors
Returns NotEnoughElements if the destaque doesnโt have at least 4 elements,
or NotEnoughSpace if it doesnโt have space for 2 additional elements.
ยงExamples
let mut q = DestaqueU8::<u8, 8>::from([1, 2, 3, 4, 5, 6]);
q.over2_front()?;
assert_eq![q.to_array(), Some([3, 4, 1, 2, 3, 4, 5, 6])];Sourcepub fn tuck_back(&mut self) -> Result<(), DataNotEnough> โ
pub fn tuck_back(&mut self) -> Result<(), DataNotEnough> โ
Duplicates the back element, before the second back element.
( 1 2 3 4 -- 1 2 4 3 4 )
ยงErrors
Returns NotEnoughElements if the destaque doesnโt have at least 2 elements,
or NotEnoughSpace if it is full.
ยงExamples
let mut q = DestaqueU8::<u8, 7>::from([1, 2, 3, 4, 5]);
q.tuck_back()?;
assert_eq![q.to_array(), Some([1, 2, 3, 5, 4, 5])];Sourcepub fn tuck_front(&mut self) -> Result<(), DataNotEnough> โ
pub fn tuck_front(&mut self) -> Result<(), DataNotEnough> โ
Duplicates the front element, after the second front element.
( 1 2 3 4 -- 1 2 1 3 4 )
ยงErrors
Returns NotEnoughElements if the destaque doesnโt have at least 2 elements,
or NotEnoughSpace if it is full.
ยงExamples
let mut q = DestaqueU8::<u8, 7>::from([1, 2, 3, 4, 5]);
q.tuck_front()?;
assert_eq![q.to_array(), Some([1, 2, 1, 3, 4, 5])];Sourcepub fn tuck2_back(&mut self) -> Result<(), DataNotEnough> โ
pub fn tuck2_back(&mut self) -> Result<(), DataNotEnough> โ
Duplicates the back pair of elements, before the second back pair of elements.
( 1 2 3 4 5 6 7 8 -- 1 2 3 4 7 8 5 6 7 8 )
ยงErrors
Returns NotEnoughElements if the destaque doesnโt have at least 4 elements,
or NotEnoughSpace if it doesnโt have space for 2 additional elements.
ยงExamples
let mut q = DestaqueU8::<u8, 7>::from([1, 2, 3, 4, 5]);
q.tuck2_back()?;
assert_eq![q.to_array(), Some([1, 4, 5, 2, 3, 4, 5])];Sourcepub fn tuck2_front(&mut self) -> Result<(), DataNotEnough> โ
pub fn tuck2_front(&mut self) -> Result<(), DataNotEnough> โ
Duplicates the front pair of elements, after the second front pair of elements.
( 1 2 3 4 5 6 7 8 -- 1 2 3 4 1 2 5 6 7 8 )
ยงErrors
Returns NotEnoughElements if the destaque doesnโt have at least 4 elements,
or NotEnoughSpace if it doesnโt have space for 2 additional elements.
ยงExamples
let mut q = DestaqueU8::<u8, 7>::from([1, 2, 3, 4, 5]);
q.tuck2_front()?;
assert_eq![q.to_array(), Some([1, 2, 3, 4, 1, 2, 5])];Sourceยงimpl<T, const CAP: usize, S: Storage> Destaque<T, CAP, u8, S>
impl<T, const CAP: usize, S: Storage> Destaque<T, CAP, u8, S>
Sourcepub const fn iter(&self) -> DestaqueIter<'_, T, CAP, u8, S> โ
pub const fn iter(&self) -> DestaqueIter<'_, T, CAP, u8, S> โ
Returns an iterator.
Sourcepub fn extend_back<I>(&mut self, iterator: I) -> Result<(), NotEnoughSpace> โwhere
I: IntoIterator<Item = T>,
pub fn extend_back<I>(&mut self, iterator: I) -> Result<(), NotEnoughSpace> โwhere
I: IntoIterator<Item = T>,
Extends the back of the destaque from an iterator.
( 1 2 -- 1 2 3 4 5 6) for [3 4 5 6]
ยงErrors
Returns NotEnoughSpace if the destaque becomes full before the iterator finishes.
ยงExamples
let mut q = DestaqueU8::<_, 6>::from([1, 2, 3]);
q.extend_back([4, 5, 6, 7, 8]);
assert_eq![q.to_array(), Some([1, 2, 3, 4, 5, 6])];Sourcepub fn extend_back_override<I>(&mut self, iterator: I) -> boolwhere
I: IntoIterator<Item = T>,
pub fn extend_back_override<I>(&mut self, iterator: I) -> boolwhere
I: IntoIterator<Item = T>,
Extends the back of the destaque from an iterator, overriding elements from the front if the destaque is full.
( 1 2 3 -- 3 4 5 6) for [4 5 6] and CAP = 4
ยงExamples
let mut q = DestaqueU8::<_, 4>::from([1, 2, 3]);
assert_eq![q.extend_back_override([4, 5, 6]), true];
assert_eq![q.to_array(), Some([3, 4, 5, 6])];Sourcepub fn extend_front<I>(&mut self, iterator: I) -> Result<(), NotEnoughSpace> โwhere
I: IntoIterator<Item = T>,
pub fn extend_front<I>(&mut self, iterator: I) -> Result<(), NotEnoughSpace> โwhere
I: IntoIterator<Item = T>,
Extends the front of the destaque from an iterator.
( 1 2 -- 6 5 4 3 1 2 ) for [3 4 5 6]
ยงErrors
Returns NotEnoughSpace
if the destaque becomes full before the iterator finishes.
ยงExamples
let mut q = DestaqueU8::<_, 6>::from([1, 2, 3]);
q.extend_front([4, 5, 6, 7, 8]);
assert_eq![q.to_array(), Some([6, 5, 4, 1, 2, 3])];Sourcepub fn extend_front_override<I>(&mut self, iterator: I) -> boolwhere
I: IntoIterator<Item = T>,
pub fn extend_front_override<I>(&mut self, iterator: I) -> boolwhere
I: IntoIterator<Item = T>,
Extends the front of the destaque from an iterator, overriding elements from the back if the destaque is full.
( 1 2 3 -- 6 5 4 1) for [4 5 6] and CAP = 4
ยงExamples
let mut q = DestaqueU8::<_, 4>::from([1, 2, 3]);
assert_eq![q.extend_front_override([4, 5, 6]), true];
assert_eq![q.to_array(), Some([6, 5, 4, 1])];Trait Implementationsยง
Sourceยงimpl<T: ConstInit, const CAP: usize, IDX: ConstInit> ConstInit for Destaque<T, CAP, IDX, Bare>
impl<T: ConstInit, const CAP: usize, IDX: ConstInit> ConstInit for Destaque<T, CAP, IDX, Bare>
impl<T: Copy, const CAP: usize, IDX: Copy, S: Storage> Copy for Destaque<T, CAP, IDX, S>
Sourceยงimpl<T, const LEN: usize, S: Storage> DataCollection for Destaque<T, LEN, u8, S>
impl<T, const LEN: usize, S: Storage> DataCollection for Destaque<T, LEN, u8, S>
Sourceยงfn collection_capacity(&self) -> Result<usize, NotAvailable> โ
fn collection_capacity(&self) -> Result<usize, NotAvailable> โ
Sourceยงfn collection_len(&self) -> Result<usize, NotAvailable> โ
fn collection_len(&self) -> Result<usize, NotAvailable> โ
Sourceยงfn collection_is_empty(&self) -> Result<bool, NotAvailable> โ
fn collection_is_empty(&self) -> Result<bool, NotAvailable> โ
true if the collection is empty, false if itโs not.Sourceยงfn collection_is_full(&self) -> Result<bool, NotAvailable> โ
fn collection_is_full(&self) -> Result<bool, NotAvailable> โ
true if the collection is full, false if itโs not.Sourceยงfn collection_contains(
&self,
element: Self::Element,
) -> Result<bool, NotAvailable> โwhere
T: PartialEq,
fn collection_contains(
&self,
element: Self::Element,
) -> Result<bool, NotAvailable> โwhere
T: PartialEq,
true if the collection contains the given element.Sourceยงfn collection_count(
&self,
element: &Self::Element,
) -> Result<usize, NotAvailable> โwhere
T: PartialEq,
fn collection_count(
&self,
element: &Self::Element,
) -> Result<usize, NotAvailable> โwhere
T: PartialEq,
element appears in the collection.Sourceยงimpl<T, const CAP: usize, S: Storage> DataDeque for Destaque<T, CAP, u8, S>
Available on crate feature unsafe_ptr only.
impl<T, const CAP: usize, S: Storage> DataDeque for Destaque<T, CAP, u8, S>
unsafe_ptr only.Sourceยงfn queue_pop_back(
&mut self,
) -> Result<<Self as DataCollection>::Element, NotEnoughElements> โ
fn queue_pop_back( &mut self, ) -> Result<<Self as DataCollection>::Element, NotEnoughElements> โ
Sourceยงfn queue_push_front(
&mut self,
element: <Self as DataCollection>::Element,
) -> Result<(), NotEnoughSpace> โ
fn queue_push_front( &mut self, element: <Self as DataCollection>::Element, ) -> Result<(), NotEnoughSpace> โ
Sourceยงfn queue_pop_front(
&mut self,
) -> Result<<Self as DataCollection>::Element, NotEnoughElements> โ
fn queue_pop_front( &mut self, ) -> Result<<Self as DataCollection>::Element, NotEnoughElements> โ
Sourceยงfn queue_push_back(
&mut self,
element: <Self as DataCollection>::Element,
) -> Result<(), NotEnoughSpace> โ
fn queue_push_back( &mut self, element: <Self as DataCollection>::Element, ) -> Result<(), NotEnoughSpace> โ
queue_push). Read moreSourceยงimpl<T, const CAP: usize, S: Storage> DataDesta for Destaque<T, CAP, u8, S>
Available on crate feature unsafe_ptr only.
impl<T, const CAP: usize, S: Storage> DataDesta for Destaque<T, CAP, u8, S>
unsafe_ptr only.Sourceยงfn stack_pop_front(
&mut self,
) -> Result<<Self as DataCollection>::Element, NotEnoughElements> โ
fn stack_pop_front( &mut self, ) -> Result<<Self as DataCollection>::Element, NotEnoughElements> โ
Sourceยงfn stack_push_front(
&mut self,
element: <Self as DataCollection>::Element,
) -> Result<(), NotEnoughSpace> โ
fn stack_push_front( &mut self, element: <Self as DataCollection>::Element, ) -> Result<(), NotEnoughSpace> โ
Sourceยงfn stack_pop_back(
&mut self,
) -> Result<<Self as DataCollection>::Element, NotEnoughElements> โ
fn stack_pop_back( &mut self, ) -> Result<<Self as DataCollection>::Element, NotEnoughElements> โ
DataStack::stack_pop).Sourceยงfn stack_push_back(
&mut self,
element: <Self as DataCollection>::Element,
) -> Result<(), NotEnoughSpace> โ
fn stack_push_back( &mut self, element: <Self as DataCollection>::Element, ) -> Result<(), NotEnoughSpace> โ
DataStack::stack_push).Sourceยงimpl<T, const CAP: usize, S: Storage> DataQueue for Destaque<T, CAP, u8, S>
Available on crate feature unsafe_ptr only.
impl<T, const CAP: usize, S: Storage> DataQueue for Destaque<T, CAP, u8, S>
unsafe_ptr only.Sourceยงfn queue_pop(
&mut self,
) -> Result<<Self as DataCollection>::Element, NotEnoughElements> โ
fn queue_pop( &mut self, ) -> Result<<Self as DataCollection>::Element, NotEnoughElements> โ
Sourceยงfn queue_push(
&mut self,
element: <Self as DataCollection>::Element,
) -> Result<(), NotEnoughSpace> โ
fn queue_push( &mut self, element: <Self as DataCollection>::Element, ) -> Result<(), NotEnoughSpace> โ
Sourceยงimpl<T, const CAP: usize, S: Storage> DataStack for Destaque<T, CAP, u8, S>
Available on crate feature unsafe_ptr only.
impl<T, const CAP: usize, S: Storage> DataStack for Destaque<T, CAP, u8, S>
unsafe_ptr only.Sourceยงfn stack_pop(
&mut self,
) -> Result<<Self as DataCollection>::Element, NotEnoughElements> โ
fn stack_pop( &mut self, ) -> Result<<Self as DataCollection>::Element, NotEnoughElements> โ
Sourceยงfn stack_push(
&mut self,
element: <Self as DataCollection>::Element,
) -> Result<(), NotEnoughSpace> โ
fn stack_push( &mut self, element: <Self as DataCollection>::Element, ) -> Result<(), NotEnoughSpace> โ
Sourceยงimpl<T: Default, const CAP: usize, IDX: Default> Default for Destaque<T, CAP, IDX, Boxed>
Available on crate feature alloc only.
impl<T: Default, const CAP: usize, IDX: Default> Default for Destaque<T, CAP, IDX, Boxed>
alloc only.impl<T: Eq, const CAP: usize, IDX: Eq, S: Storage> Eq for Destaque<T, CAP, IDX, S>
Sourceยงimpl<T: Default, I, const CAP: usize> From<I> for Destaque<T, CAP, u8, Bare>where
I: IntoIterator<Item = T>,
impl<T: Default, I, const CAP: usize> From<I> for Destaque<T, CAP, u8, Bare>where
I: IntoIterator<Item = T>,
Sourceยงimpl<T: Default, I, const CAP: usize> From<I> for Destaque<T, CAP, u8, Boxed>where
I: IntoIterator<Item = T>,
Available on crate feature alloc only.
impl<T: Default, I, const CAP: usize> From<I> for Destaque<T, CAP, u8, Boxed>where
I: IntoIterator<Item = T>,
alloc only.Sourceยงimpl<T: Ord, const CAP: usize, S: Storage> Ord for Destaque<T, CAP, u8, S>
impl<T: Ord, const CAP: usize, S: Storage> Ord for Destaque<T, CAP, u8, S>
1.21.0 (const: unstable) ยท Sourceยงfn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Sourceยงimpl<T: PartialEq, const CAP: usize, IDX: PartialEq, S: Storage> PartialEq for Destaque<T, CAP, IDX, S>
impl<T: PartialEq, const CAP: usize, IDX: PartialEq, S: Storage> PartialEq for Destaque<T, CAP, IDX, S>
Sourceยงimpl<T: PartialOrd, const CAP: usize, S: Storage> PartialOrd for Destaque<T, CAP, u8, S>
impl<T: PartialOrd, const CAP: usize, S: Storage> PartialOrd for Destaque<T, CAP, u8, S>
Auto Trait Implementationsยง
impl<T, const CAP: usize, IDX, S> Freeze for Destaque<T, CAP, IDX, S>
impl<T, const CAP: usize, IDX, S> RefUnwindSafe for Destaque<T, CAP, IDX, S>
impl<T, const CAP: usize, IDX, S> Send for Destaque<T, CAP, IDX, S>
impl<T, const CAP: usize, IDX, S> Sync for Destaque<T, CAP, IDX, S>
impl<T, const CAP: usize, IDX, S> Unpin for Destaque<T, CAP, IDX, S>
impl<T, const CAP: usize, IDX, S> UnsafeUnpin for Destaque<T, CAP, IDX, S>
impl<T, const CAP: usize, IDX, S> UnwindSafe for Destaque<T, CAP, IDX, S>
Blanket Implementationsยง
Sourceยงimpl<T> AnyExt for T
impl<T> AnyExt for T
Sourceยงfn type_hash_with<H: Hasher>(&self, hasher: H) -> u64
fn type_hash_with<H: Hasher>(&self, hasher: H) -> u64
TypeId of Self using a custom hasher.Sourceยงfn as_any_mut(&mut self) -> &mut dyn Anywhere
Self: Sized,
fn as_any_mut(&mut self) -> &mut dyn Anywhere
Self: Sized,
Sourceยงfn as_any_box(self: Box<Self>) -> Box<dyn Any>where
Self: Sized,
fn as_any_box(self: Box<Self>) -> Box<dyn Any>where
Self: Sized,
alloc only.Sourceยงimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Sourceยงfn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Sourceยงimpl<T> ByteSized for T
impl<T> ByteSized for T
Sourceยงconst BYTE_ALIGN: usize = _
const BYTE_ALIGN: usize = _
Sourceยงfn byte_align(&self) -> usize
fn byte_align(&self) -> usize
Sourceยงfn ptr_size_ratio(&self) -> [usize; 2]
fn ptr_size_ratio(&self) -> [usize; 2]
Sourceยงimpl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
ยงimpl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
ยงfn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Sourceยงimpl<T> MemExt for Twhere
T: ?Sized,
impl<T> MemExt for Twhere
T: ?Sized,
Sourceยงconst NEEDS_DROP: bool = _
const NEEDS_DROP: bool = _
Sourceยงfn mem_align_of<T>() -> usize
fn mem_align_of<T>() -> usize
Sourceยงfn mem_align_of_val(&self) -> usize
fn mem_align_of_val(&self) -> usize
Sourceยงfn mem_size_of<T>() -> usize
fn mem_size_of<T>() -> usize
Sourceยงfn mem_size_of_val(&self) -> usize
fn mem_size_of_val(&self) -> usize
Sourceยงfn mem_needs_drop(&self) -> bool
fn mem_needs_drop(&self) -> bool
true if dropping values of this type matters. Read moreSourceยงfn mem_forget(self)where
Self: Sized,
fn mem_forget(self)where
Self: Sized,
self without running its destructor. Read moreSourceยงfn mem_replace(&mut self, other: Self) -> Selfwhere
Self: Sized,
fn mem_replace(&mut self, other: Self) -> Selfwhere
Self: Sized,
Sourceยงunsafe fn mem_zeroed<T>() -> T
unsafe fn mem_zeroed<T>() -> T
unsafe_layout only.T represented by the all-zero byte-pattern. Read moreSourceยงunsafe fn mem_transmute_copy<Src, Dst>(src: &Src) -> Dst
unsafe fn mem_transmute_copy<Src, Dst>(src: &Src) -> Dst
unsafe_layout only.T represented by the all-zero byte-pattern. Read moreSourceยงfn mem_as_bytes(&self) -> &[u8] โ
fn mem_as_bytes(&self) -> &[u8] โ
unsafe_slice only.