[−][src]Trait slice_dst::AllocSliceDst
Types that can allocate a custom slice DST within them.
Implementation note
For most types, TryAllocSliceDst
should be the implementation primitive.
This trait can then be implemented in terms of TryAllocSliceDst
:
unsafe impl<S: ?Sized + SliceDst> AllocSliceDst<S> for Container<S> { unsafe fn new_slice_dst<I>(len: usize, init: I) -> Self where I: FnOnce(ptr::NonNull<S>), { enum Void {} // or never (!) once it is stable #[allow(clippy::unit_arg)] let init = |ptr| Ok::<(), Void>(init(ptr)); match Self::try_new_slice_dst(len, init) { Ok(a) => a, Err(void) => match void {}, } } }
This is not a blanket impl due to coherence rules; if the blanket impl were present,
it would be impossible to implement AllocSliceDst
instead of TryAllocSliceDst
.
Required methods
unsafe fn new_slice_dst<I>(len: usize, init: I) -> Self where
I: FnOnce(NonNull<S>),
I: FnOnce(NonNull<S>),
Create a new custom slice DST.
Safety
init
must properly initialize the object behind the pointer.
init
receives a fully uninitialized pointer and must not read anything before writing.
Implementations on Foreign Types
impl<S: ?Sized + SliceDst> AllocSliceDst<S> for Box<S>
[src]
unsafe fn new_slice_dst<I>(len: usize, init: I) -> Self where
I: FnOnce(NonNull<S>),
[src]
I: FnOnce(NonNull<S>),
impl<S: ?Sized + SliceDst> AllocSliceDst<S> for Rc<S>
[src]
unsafe fn new_slice_dst<I>(len: usize, init: I) -> Self where
I: FnOnce(NonNull<S>),
[src]
I: FnOnce(NonNull<S>),
impl<S: ?Sized + SliceDst> AllocSliceDst<S> for Arc<S>
[src]
unsafe fn new_slice_dst<I>(len: usize, init: I) -> Self where
I: FnOnce(NonNull<S>),
[src]
I: FnOnce(NonNull<S>),