Add replace
and swap
convenience methods to NonNull
This commit is contained in:
parent
4bcdd3bd92
commit
4cc46df98c
@ -1187,6 +1187,41 @@ pub unsafe fn write_volatile(self, val: T)
|
||||
// SAFETY: the caller must uphold the safety contract for `write_unaligned`.
|
||||
unsafe { ptr::write_unaligned(self.as_ptr(), val) }
|
||||
}
|
||||
|
||||
/// Replaces the value at `self` with `src`, returning the old
|
||||
/// value, without dropping either.
|
||||
///
|
||||
/// See [`ptr::replace`] for safety concerns and examples.
|
||||
///
|
||||
/// [`ptr::replace`]: crate::ptr::replace()
|
||||
#[unstable(feature = "non_null_convenience", issue = "117691")]
|
||||
#[inline(always)]
|
||||
pub unsafe fn replace(self, src: T) -> T
|
||||
where
|
||||
T: Sized,
|
||||
{
|
||||
// SAFETY: the caller must uphold the safety contract for `replace`.
|
||||
unsafe { ptr::replace(self.as_ptr(), src) }
|
||||
}
|
||||
|
||||
/// Swaps the values at two mutable locations of the same type, without
|
||||
/// deinitializing either. They may overlap, unlike `mem::swap` which is
|
||||
/// otherwise equivalent.
|
||||
///
|
||||
/// See [`ptr::swap`] for safety concerns and examples.
|
||||
///
|
||||
/// [`ptr::swap`]: crate::ptr::swap()
|
||||
#[unstable(feature = "non_null_convenience", issue = "117691")]
|
||||
#[rustc_const_unstable(feature = "non_null_convenience", issue = "117691")]
|
||||
//#[rustc_const_unstable(feature = "const_swap", issue = "83163")]
|
||||
#[inline(always)]
|
||||
pub const unsafe fn swap(self, with: NonNull<T>)
|
||||
where
|
||||
T: Sized,
|
||||
{
|
||||
// SAFETY: the caller must uphold the safety contract for `swap`.
|
||||
unsafe { ptr::swap(self.as_ptr(), with.as_ptr()) }
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> NonNull<[T]> {
|
||||
|
Loading…
Reference in New Issue
Block a user