pub struct ArrayBuf<T> {
    ptr: NonNull<UnsafeCell<MaybeUninit<T>>>,
    len: usize,
}
Expand description

A spooky owned array type

This type represents ownership of essentially an UnsafeCell<MaybeUninit<[T]>>.

It is intended as a low level building block for things like bbqueue and other data structures that need to own a specific number of items, and would like to set their own safety invariants, without manually using alloc.

Fields§

§ptr: NonNull<UnsafeCell<MaybeUninit<T>>>§len: usize

Implementations§

source§

impl<T> ArrayBuf<T>

source

fn layout(len: usize) -> Layout

Gets the layout for len items

Panics if creating the layout would fail (e.g. too large for the platform)

source

pub fn try_new_uninit(len: usize) -> Option<Self>

Try to allocate a new ArrayBuf with storage for len items.

Returns None if the allocation does not succeed immediately.

Panics if the len is zero, or large enough that creating the layout would fail

source

pub async fn new_uninit(len: usize) -> Self

Try to allocate a new ArrayBuf with storage for len items.

Will not return until allocation succeeds.

Panics if the len is zero, or large enough that creating the layout would fail

source

pub fn ptrlen(&self) -> (NonNull<UnsafeCell<MaybeUninit<T>>>, usize)

Obtain a pointer to the heap allocated storage, as well as the length of items

This does NOT leak the heap allocation. The returned pointer has the lifetime of this ArrayBuf.

Trait Implementations§

source§

impl<T> Drop for ArrayBuf<T>

source§

fn drop(&mut self)

Executes the destructor for this type. Read more
source§

impl<T: Send> Send for ArrayBuf<T>

source§

impl<T: Sync> Sync for ArrayBuf<T>

Auto Trait Implementations§

§

impl<T> !RefUnwindSafe for ArrayBuf<T>

§

impl<T> Unpin for ArrayBuf<T>

§

impl<T> !UnwindSafe for ArrayBuf<T>

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

source§

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

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more