Skip to main content

MemStack

Struct MemStack 

Source
pub struct MemStack { /* private fields */ }
Expand description

Stack wrapper around a buffer of uninitialized bytes.

Implementations§

Source§

impl MemStack

Source

pub fn new(buffer: &mut [MaybeUninit<u8>]) -> &mut MemStack

Returns a new MemStack from the provided memory buffer.

Source

pub fn new_any<T>(buffer: &mut [MaybeUninit<T>]) -> &mut MemStack

Returns a new MemStack from the provided memory buffer.

Source

pub fn can_hold(&self, alloc_req: StackReq) -> bool

Returns true if the stack can hold an allocation with the given size and alignment requirements.

Source

pub fn len_bytes(&self) -> usize

Returns the number of bytes that this stack can hold.

Source

pub fn as_ptr(&self) -> *const u8

Returns a pointer to the (possibly uninitialized) stack memory.

Source

pub fn make_aligned_uninit<T>( &mut self, size: usize, align: usize, ) -> (&mut [MaybeUninit<T>], &mut MemStack)

Returns a new aligned and uninitialized DynArray and a stack over the remainder of the buffer.

§Panics

Panics if the stack isn’t large enough to allocate the array.

Source

pub fn make_aligned_with<T>( &mut self, size: usize, align: usize, f: impl FnMut(usize) -> T, ) -> (DynArray<'_, T>, &mut MemStack)

Returns a new aligned DynArray, initialized with the provided function, and a stack over the remainder of the buffer.

§Panics

Panics if the stack isn’t large enough to allocate the array, or if the provided function panics.

Source

pub fn make_uninit<T>( &mut self, size: usize, ) -> (&mut [MaybeUninit<T>], &mut MemStack)

Returns a new uninitialized DynArray and a stack over the remainder of the buffer.

§Panics

Panics if the stack isn’t large enough to allocate the array.

Source

pub fn make_with<T>( &mut self, size: usize, f: impl FnMut(usize) -> T, ) -> (DynArray<'_, T>, &mut MemStack)

Returns a new DynArray, initialized with the provided function, and a stack over the remainder of the buffer.

§Panics

Panics if the stack isn’t large enough to allocate the array, or if the provided function panics.

Source

pub fn collect_aligned<I>( &mut self, align: usize, iter: impl IntoIterator<Item = I>, ) -> (DynArray<'_, I>, &mut MemStack)

Returns a new aligned DynArray, initialized with the provided iterator, and a stack over the remainder of the buffer.
If there isn’t enough space for all the iterator items, then the returned array only contains the first elements that fit into the stack.

§Panics

Panics if the provided iterator panics.

Source

pub fn collect<I>( &mut self, iter: impl IntoIterator<Item = I>, ) -> (DynArray<'_, I>, &mut MemStack)

Returns a new DynArray, initialized with the provided iterator, and a stack over the remainder of the buffer.
If there isn’t enough space for all the iterator items, then the returned array only contains the first elements that fit into the stack.

§Panics

Panics if the provided iterator panics.

Source

pub fn bump<'bump, 'stack>( self: &'bump mut &'stack mut MemStack, ) -> &'bump mut Bump<'stack>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> DistributionExt for T
where T: ?Sized,

Source§

fn rand<T>(&self, rng: &mut (impl Rng + ?Sized)) -> T
where Self: Distribution<T>,

Source§

impl<T, W> HasTypeWitness<W> for T
where W: MakeTypeWitness<Arg = T>, T: ?Sized,

Source§

const WITNESS: W = W::MAKE

A constant of the type witness
Source§

impl<T> Identity for T
where T: ?Sized,

Source§

const TYPE_EQ: TypeEq<T, <T as Identity>::Type> = TypeEq::NEW

Proof that Self is the same type as Self::Type, provides methods for casting between Self and Self::Type.
Source§

type Type = T

The same type as Self, used to emulate type equality bounds (T == U) with associated type equality constraints (T: Identity<Type = U>).
Source§

impl<T, U> Imply<T> for U
where T: ?Sized, U: ?Sized,

Source§

impl<T> SelfOps for T
where T: ?Sized,

Source§

fn eq_id(&self, other: &Self) -> bool

Compares the address of self with the address of other. Read more
Source§

fn piped<F, U>(self, f: F) -> U
where F: FnOnce(Self) -> U, Self: Sized,

Emulates the pipeline operator, allowing method syntax in more places. Read more
Source§

fn piped_ref<'a, F, U>(&'a self, f: F) -> U
where F: FnOnce(&'a Self) -> U,

The same as piped except that the function takes &Self Useful for functions that take &Self instead of Self. Read more
Source§

fn piped_mut<'a, F, U>(&'a mut self, f: F) -> U
where F: FnOnce(&'a mut Self) -> U,

The same as piped, except that the function takes &mut Self. Useful for functions that take &mut Self instead of Self.
Source§

fn mutated<F>(self, f: F) -> Self
where F: FnOnce(&mut Self), Self: Sized,

Mutates self using a closure taking self by mutable reference, passing it along the method chain. Read more
Source§

fn observe<F>(self, f: F) -> Self
where F: FnOnce(&Self), Self: Sized,

Observes the value of self, passing it along unmodified. Useful in long method chains. Read more
Source§

fn into_<T>(self) -> T
where Self: Into<T>,

Performs a conversion with Into. using the turbofish .into_::<_>() syntax. Read more
Source§

fn as_ref_<T>(&self) -> &T
where Self: AsRef<T>, T: ?Sized,

Performs a reference to reference conversion with AsRef, using the turbofish .as_ref_::<_>() syntax. Read more
Source§

fn as_mut_<T>(&mut self) -> &mut T
where Self: AsMut<T>, T: ?Sized,

Performs a mutable reference to mutable reference conversion with AsMut, using the turbofish .as_mut_::<_>() syntax. Read more
Source§

fn drop_(self)
where Self: Sized,

Drops self using method notation. Alternative to std::mem::drop. Read more
Source§

impl<This> TransmuteElement for This
where This: ?Sized,

Source§

unsafe fn transmute_element<T>(self) -> Self::TransmutedPtr
where Self: CanTransmuteElement<T>,

Transmutes the element type of this pointer.. Read more
Source§

impl<T> TypeIdentity for T
where T: ?Sized,

Source§

type Type = T

This is always Self.
Source§

fn into_type(self) -> Self::Type
where Self: Sized, Self::Type: Sized,

Converts a value back to the original type.
Source§

fn as_type(&self) -> &Self::Type

Converts a reference back to the original type.
Source§

fn as_type_mut(&mut self) -> &mut Self::Type

Converts a mutable reference back to the original type.
Source§

fn into_type_box(self: Box<Self>) -> Box<Self::Type>

Converts a box back to the original type.
Source§

fn into_type_arc(this: Arc<Self>) -> Arc<Self::Type>

Converts an Arc back to the original type. Read more
Source§

fn into_type_rc(this: Rc<Self>) -> Rc<Self::Type>

Converts an Rc back to the original type. Read more
Source§

fn from_type(this: Self::Type) -> Self
where Self: Sized, Self::Type: Sized,

Converts a value back to the original type.
Source§

fn from_type_ref(this: &Self::Type) -> &Self

Converts a reference back to the original type.
Source§

fn from_type_mut(this: &mut Self::Type) -> &mut Self

Converts a mutable reference back to the original type.
Source§

fn from_type_box(this: Box<Self::Type>) -> Box<Self>

Converts a box back to the original type.
Source§

fn from_type_arc(this: Arc<Self::Type>) -> Arc<Self>

Converts an Arc back to the original type.
Source§

fn from_type_rc(this: Rc<Self::Type>) -> Rc<Self>

Converts an Rc back to the original type.