mirror of
https://github.com/rust-lang/rust.git
synced 2025-01-30 08:34:07 +00:00
add ptr::from_{ref,mut}
This commit is contained in:
parent
f8a2e491eb
commit
9ae26c86c2
@ -516,6 +516,27 @@ pub const fn null<T: ?Sized + Thin>() -> *const T {
|
||||
from_raw_parts(invalid(0), ())
|
||||
}
|
||||
|
||||
/// Creates a null mutable raw pointer.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use std::ptr;
|
||||
///
|
||||
/// let p: *mut i32 = ptr::null_mut();
|
||||
/// assert!(p.is_null());
|
||||
/// ```
|
||||
#[inline(always)]
|
||||
#[must_use]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_promotable]
|
||||
#[rustc_const_stable(feature = "const_ptr_null", since = "1.24.0")]
|
||||
#[rustc_allow_const_fn_unstable(ptr_metadata)]
|
||||
#[rustc_diagnostic_item = "ptr_null_mut"]
|
||||
pub const fn null_mut<T: ?Sized + Thin>() -> *mut T {
|
||||
from_raw_parts_mut(invalid_mut(0), ())
|
||||
}
|
||||
|
||||
/// Creates an invalid pointer with the given address.
|
||||
///
|
||||
/// This is different from `addr as *const T`, which creates a pointer that picks up a previously
|
||||
@ -663,25 +684,26 @@ where
|
||||
addr as *mut T
|
||||
}
|
||||
|
||||
/// Creates a null mutable raw pointer.
|
||||
/// Convert a reference to a raw pointer.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use std::ptr;
|
||||
///
|
||||
/// let p: *mut i32 = ptr::null_mut();
|
||||
/// assert!(p.is_null());
|
||||
/// ```
|
||||
/// This is equivalent to `r as *const T`, but is a bit safer since it will never silently change
|
||||
/// type or mutability, in particular if the code is refactored.
|
||||
#[inline(always)]
|
||||
#[must_use]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_promotable]
|
||||
#[rustc_const_stable(feature = "const_ptr_null", since = "1.24.0")]
|
||||
#[rustc_allow_const_fn_unstable(ptr_metadata)]
|
||||
#[rustc_diagnostic_item = "ptr_null_mut"]
|
||||
pub const fn null_mut<T: ?Sized + Thin>() -> *mut T {
|
||||
from_raw_parts_mut(invalid_mut(0), ())
|
||||
#[unstable(feature = "ptr_from_ref", issue = "999999")] // FIXME
|
||||
pub fn from_ref<T: ?Sized>(r: &T) -> *const T {
|
||||
r
|
||||
}
|
||||
|
||||
/// Convert a mutble reference to a raw pointer.
|
||||
///
|
||||
/// This is equivalent to `r as *mut T`, but is a bit safer since it will never silently change
|
||||
/// type or mutability, in particular if the code is refactored.
|
||||
#[inline(always)]
|
||||
#[must_use]
|
||||
#[unstable(feature = "ptr_from_ref", issue = "999999")] // FIXME
|
||||
pub fn from_mut<T: ?Sized>(r: &mut T) -> *mut T {
|
||||
r
|
||||
}
|
||||
|
||||
/// Forms a raw slice from a pointer and a length.
|
||||
|
Loading…
Reference in New Issue
Block a user