[][src]Struct tranche::Tranche

pub struct Tranche<'a, T> { /* fields omitted */ }

A tranche of T.

Tranches are like slices but represented of a start pointer and an end pointer. They are geared towards being mutably slicing from their start or end, and thus don't implement indexing.

Methods

impl<'a, T> Tranche<'a, T>[src]

pub fn new(slice: &'a impl AsRef<[T]> + ?Sized) -> Self[src]

Creates a new tranche of T.

Examples

let parisien = Tranche::new(&[
    "baguette",
    "jambon",
    "beurre",
]);

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

Returns the number of elements in the tranche.

Examples

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

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

Returns true if the tranche has a length of 0.

Examples

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

pub fn take_first(&mut self) -> Result<&'a T, UnexpectedEndError>[src]

Takes the first element out of the tranche.

Returns the first element of self, or Err(_) if it is empty.

Examples

let mut v = Tranche::new(&[10, 40, 30]);
assert_eq!(v.take_first().unwrap(), &10);
assert_eq!(v.as_slice(), &[40, 30]);

let mut w = <Tranche<i32>>::new(&[]);
let err = w.take_first().unwrap_err();
assert_eq!(err.needed(), 1);
assert_eq!(err.len(), 0);

pub fn take_front(&mut self, n: usize) -> Result<Self, UnexpectedEndError>[src]

Takes the first n elements out of the tranche.

Returns a new tranche with the first n elements of self, or Err(_) if it is not long enough.

Examples

let mut v = Tranche::new(&[10, 40, 30]);
assert_eq!(v.take_front(2).unwrap().as_slice(), &[10, 40]);
assert_eq!(v.as_slice(), &[30]);

let err = v.take_front(3).unwrap_err();
assert_eq!(err.needed(), 3);
assert_eq!(err.len(), 1);

pub fn as_slice(&self) -> &'a [T][src]

Views the tranche's buffer as a slice.

This has the same lifetime as the original buffer, and so the tranche can continue to be used while this exists.

Examples

let mut tranche = Tranche::new(&[1, 2, 3]);
assert_eq!(tranche.as_slice(), &[1, 2, 3]);

assert!(tranche.take_first().is_ok());
assert_eq!(tranche.as_slice(), &[2, 3]);

pub const fn as_ptr(&self) -> *const T[src]

Returns a raw pointer to the tranche's buffer.

Examples

let tranche = Tranche::new(&[1, 2, 3]);
let ptr = tranche.as_ptr();

impl<'a> Tranche<'a, u8>[src]

pub fn take_front_as<T>(
    &mut self,
    n: usize
) -> Result<Tranche<'a, T>, UnexpectedEndError> where
    T: AlwaysAligned + AlwaysValid + Immutable, 
[src]

Takes the first n elements of type T out of the tranche.

Returns a new tranche with the first n elements of self viewed as a tranche of T values, or Err(_) if it is not long enough. The error details are expressed in terms of the size of T, not the size of u8.

Examples

let mut v = BufTranche::new(&[1, 2, 3, 4, 5, 6, 7, 8, 9]);
let four_pairs = v.take_front_as::<[u8; 2]>(4).unwrap();
assert_eq!(four_pairs.as_slice(), &[[1, 2], [3, 4], [5, 6], [7, 8]]);
assert_eq!(v.as_slice(), &[9]);

let err = v.take_front_as::<[u8; 2]>(1).unwrap_err();
assert_eq!(err.needed(), 1);
assert_eq!(err.len(), 0);

impl<'_> Tranche<'a, u8>[src]

pub fn take_u8(&mut self) -> Result<u8, UnexpectedEndError>[src]

Takes the first u8 out of the tranche.

Returns Err(_) if self is not long enough.

pub fn take_i8(&mut self) -> Result<i8, UnexpectedEndError>[src]

Takes the first i8 out of the tranche.

Returns Err(_) if self is not long enough.

pub fn take_u16_ne(&mut self) -> Result<u16, UnexpectedEndError>[src]

Returns a u16 by taking the first mem::size_of::<u16>() bytes out of the tranche in native endian order.

Returns Err(_) if self is not long enough.

pub fn take_u16_le(&mut self) -> Result<u16, UnexpectedEndError>[src]

Returns a u16 by taking the first mem::size_of::<u16>() bytes out of the tranche in little endian order.

Returns Err(_) if self is not long enough.

pub fn take_u16_be(&mut self) -> Result<u16, UnexpectedEndError>[src]

Returns a u16 by taking the first mem::size_of::<u16>() bytes out of the tranche in big endian order.

Returns Err(_) if self is not long enough.

pub fn take_i16_ne(&mut self) -> Result<i16, UnexpectedEndError>[src]

Returns a i16 by taking the first mem::size_of::<i16>() bytes out of the tranche in native endian order.

Returns Err(_) if self is not long enough.

pub fn take_i16_le(&mut self) -> Result<i16, UnexpectedEndError>[src]

Returns a i16 by taking the first mem::size_of::<i16>() bytes out of the tranche in little endian order.

Returns Err(_) if self is not long enough.

pub fn take_i16_be(&mut self) -> Result<i16, UnexpectedEndError>[src]

Returns a i16 by taking the first mem::size_of::<i16>() bytes out of the tranche in big endian order.

Returns Err(_) if self is not long enough.

pub fn take_u32_ne(&mut self) -> Result<u32, UnexpectedEndError>[src]

Returns a u32 by taking the first mem::size_of::<u32>() bytes out of the tranche in native endian order.

Returns Err(_) if self is not long enough.

pub fn take_u32_le(&mut self) -> Result<u32, UnexpectedEndError>[src]

Returns a u32 by taking the first mem::size_of::<u32>() bytes out of the tranche in little endian order.

Returns Err(_) if self is not long enough.

pub fn take_u32_be(&mut self) -> Result<u32, UnexpectedEndError>[src]

Returns a u32 by taking the first mem::size_of::<u32>() bytes out of the tranche in big endian order.

Returns Err(_) if self is not long enough.

pub fn take_i32_ne(&mut self) -> Result<i32, UnexpectedEndError>[src]

Returns a i32 by taking the first mem::size_of::<i32>() bytes out of the tranche in native endian order.

Returns Err(_) if self is not long enough.

pub fn take_i32_le(&mut self) -> Result<i32, UnexpectedEndError>[src]

Returns a i32 by taking the first mem::size_of::<i32>() bytes out of the tranche in little endian order.

Returns Err(_) if self is not long enough.

pub fn take_i32_be(&mut self) -> Result<i32, UnexpectedEndError>[src]

Returns a i32 by taking the first mem::size_of::<i32>() bytes out of the tranche in big endian order.

Returns Err(_) if self is not long enough.

pub fn take_u64_ne(&mut self) -> Result<u64, UnexpectedEndError>[src]

Returns a u64 by taking the first mem::size_of::<u64>() bytes out of the tranche in native endian order.

Returns Err(_) if self is not long enough.

pub fn take_u64_le(&mut self) -> Result<u64, UnexpectedEndError>[src]

Returns a u64 by taking the first mem::size_of::<u64>() bytes out of the tranche in little endian order.

Returns Err(_) if self is not long enough.

pub fn take_u64_be(&mut self) -> Result<u64, UnexpectedEndError>[src]

Returns a u64 by taking the first mem::size_of::<u64>() bytes out of the tranche in big endian order.

Returns Err(_) if self is not long enough.

pub fn take_i64_ne(&mut self) -> Result<i64, UnexpectedEndError>[src]

Returns a i64 by taking the first mem::size_of::<i64>() bytes out of the tranche in native endian order.

Returns Err(_) if self is not long enough.

pub fn take_i64_le(&mut self) -> Result<i64, UnexpectedEndError>[src]

Returns a i64 by taking the first mem::size_of::<i64>() bytes out of the tranche in little endian order.

Returns Err(_) if self is not long enough.

pub fn take_i64_be(&mut self) -> Result<i64, UnexpectedEndError>[src]

Returns a i64 by taking the first mem::size_of::<i64>() bytes out of the tranche in big endian order.

Returns Err(_) if self is not long enough.

pub fn take_u128_ne(&mut self) -> Result<u128, UnexpectedEndError>[src]

Returns a u128 by taking the first mem::size_of::<u128>() bytes out of the tranche in native endian order.

Returns Err(_) if self is not long enough.

pub fn take_u128_le(&mut self) -> Result<u128, UnexpectedEndError>[src]

Returns a u128 by taking the first mem::size_of::<u128>() bytes out of the tranche in little endian order.

Returns Err(_) if self is not long enough.

pub fn take_u128_be(&mut self) -> Result<u128, UnexpectedEndError>[src]

Returns a u128 by taking the first mem::size_of::<u128>() bytes out of the tranche in big endian order.

Returns Err(_) if self is not long enough.

pub fn take_i128_ne(&mut self) -> Result<i128, UnexpectedEndError>[src]

Returns a i128 by taking the first mem::size_of::<i128>() bytes out of the tranche in native endian order.

Returns Err(_) if self is not long enough.

pub fn take_i128_le(&mut self) -> Result<i128, UnexpectedEndError>[src]

Returns a i128 by taking the first mem::size_of::<i128>() bytes out of the tranche in little endian order.

Returns Err(_) if self is not long enough.

pub fn take_i128_be(&mut self) -> Result<i128, UnexpectedEndError>[src]

Returns a i128 by taking the first mem::size_of::<i128>() bytes out of the tranche in big endian order.

Returns Err(_) if self is not long enough.

pub fn take_usize_ne(&mut self) -> Result<usize, UnexpectedEndError>[src]

Returns a usize by taking the first mem::size_of::<usize>() bytes out of the tranche in native endian order.

Returns Err(_) if self is not long enough.

pub fn take_usize_le(&mut self) -> Result<usize, UnexpectedEndError>[src]

Returns a usize by taking the first mem::size_of::<usize>() bytes out of the tranche in little endian order.

Returns Err(_) if self is not long enough.

pub fn take_usize_be(&mut self) -> Result<usize, UnexpectedEndError>[src]

Returns a usize by taking the first mem::size_of::<usize>() bytes out of the tranche in big endian order.

Returns Err(_) if self is not long enough.

pub fn take_isize_ne(&mut self) -> Result<isize, UnexpectedEndError>[src]

Returns a isize by taking the first mem::size_of::<isize>() bytes out of the tranche in native endian order.

Returns Err(_) if self is not long enough.

pub fn take_isize_le(&mut self) -> Result<isize, UnexpectedEndError>[src]

Returns a isize by taking the first mem::size_of::<isize>() bytes out of the tranche in little endian order.

Returns Err(_) if self is not long enough.

pub fn take_isize_be(&mut self) -> Result<isize, UnexpectedEndError>[src]

Returns a isize by taking the first mem::size_of::<isize>() bytes out of the tranche in big endian order.

Returns Err(_) if self is not long enough.

Trait Implementations

impl<'_, T> Clone for Tranche<'_, T>[src]

impl<'_, T> Debug for Tranche<'_, T> where
    T: Debug
[src]

impl<'_, T> Default for Tranche<'_, T>[src]

impl<'_, T> ExactSizeIterator for Tranche<'_, T>[src]

impl<'a, T> From<BasedTranche<'a, T>> for Tranche<'a, T>[src]

impl<'a, T> From<Tranche<'a, T>> for BasedTranche<'a, T>[src]

impl<'_, T> FusedIterator for Tranche<'_, T>[src]

impl<'a, T> Iterator for Tranche<'a, T>[src]

type Item = &'a T

The type of the elements being iterated over.

impl<'_, T> Send for Tranche<'_, T> where
    T: Sync
[src]

impl<'_, T> Sync for Tranche<'_, T> where
    T: Sync
[src]

Auto Trait Implementations

impl<'a, T> RefUnwindSafe for Tranche<'a, T> where
    T: RefUnwindSafe

impl<'a, T> Unpin for Tranche<'a, T>

impl<'a, T> UnwindSafe for Tranche<'a, T> where
    T: RefUnwindSafe

Blanket Implementations

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

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

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

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

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

impl<I> IntoIterator for I where
    I: Iterator
[src]

type Item = <I as Iterator>::Item

The type of the elements being iterated over.

type IntoIter = I

Which kind of iterator are we turning this into?

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

type Owned = T

The resulting type after obtaining ownership.

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

type Error = Infallible

The type returned in the event of a conversion error.

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

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

The type returned in the event of a conversion error.