Auto merge of #89813 - the8472:rollup-f1f99mb, r=the8472
Rollup of 7 pull requests Successful merges: - #89778 (Add #[must_use] to as_type conversions) - #89784 (Remove built-in query cache_hit tracking) - #89796 (Add #[must_use] to non-mutating verb methods) - #89797 (Add #[must_use] to is_condition tests) - #89799 (fix minor spelling error in Poll::ready docs) - #89800 (Update books) - #89809 (Remap ssa RealPredicate to llvm RealPredicate) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
This commit is contained in:
commit
044674337a
35 changed files with 152 additions and 57 deletions
|
|
@ -828,6 +828,7 @@ impl BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
|
|||
}
|
||||
|
||||
fn fcmp(&mut self, op: RealPredicate, lhs: &'ll Value, rhs: &'ll Value) -> &'ll Value {
|
||||
let op = llvm::RealPredicate::from_generic(op);
|
||||
unsafe { llvm::LLVMBuildFCmp(self.llbuilder, op as c_uint, lhs, rhs, UNNAMED) }
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -223,6 +223,33 @@ pub enum RealPredicate {
|
|||
RealPredicateTrue = 15,
|
||||
}
|
||||
|
||||
impl RealPredicate {
|
||||
pub fn from_generic(realp: rustc_codegen_ssa::common::RealPredicate) -> Self {
|
||||
match realp {
|
||||
rustc_codegen_ssa::common::RealPredicate::RealPredicateFalse => {
|
||||
RealPredicate::RealPredicateFalse
|
||||
}
|
||||
rustc_codegen_ssa::common::RealPredicate::RealOEQ => RealPredicate::RealOEQ,
|
||||
rustc_codegen_ssa::common::RealPredicate::RealOGT => RealPredicate::RealOGT,
|
||||
rustc_codegen_ssa::common::RealPredicate::RealOGE => RealPredicate::RealOGE,
|
||||
rustc_codegen_ssa::common::RealPredicate::RealOLT => RealPredicate::RealOLT,
|
||||
rustc_codegen_ssa::common::RealPredicate::RealOLE => RealPredicate::RealOLE,
|
||||
rustc_codegen_ssa::common::RealPredicate::RealONE => RealPredicate::RealONE,
|
||||
rustc_codegen_ssa::common::RealPredicate::RealORD => RealPredicate::RealORD,
|
||||
rustc_codegen_ssa::common::RealPredicate::RealUNO => RealPredicate::RealUNO,
|
||||
rustc_codegen_ssa::common::RealPredicate::RealUEQ => RealPredicate::RealUEQ,
|
||||
rustc_codegen_ssa::common::RealPredicate::RealUGT => RealPredicate::RealUGT,
|
||||
rustc_codegen_ssa::common::RealPredicate::RealUGE => RealPredicate::RealUGE,
|
||||
rustc_codegen_ssa::common::RealPredicate::RealULT => RealPredicate::RealULT,
|
||||
rustc_codegen_ssa::common::RealPredicate::RealULE => RealPredicate::RealULE,
|
||||
rustc_codegen_ssa::common::RealPredicate::RealUNE => RealPredicate::RealUNE,
|
||||
rustc_codegen_ssa::common::RealPredicate::RealPredicateTrue => {
|
||||
RealPredicate::RealPredicateTrue
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// LLVMTypeKind
|
||||
#[derive(Copy, Clone, PartialEq, Debug)]
|
||||
#[repr(C)]
|
||||
|
|
|
|||
|
|
@ -5,8 +5,6 @@ use rustc_query_system::query::{QueryCache, QueryCacheStore};
|
|||
|
||||
use std::any::type_name;
|
||||
use std::mem;
|
||||
#[cfg(debug_assertions)]
|
||||
use std::sync::atomic::Ordering;
|
||||
|
||||
trait KeyStats {
|
||||
fn key_stats(&self, stats: &mut QueryStats);
|
||||
|
|
@ -27,7 +25,6 @@ impl KeyStats for DefId {
|
|||
#[derive(Clone)]
|
||||
struct QueryStats {
|
||||
name: &'static str,
|
||||
cache_hits: usize,
|
||||
key_size: usize,
|
||||
key_type: &'static str,
|
||||
value_size: usize,
|
||||
|
|
@ -42,10 +39,6 @@ where
|
|||
{
|
||||
let mut stats = QueryStats {
|
||||
name,
|
||||
#[cfg(debug_assertions)]
|
||||
cache_hits: map.cache_hits.load(Ordering::Relaxed),
|
||||
#[cfg(not(debug_assertions))]
|
||||
cache_hits: 0,
|
||||
key_size: mem::size_of::<C::Key>(),
|
||||
key_type: type_name::<C::Key>(),
|
||||
value_size: mem::size_of::<C::Value>(),
|
||||
|
|
@ -63,12 +56,6 @@ where
|
|||
pub fn print_stats(tcx: TyCtxt<'_>) {
|
||||
let queries = query_stats(tcx);
|
||||
|
||||
if cfg!(debug_assertions) {
|
||||
let hits: usize = queries.iter().map(|s| s.cache_hits).sum();
|
||||
let results: usize = queries.iter().map(|s| s.entry_count).sum();
|
||||
eprintln!("\nQuery cache hit rate: {}", hits as f64 / (hits + results) as f64);
|
||||
}
|
||||
|
||||
let mut query_key_sizes = queries.clone();
|
||||
query_key_sizes.sort_by_key(|q| q.key_size);
|
||||
eprintln!("\nLarge query keys:");
|
||||
|
|
@ -83,20 +70,6 @@ pub fn print_stats(tcx: TyCtxt<'_>) {
|
|||
eprintln!(" {} - {} x {} - {}", q.name, q.value_size, q.entry_count, q.value_type);
|
||||
}
|
||||
|
||||
if cfg!(debug_assertions) {
|
||||
let mut query_cache_hits = queries.clone();
|
||||
query_cache_hits.sort_by_key(|q| q.cache_hits);
|
||||
eprintln!("\nQuery cache hits:");
|
||||
for q in query_cache_hits.iter().rev() {
|
||||
eprintln!(
|
||||
" {} - {} ({}%)",
|
||||
q.name,
|
||||
q.cache_hits,
|
||||
q.cache_hits as f64 / (q.cache_hits + q.entry_count) as f64
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
let mut query_value_count = queries.clone();
|
||||
query_value_count.sort_by_key(|q| q.entry_count);
|
||||
eprintln!("\nQuery value count:");
|
||||
|
|
|
|||
|
|
@ -26,24 +26,15 @@ use std::hash::{Hash, Hasher};
|
|||
use std::mem;
|
||||
use std::num::NonZeroU32;
|
||||
use std::ptr;
|
||||
#[cfg(debug_assertions)]
|
||||
use std::sync::atomic::{AtomicUsize, Ordering};
|
||||
|
||||
pub struct QueryCacheStore<C: QueryCache> {
|
||||
cache: C,
|
||||
shards: Sharded<C::Sharded>,
|
||||
#[cfg(debug_assertions)]
|
||||
pub cache_hits: AtomicUsize,
|
||||
}
|
||||
|
||||
impl<C: QueryCache + Default> Default for QueryCacheStore<C> {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
cache: C::default(),
|
||||
shards: Default::default(),
|
||||
#[cfg(debug_assertions)]
|
||||
cache_hits: AtomicUsize::new(0),
|
||||
}
|
||||
Self { cache: C::default(), shards: Default::default() }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -377,10 +368,6 @@ where
|
|||
if unlikely!(tcx.profiler().enabled()) {
|
||||
tcx.profiler().query_cache_hit(index.into());
|
||||
}
|
||||
#[cfg(debug_assertions)]
|
||||
{
|
||||
cache.cache_hits.fetch_add(1, Ordering::Relaxed);
|
||||
}
|
||||
tcx.dep_graph().read_index(index);
|
||||
on_hit(value)
|
||||
})
|
||||
|
|
@ -429,10 +416,6 @@ where
|
|||
if unlikely!(tcx.dep_context().profiler().enabled()) {
|
||||
tcx.dep_context().profiler().query_cache_hit(index.into());
|
||||
}
|
||||
#[cfg(debug_assertions)]
|
||||
{
|
||||
cache.cache_hits.fetch_add(1, Ordering::Relaxed);
|
||||
}
|
||||
query_blocked_prof_timer.finish_with_query_invocation_id(index.into());
|
||||
|
||||
(v, Some(index))
|
||||
|
|
@ -705,10 +688,6 @@ where
|
|||
if unlikely!(tcx.dep_context().profiler().enabled()) {
|
||||
tcx.dep_context().profiler().query_cache_hit(index.into());
|
||||
}
|
||||
#[cfg(debug_assertions)]
|
||||
{
|
||||
cache.cache_hits.fetch_add(1, Ordering::Relaxed);
|
||||
}
|
||||
});
|
||||
|
||||
let lookup = match cached {
|
||||
|
|
|
|||
|
|
@ -1009,6 +1009,7 @@ impl<T> BinaryHeap<T> {
|
|||
///
|
||||
/// io::sink().write(heap.as_slice()).unwrap();
|
||||
/// ```
|
||||
#[must_use]
|
||||
#[unstable(feature = "binary_heap_as_slice", issue = "83659")]
|
||||
pub fn as_slice(&self) -> &[T] {
|
||||
self.data.as_slice()
|
||||
|
|
|
|||
|
|
@ -1385,6 +1385,7 @@ impl<'a, T> CursorMut<'a, T> {
|
|||
/// The lifetime of the returned `Cursor` is bound to that of the
|
||||
/// `CursorMut`, which means it cannot outlive the `CursorMut` and that the
|
||||
/// `CursorMut` is frozen for the lifetime of the `Cursor`.
|
||||
#[must_use]
|
||||
#[unstable(feature = "linked_list_cursors", issue = "58533")]
|
||||
pub fn as_cursor(&self) -> Cursor<'_, T> {
|
||||
Cursor { list: self.list, current: self.current, index: self.index }
|
||||
|
|
|
|||
|
|
@ -2093,6 +2093,7 @@ impl<T: ?Sized> Weak<T> {
|
|||
/// ```
|
||||
///
|
||||
/// [`null`]: ptr::null
|
||||
#[must_use]
|
||||
#[stable(feature = "rc_as_ptr", since = "1.45.0")]
|
||||
pub fn as_ptr(&self) -> *const T {
|
||||
let ptr: *mut RcBox<T> = NonNull::as_ptr(self.ptr);
|
||||
|
|
@ -2229,6 +2230,8 @@ impl<T: ?Sized> Weak<T> {
|
|||
///
|
||||
/// assert!(weak_five.upgrade().is_none());
|
||||
/// ```
|
||||
#[must_use = "this returns a new `Rc`, \
|
||||
without modifying the original weak pointer"]
|
||||
#[stable(feature = "rc_weak", since = "1.4.0")]
|
||||
pub fn upgrade(&self) -> Option<Rc<T>> {
|
||||
let inner = self.inner()?;
|
||||
|
|
|
|||
|
|
@ -803,6 +803,7 @@ impl String {
|
|||
/// assert_eq!("foo", s.as_str());
|
||||
/// ```
|
||||
#[inline]
|
||||
#[must_use]
|
||||
#[stable(feature = "string_as_str", since = "1.7.0")]
|
||||
pub fn as_str(&self) -> &str {
|
||||
self
|
||||
|
|
@ -823,6 +824,7 @@ impl String {
|
|||
/// assert_eq!("FOOBAR", s_mut_str);
|
||||
/// ```
|
||||
#[inline]
|
||||
#[must_use]
|
||||
#[stable(feature = "string_as_str", since = "1.7.0")]
|
||||
pub fn as_mut_str(&mut self) -> &mut str {
|
||||
self
|
||||
|
|
@ -1163,6 +1165,7 @@ impl String {
|
|||
/// assert_eq!(&[104, 101, 108, 108, 111], s.as_bytes());
|
||||
/// ```
|
||||
#[inline]
|
||||
#[must_use]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub fn as_bytes(&self) -> &[u8] {
|
||||
&self.vec
|
||||
|
|
@ -1766,6 +1769,7 @@ impl FromUtf8Error {
|
|||
///
|
||||
/// assert_eq!(&[0, 159], value.unwrap_err().as_bytes());
|
||||
/// ```
|
||||
#[must_use]
|
||||
#[stable(feature = "from_utf8_error_as_bytes", since = "1.26.0")]
|
||||
pub fn as_bytes(&self) -> &[u8] {
|
||||
&self.bytes[..]
|
||||
|
|
@ -2782,6 +2786,7 @@ impl<'a> Drain<'a> {
|
|||
/// let _ = drain.next().unwrap();
|
||||
/// assert_eq!(drain.as_str(), "bc");
|
||||
/// ```
|
||||
#[must_use]
|
||||
#[stable(feature = "string_drain_as_str", since = "1.55.0")]
|
||||
pub fn as_str(&self) -> &str {
|
||||
self.iter.as_str()
|
||||
|
|
|
|||
|
|
@ -146,7 +146,7 @@ macro_rules! acquire {
|
|||
/// use std::sync::Arc;
|
||||
///
|
||||
/// let my_arc = Arc::new(());
|
||||
/// Arc::downgrade(&my_arc);
|
||||
/// let my_weak = Arc::downgrade(&my_arc);
|
||||
/// ```
|
||||
///
|
||||
/// `Arc<T>`'s implementations of traits like `Clone` may also be called using
|
||||
|
|
@ -827,6 +827,7 @@ impl<T: ?Sized> Arc<T> {
|
|||
/// assert_eq!(x_ptr, Arc::as_ptr(&y));
|
||||
/// assert_eq!(unsafe { &*x_ptr }, "hello");
|
||||
/// ```
|
||||
#[must_use]
|
||||
#[stable(feature = "rc_as_ptr", since = "1.45.0")]
|
||||
pub fn as_ptr(this: &Self) -> *const T {
|
||||
let ptr: *mut ArcInner<T> = NonNull::as_ptr(this.ptr);
|
||||
|
|
@ -897,6 +898,8 @@ impl<T: ?Sized> Arc<T> {
|
|||
///
|
||||
/// let weak_five = Arc::downgrade(&five);
|
||||
/// ```
|
||||
#[must_use = "this returns a new `Weak` pointer, \
|
||||
without modifying the original `Arc`"]
|
||||
#[stable(feature = "arc_weak", since = "1.4.0")]
|
||||
pub fn downgrade(this: &Self) -> Weak<T> {
|
||||
// This Relaxed is OK because we're checking the value in the CAS
|
||||
|
|
@ -1724,6 +1727,7 @@ impl<T: ?Sized> Weak<T> {
|
|||
/// ```
|
||||
///
|
||||
/// [`null`]: core::ptr::null "ptr::null"
|
||||
#[must_use]
|
||||
#[stable(feature = "weak_into_raw", since = "1.45.0")]
|
||||
pub fn as_ptr(&self) -> *const T {
|
||||
let ptr: *mut ArcInner<T> = NonNull::as_ptr(self.ptr);
|
||||
|
|
@ -1861,6 +1865,8 @@ impl<T: ?Sized> Weak<T> {
|
|||
///
|
||||
/// assert!(weak_five.upgrade().is_none());
|
||||
/// ```
|
||||
#[must_use = "this returns a new `Arc`, \
|
||||
without modifying the original weak pointer"]
|
||||
#[stable(feature = "arc_weak", since = "1.4.0")]
|
||||
pub fn upgrade(&self) -> Option<Arc<T>> {
|
||||
// We use a CAS loop to increment the strong count instead of a
|
||||
|
|
|
|||
|
|
@ -52,6 +52,7 @@ impl<'a, T, A: Allocator> Drain<'a, T, A> {
|
|||
/// let _ = drain.next().unwrap();
|
||||
/// assert_eq!(drain.as_slice(), &['b', 'c']);
|
||||
/// ```
|
||||
#[must_use]
|
||||
#[stable(feature = "vec_drain_as_slice", since = "1.46.0")]
|
||||
pub fn as_slice(&self) -> &[T] {
|
||||
self.iter.as_slice()
|
||||
|
|
|
|||
|
|
@ -112,6 +112,8 @@ impl Layout {
|
|||
/// The minimum byte alignment for a memory block of this layout.
|
||||
#[stable(feature = "alloc_layout", since = "1.28.0")]
|
||||
#[rustc_const_stable(feature = "const_alloc_layout", since = "1.50.0")]
|
||||
#[must_use = "this returns the minimum alignment, \
|
||||
without modifying the layout"]
|
||||
#[inline]
|
||||
pub const fn align(&self) -> usize {
|
||||
self.align_.get()
|
||||
|
|
@ -229,6 +231,8 @@ impl Layout {
|
|||
/// satisfy this constraint is to ensure `align <= self.align()`.
|
||||
#[unstable(feature = "alloc_layout_extra", issue = "55724")]
|
||||
#[rustc_const_unstable(feature = "const_alloc_layout", issue = "67521")]
|
||||
#[must_use = "this returns the padding needed, \
|
||||
without modifying the `Layout`"]
|
||||
#[inline]
|
||||
pub const fn padding_needed_for(&self, align: usize) -> usize {
|
||||
let len = self.size();
|
||||
|
|
@ -262,6 +266,8 @@ impl Layout {
|
|||
/// This is equivalent to adding the result of `padding_needed_for`
|
||||
/// to the layout's current size.
|
||||
#[stable(feature = "alloc_layout_manipulation", since = "1.44.0")]
|
||||
#[must_use = "this returns a new `Layout`, \
|
||||
without modifying the original"]
|
||||
#[inline]
|
||||
pub fn pad_to_align(&self) -> Layout {
|
||||
let pad = self.padding_needed_for(self.align());
|
||||
|
|
|
|||
|
|
@ -491,6 +491,7 @@ impl<'a> Arguments<'a> {
|
|||
/// ```
|
||||
#[stable(feature = "fmt_as_str", since = "1.52.0")]
|
||||
#[rustc_const_unstable(feature = "const_arguments_as_str", issue = "none")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub const fn as_str(&self) -> Option<&'static str> {
|
||||
match (self.pieces, self.args) {
|
||||
|
|
|
|||
|
|
@ -657,6 +657,7 @@ impl<T> Option<T> {
|
|||
///
|
||||
/// [&]: reference "shared reference"
|
||||
#[inline]
|
||||
#[must_use]
|
||||
#[stable(feature = "pin", since = "1.33.0")]
|
||||
pub fn as_pin_ref(self: Pin<&Self>) -> Option<Pin<&T>> {
|
||||
// SAFETY: `x` is guaranteed to be pinned because it comes from `self`
|
||||
|
|
@ -668,6 +669,7 @@ impl<T> Option<T> {
|
|||
///
|
||||
/// [&mut]: reference "mutable reference"
|
||||
#[inline]
|
||||
#[must_use]
|
||||
#[stable(feature = "pin", since = "1.33.0")]
|
||||
pub fn as_pin_mut(self: Pin<&mut Self>) -> Option<Pin<&mut T>> {
|
||||
// SAFETY: `get_unchecked_mut` is never used to move the `Option` inside `self`.
|
||||
|
|
|
|||
|
|
@ -119,6 +119,7 @@ impl<T: Sized> NonNull<T> {
|
|||
///
|
||||
/// [the module documentation]: crate::ptr#safety
|
||||
#[inline]
|
||||
#[must_use]
|
||||
#[unstable(feature = "ptr_as_uninit", issue = "75402")]
|
||||
pub unsafe fn as_uninit_ref<'a>(&self) -> &'a MaybeUninit<T> {
|
||||
// SAFETY: the caller must guarantee that `self` meets all the
|
||||
|
|
@ -151,6 +152,7 @@ impl<T: Sized> NonNull<T> {
|
|||
///
|
||||
/// [the module documentation]: crate::ptr#safety
|
||||
#[inline]
|
||||
#[must_use]
|
||||
#[unstable(feature = "ptr_as_uninit", issue = "75402")]
|
||||
pub unsafe fn as_uninit_mut<'a>(&mut self) -> &'a mut MaybeUninit<T> {
|
||||
// SAFETY: the caller must guarantee that `self` meets all the
|
||||
|
|
@ -264,6 +266,7 @@ impl<T: ?Sized> NonNull<T> {
|
|||
/// ```
|
||||
#[stable(feature = "nonnull", since = "1.25.0")]
|
||||
#[rustc_const_stable(feature = "const_nonnull_as_ptr", since = "1.32.0")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub const fn as_ptr(self) -> *mut T {
|
||||
self.pointer as *mut T
|
||||
|
|
@ -310,6 +313,7 @@ impl<T: ?Sized> NonNull<T> {
|
|||
///
|
||||
/// [the module documentation]: crate::ptr#safety
|
||||
#[stable(feature = "nonnull", since = "1.25.0")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub unsafe fn as_ref<'a>(&self) -> &'a T {
|
||||
// SAFETY: the caller must guarantee that `self` meets all the
|
||||
|
|
@ -359,6 +363,7 @@ impl<T: ?Sized> NonNull<T> {
|
|||
///
|
||||
/// [the module documentation]: crate::ptr#safety
|
||||
#[stable(feature = "nonnull", since = "1.25.0")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub unsafe fn as_mut<'a>(&mut self) -> &'a mut T {
|
||||
// SAFETY: the caller must guarantee that `self` meets all the
|
||||
|
|
@ -455,6 +460,7 @@ impl<T> NonNull<[T]> {
|
|||
/// assert_eq!(slice.as_non_null_ptr(), NonNull::new(1 as *mut i8).unwrap());
|
||||
/// ```
|
||||
#[inline]
|
||||
#[must_use]
|
||||
#[unstable(feature = "slice_ptr_get", issue = "74265")]
|
||||
#[rustc_const_unstable(feature = "slice_ptr_get", issue = "74265")]
|
||||
pub const fn as_non_null_ptr(self) -> NonNull<T> {
|
||||
|
|
@ -474,6 +480,7 @@ impl<T> NonNull<[T]> {
|
|||
/// assert_eq!(slice.as_mut_ptr(), 1 as *mut i8);
|
||||
/// ```
|
||||
#[inline]
|
||||
#[must_use]
|
||||
#[unstable(feature = "slice_ptr_get", issue = "74265")]
|
||||
#[rustc_const_unstable(feature = "slice_ptr_get", issue = "74265")]
|
||||
pub const fn as_mut_ptr(self) -> *mut T {
|
||||
|
|
@ -518,6 +525,7 @@ impl<T> NonNull<[T]> {
|
|||
///
|
||||
/// [valid]: crate::ptr#safety
|
||||
#[inline]
|
||||
#[must_use]
|
||||
#[unstable(feature = "ptr_as_uninit", issue = "75402")]
|
||||
pub unsafe fn as_uninit_slice<'a>(&self) -> &'a [MaybeUninit<T>] {
|
||||
// SAFETY: the caller must uphold the safety contract for `as_uninit_slice`.
|
||||
|
|
@ -579,6 +587,7 @@ impl<T> NonNull<[T]> {
|
|||
/// # Ok::<_, std::alloc::AllocError>(())
|
||||
/// ```
|
||||
#[inline]
|
||||
#[must_use]
|
||||
#[unstable(feature = "ptr_as_uninit", issue = "75402")]
|
||||
pub unsafe fn as_uninit_slice_mut<'a>(&self) -> &'a mut [MaybeUninit<T>] {
|
||||
// SAFETY: the caller must uphold the safety contract for `as_uninit_slice_mut`.
|
||||
|
|
|
|||
|
|
@ -112,6 +112,7 @@ impl<T: ?Sized> Unique<T> {
|
|||
/// The resulting lifetime is bound to self so this behaves "as if"
|
||||
/// it were actually an instance of T that is getting borrowed. If a longer
|
||||
/// (unbound) lifetime is needed, use `&*my_ptr.as_ptr()`.
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub unsafe fn as_ref(&self) -> &T {
|
||||
// SAFETY: the caller must guarantee that `self` meets all the
|
||||
|
|
@ -124,6 +125,7 @@ impl<T: ?Sized> Unique<T> {
|
|||
/// The resulting lifetime is bound to self so this behaves "as if"
|
||||
/// it were actually an instance of T that is getting borrowed. If a longer
|
||||
/// (unbound) lifetime is needed, use `&mut *my_ptr.as_ptr()`.
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub unsafe fn as_mut(&mut self) -> &mut T {
|
||||
// SAFETY: the caller must guarantee that `self` meets all the
|
||||
|
|
|
|||
|
|
@ -124,6 +124,7 @@ impl<'a, T> Iter<'a, T> {
|
|||
/// // Now `as_slice` returns "[2, 3]":
|
||||
/// println!("{:?}", iter.as_slice());
|
||||
/// ```
|
||||
#[must_use]
|
||||
#[stable(feature = "iter_to_slice", since = "1.4.0")]
|
||||
pub fn as_slice(&self) -> &'a [T] {
|
||||
self.make_slice()
|
||||
|
|
@ -298,6 +299,7 @@ impl<'a, T> IterMut<'a, T> {
|
|||
/// // Now `as_slice` returns "[2, 3]":
|
||||
/// assert_eq!(iter.as_slice(), &[2, 3]);
|
||||
/// ```
|
||||
#[must_use]
|
||||
#[stable(feature = "slice_iter_mut_as_slice", since = "1.53.0")]
|
||||
pub fn as_slice(&self) -> &[T] {
|
||||
self.make_slice()
|
||||
|
|
|
|||
|
|
@ -109,6 +109,7 @@ impl<'a> Chars<'a> {
|
|||
/// assert_eq!(chars.as_str(), "");
|
||||
/// ```
|
||||
#[stable(feature = "iter_to_slice", since = "1.4.0")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub fn as_str(&self) -> &'a str {
|
||||
// SAFETY: `Chars` is only made from a str, which guarantees the iter is valid UTF-8.
|
||||
|
|
@ -185,6 +186,7 @@ impl<'a> CharIndices<'a> {
|
|||
/// This has the same lifetime as the original slice, and so the
|
||||
/// iterator can continue to be used while this exists.
|
||||
#[stable(feature = "iter_to_slice", since = "1.4.0")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub fn as_str(&self) -> &'a str {
|
||||
self.iter.as_str()
|
||||
|
|
@ -1247,6 +1249,7 @@ impl<'a> SplitWhitespace<'a> {
|
|||
/// assert_eq!(split.as_str(), "");
|
||||
/// ```
|
||||
#[inline]
|
||||
#[must_use]
|
||||
#[unstable(feature = "str_split_whitespace_as_str", issue = "77998")]
|
||||
pub fn as_str(&self) -> &'a str {
|
||||
self.inner.iter.as_str()
|
||||
|
|
@ -1302,6 +1305,7 @@ impl<'a> SplitAsciiWhitespace<'a> {
|
|||
/// assert_eq!(split.as_str(), "");
|
||||
/// ```
|
||||
#[inline]
|
||||
#[must_use]
|
||||
#[unstable(feature = "str_split_whitespace_as_str", issue = "77998")]
|
||||
pub fn as_str(&self) -> &'a str {
|
||||
if self.inner.iter.iter.finished {
|
||||
|
|
|
|||
|
|
@ -230,6 +230,7 @@ impl str {
|
|||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_const_stable(feature = "str_as_bytes", since = "1.39.0")]
|
||||
#[must_use]
|
||||
#[inline(always)]
|
||||
#[allow(unused_attributes)]
|
||||
pub const fn as_bytes(&self) -> &[u8] {
|
||||
|
|
@ -274,6 +275,7 @@ impl str {
|
|||
/// assert_eq!("🍔∈🌏", s);
|
||||
/// ```
|
||||
#[stable(feature = "str_mut_extras", since = "1.20.0")]
|
||||
#[must_use]
|
||||
#[inline(always)]
|
||||
pub unsafe fn as_bytes_mut(&mut self) -> &mut [u8] {
|
||||
// SAFETY: the cast from `&str` to `&[u8]` is safe since `str`
|
||||
|
|
@ -304,6 +306,7 @@ impl str {
|
|||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_const_stable(feature = "rustc_str_as_ptr", since = "1.32.0")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub const fn as_ptr(&self) -> *const u8 {
|
||||
self as *const str as *const u8
|
||||
|
|
@ -318,6 +321,7 @@ impl str {
|
|||
/// It is your responsibility to make sure that the string slice only gets
|
||||
/// modified in a way that it remains valid UTF-8.
|
||||
#[stable(feature = "str_as_mut_ptr", since = "1.36.0")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub fn as_mut_ptr(&mut self) -> *mut u8 {
|
||||
self as *mut str as *mut u8
|
||||
|
|
|
|||
|
|
@ -97,7 +97,7 @@ impl<T> Poll<T> {
|
|||
/// Extracts the successful type of a [`Poll<T>`].
|
||||
///
|
||||
/// When combined with the `?` operator, this function will
|
||||
/// propogate any [`Poll::Pending`] values to the caller, and
|
||||
/// propagate any [`Poll::Pending`] values to the caller, and
|
||||
/// extract the `T` from [`Poll::Ready`].
|
||||
///
|
||||
/// # Examples
|
||||
|
|
|
|||
|
|
@ -334,6 +334,7 @@ impl Duration {
|
|||
/// [`subsec_nanos`]: Duration::subsec_nanos
|
||||
#[stable(feature = "duration", since = "1.3.0")]
|
||||
#[rustc_const_stable(feature = "duration", since = "1.32.0")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub const fn as_secs(&self) -> u64 {
|
||||
self.secs
|
||||
|
|
@ -417,6 +418,7 @@ impl Duration {
|
|||
/// ```
|
||||
#[stable(feature = "duration_as_u128", since = "1.33.0")]
|
||||
#[rustc_const_stable(feature = "duration_as_u128", since = "1.33.0")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub const fn as_millis(&self) -> u128 {
|
||||
self.secs as u128 * MILLIS_PER_SEC as u128 + (self.nanos / NANOS_PER_MILLI) as u128
|
||||
|
|
@ -434,6 +436,7 @@ impl Duration {
|
|||
/// ```
|
||||
#[stable(feature = "duration_as_u128", since = "1.33.0")]
|
||||
#[rustc_const_stable(feature = "duration_as_u128", since = "1.33.0")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub const fn as_micros(&self) -> u128 {
|
||||
self.secs as u128 * MICROS_PER_SEC as u128 + (self.nanos / NANOS_PER_MICRO) as u128
|
||||
|
|
@ -451,6 +454,7 @@ impl Duration {
|
|||
/// ```
|
||||
#[stable(feature = "duration_as_u128", since = "1.33.0")]
|
||||
#[rustc_const_stable(feature = "duration_as_u128", since = "1.33.0")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub const fn as_nanos(&self) -> u128 {
|
||||
self.secs as u128 * NANOS_PER_SEC as u128 + self.nanos as u128
|
||||
|
|
@ -674,6 +678,7 @@ impl Duration {
|
|||
/// assert_eq!(dur.as_secs_f64(), 2.7);
|
||||
/// ```
|
||||
#[stable(feature = "duration_float", since = "1.38.0")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
#[rustc_const_unstable(feature = "duration_consts_2", issue = "72440")]
|
||||
pub const fn as_secs_f64(&self) -> f64 {
|
||||
|
|
@ -692,6 +697,7 @@ impl Duration {
|
|||
/// assert_eq!(dur.as_secs_f32(), 2.7);
|
||||
/// ```
|
||||
#[stable(feature = "duration_float", since = "1.38.0")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
#[rustc_const_unstable(feature = "duration_consts_2", issue = "72440")]
|
||||
pub const fn as_secs_f32(&self) -> f32 {
|
||||
|
|
|
|||
|
|
@ -297,6 +297,7 @@ impl FromVecWithNulError {
|
|||
///
|
||||
/// assert_eq!(&bytes[..], value.unwrap_err().as_bytes());
|
||||
/// ```
|
||||
#[must_use]
|
||||
pub fn as_bytes(&self) -> &[u8] {
|
||||
&self.bytes[..]
|
||||
}
|
||||
|
|
@ -618,6 +619,7 @@ impl CString {
|
|||
/// assert_eq!(bytes, &[b'f', b'o', b'o']);
|
||||
/// ```
|
||||
#[inline]
|
||||
#[must_use]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub fn as_bytes(&self) -> &[u8] {
|
||||
// SAFETY: CString has a length at least 1
|
||||
|
|
@ -637,6 +639,7 @@ impl CString {
|
|||
/// assert_eq!(bytes, &[b'f', b'o', b'o', b'\0']);
|
||||
/// ```
|
||||
#[inline]
|
||||
#[must_use]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub fn as_bytes_with_nul(&self) -> &[u8] {
|
||||
&self.inner
|
||||
|
|
@ -655,6 +658,7 @@ impl CString {
|
|||
/// CStr::from_bytes_with_nul(b"foo\0").expect("CStr::from_bytes_with_nul failed"));
|
||||
/// ```
|
||||
#[inline]
|
||||
#[must_use]
|
||||
#[stable(feature = "as_c_str", since = "1.20.0")]
|
||||
pub fn as_c_str(&self) -> &CStr {
|
||||
&*self
|
||||
|
|
@ -1313,6 +1317,7 @@ impl CStr {
|
|||
/// This way, the lifetime of the [`CString`] in `hello` encompasses
|
||||
/// the lifetime of `ptr` and the `unsafe` block.
|
||||
#[inline]
|
||||
#[must_use]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_const_stable(feature = "const_str_as_ptr", since = "1.32.0")]
|
||||
pub const fn as_ptr(&self) -> *const c_char {
|
||||
|
|
|
|||
|
|
@ -137,6 +137,7 @@ impl OsString {
|
|||
/// assert_eq!(os_string.as_os_str(), os_str);
|
||||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub fn as_os_str(&self) -> &OsStr {
|
||||
self
|
||||
|
|
|
|||
|
|
@ -1005,6 +1005,7 @@ impl Metadata {
|
|||
/// Ok(())
|
||||
/// }
|
||||
/// ```
|
||||
#[must_use]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub fn is_dir(&self) -> bool {
|
||||
self.file_type().is_dir()
|
||||
|
|
@ -1033,6 +1034,7 @@ impl Metadata {
|
|||
/// Ok(())
|
||||
/// }
|
||||
/// ```
|
||||
#[must_use]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub fn is_file(&self) -> bool {
|
||||
self.file_type().is_file()
|
||||
|
|
@ -1059,6 +1061,7 @@ impl Metadata {
|
|||
/// Ok(())
|
||||
/// }
|
||||
/// ```
|
||||
#[must_use]
|
||||
#[unstable(feature = "is_symlink", issue = "85748")]
|
||||
pub fn is_symlink(&self) -> bool {
|
||||
self.file_type().is_symlink()
|
||||
|
|
@ -1306,6 +1309,7 @@ impl FileType {
|
|||
/// Ok(())
|
||||
/// }
|
||||
/// ```
|
||||
#[must_use]
|
||||
#[stable(feature = "file_type", since = "1.1.0")]
|
||||
pub fn is_dir(&self) -> bool {
|
||||
self.0.is_dir()
|
||||
|
|
@ -1338,6 +1342,7 @@ impl FileType {
|
|||
/// Ok(())
|
||||
/// }
|
||||
/// ```
|
||||
#[must_use]
|
||||
#[stable(feature = "file_type", since = "1.1.0")]
|
||||
pub fn is_file(&self) -> bool {
|
||||
self.0.is_file()
|
||||
|
|
@ -1373,6 +1378,7 @@ impl FileType {
|
|||
/// Ok(())
|
||||
/// }
|
||||
/// ```
|
||||
#[must_use]
|
||||
#[stable(feature = "file_type", since = "1.1.0")]
|
||||
pub fn is_symlink(&self) -> bool {
|
||||
self.0.is_symlink()
|
||||
|
|
|
|||
|
|
@ -232,6 +232,7 @@ impl SocketAddr {
|
|||
/// assert_eq!(socket.is_ipv4(), true);
|
||||
/// assert_eq!(socket.is_ipv6(), false);
|
||||
/// ```
|
||||
#[must_use]
|
||||
#[stable(feature = "sockaddr_checker", since = "1.16.0")]
|
||||
#[rustc_const_unstable(feature = "const_socketaddr", issue = "82485")]
|
||||
pub const fn is_ipv4(&self) -> bool {
|
||||
|
|
@ -253,6 +254,7 @@ impl SocketAddr {
|
|||
/// assert_eq!(socket.is_ipv4(), false);
|
||||
/// assert_eq!(socket.is_ipv6(), true);
|
||||
/// ```
|
||||
#[must_use]
|
||||
#[stable(feature = "sockaddr_checker", since = "1.16.0")]
|
||||
#[rustc_const_unstable(feature = "const_socketaddr", issue = "82485")]
|
||||
pub const fn is_ipv6(&self) -> bool {
|
||||
|
|
|
|||
|
|
@ -233,6 +233,7 @@ impl IpAddr {
|
|||
/// ```
|
||||
#[rustc_const_stable(feature = "const_ip", since = "1.50.0")]
|
||||
#[stable(feature = "ip_shared", since = "1.12.0")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub const fn is_unspecified(&self) -> bool {
|
||||
match self {
|
||||
|
|
@ -256,6 +257,7 @@ impl IpAddr {
|
|||
/// ```
|
||||
#[rustc_const_stable(feature = "const_ip", since = "1.50.0")]
|
||||
#[stable(feature = "ip_shared", since = "1.12.0")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub const fn is_loopback(&self) -> bool {
|
||||
match self {
|
||||
|
|
@ -281,6 +283,7 @@ impl IpAddr {
|
|||
/// ```
|
||||
#[rustc_const_unstable(feature = "const_ip", issue = "76205")]
|
||||
#[unstable(feature = "ip", issue = "27709")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub const fn is_global(&self) -> bool {
|
||||
match self {
|
||||
|
|
@ -304,6 +307,7 @@ impl IpAddr {
|
|||
/// ```
|
||||
#[rustc_const_stable(feature = "const_ip", since = "1.50.0")]
|
||||
#[stable(feature = "ip_shared", since = "1.12.0")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub const fn is_multicast(&self) -> bool {
|
||||
match self {
|
||||
|
|
@ -332,6 +336,7 @@ impl IpAddr {
|
|||
/// ```
|
||||
#[rustc_const_unstable(feature = "const_ip", issue = "76205")]
|
||||
#[unstable(feature = "ip", issue = "27709")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub const fn is_documentation(&self) -> bool {
|
||||
match self {
|
||||
|
|
@ -356,6 +361,7 @@ impl IpAddr {
|
|||
/// assert_eq!(IpAddr::V6(Ipv6Addr::new(0x2001, 0x2, 0, 0, 0, 0, 0, 0)).is_benchmarking(), true);
|
||||
/// ```
|
||||
#[unstable(feature = "ip", issue = "27709")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub const fn is_benchmarking(&self) -> bool {
|
||||
match self {
|
||||
|
|
@ -379,6 +385,7 @@ impl IpAddr {
|
|||
/// ```
|
||||
#[rustc_const_stable(feature = "const_ip", since = "1.50.0")]
|
||||
#[stable(feature = "ipaddr_checker", since = "1.16.0")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub const fn is_ipv4(&self) -> bool {
|
||||
matches!(self, IpAddr::V4(_))
|
||||
|
|
@ -399,6 +406,7 @@ impl IpAddr {
|
|||
/// ```
|
||||
#[rustc_const_stable(feature = "const_ip", since = "1.50.0")]
|
||||
#[stable(feature = "ipaddr_checker", since = "1.16.0")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub const fn is_ipv6(&self) -> bool {
|
||||
matches!(self, IpAddr::V6(_))
|
||||
|
|
@ -527,6 +535,7 @@ impl Ipv4Addr {
|
|||
/// ```
|
||||
#[rustc_const_stable(feature = "const_ipv4", since = "1.32.0")]
|
||||
#[stable(feature = "ip_shared", since = "1.12.0")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub const fn is_unspecified(&self) -> bool {
|
||||
self.inner.s_addr == 0
|
||||
|
|
@ -548,6 +557,7 @@ impl Ipv4Addr {
|
|||
/// ```
|
||||
#[rustc_const_stable(feature = "const_ipv4", since = "1.50.0")]
|
||||
#[stable(since = "1.7.0", feature = "ip_17")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub const fn is_loopback(&self) -> bool {
|
||||
self.octets()[0] == 127
|
||||
|
|
@ -578,6 +588,7 @@ impl Ipv4Addr {
|
|||
/// ```
|
||||
#[rustc_const_stable(feature = "const_ipv4", since = "1.50.0")]
|
||||
#[stable(since = "1.7.0", feature = "ip_17")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub const fn is_private(&self) -> bool {
|
||||
match self.octets() {
|
||||
|
|
@ -605,6 +616,7 @@ impl Ipv4Addr {
|
|||
/// ```
|
||||
#[rustc_const_stable(feature = "const_ipv4", since = "1.50.0")]
|
||||
#[stable(since = "1.7.0", feature = "ip_17")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub const fn is_link_local(&self) -> bool {
|
||||
matches!(self.octets(), [169, 254, ..])
|
||||
|
|
@ -680,6 +692,7 @@ impl Ipv4Addr {
|
|||
/// ```
|
||||
#[rustc_const_unstable(feature = "const_ipv4", issue = "76205")]
|
||||
#[unstable(feature = "ip", issue = "27709")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub const fn is_global(&self) -> bool {
|
||||
// check if this address is 192.0.0.9 or 192.0.0.10. These addresses are the only two
|
||||
|
|
@ -720,6 +733,7 @@ impl Ipv4Addr {
|
|||
/// ```
|
||||
#[rustc_const_unstable(feature = "const_ipv4", issue = "76205")]
|
||||
#[unstable(feature = "ip", issue = "27709")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub const fn is_shared(&self) -> bool {
|
||||
self.octets()[0] == 100 && (self.octets()[1] & 0b1100_0000 == 0b0100_0000)
|
||||
|
|
@ -745,6 +759,7 @@ impl Ipv4Addr {
|
|||
/// ```
|
||||
#[rustc_const_unstable(feature = "const_ipv4", issue = "76205")]
|
||||
#[unstable(feature = "ip", issue = "27709")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub const fn is_benchmarking(&self) -> bool {
|
||||
self.octets()[0] == 198 && (self.octets()[1] & 0xfe) == 18
|
||||
|
|
@ -779,6 +794,7 @@ impl Ipv4Addr {
|
|||
/// ```
|
||||
#[rustc_const_unstable(feature = "const_ipv4", issue = "76205")]
|
||||
#[unstable(feature = "ip", issue = "27709")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub const fn is_reserved(&self) -> bool {
|
||||
self.octets()[0] & 240 == 240 && !self.is_broadcast()
|
||||
|
|
@ -802,6 +818,7 @@ impl Ipv4Addr {
|
|||
/// ```
|
||||
#[rustc_const_stable(feature = "const_ipv4", since = "1.50.0")]
|
||||
#[stable(since = "1.7.0", feature = "ip_17")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub const fn is_multicast(&self) -> bool {
|
||||
self.octets()[0] >= 224 && self.octets()[0] <= 239
|
||||
|
|
@ -823,6 +840,7 @@ impl Ipv4Addr {
|
|||
/// ```
|
||||
#[rustc_const_stable(feature = "const_ipv4", since = "1.50.0")]
|
||||
#[stable(since = "1.7.0", feature = "ip_17")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub const fn is_broadcast(&self) -> bool {
|
||||
u32::from_be_bytes(self.octets()) == u32::from_be_bytes(Self::BROADCAST.octets())
|
||||
|
|
@ -850,6 +868,7 @@ impl Ipv4Addr {
|
|||
/// ```
|
||||
#[rustc_const_stable(feature = "const_ipv4", since = "1.50.0")]
|
||||
#[stable(since = "1.7.0", feature = "ip_17")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub const fn is_documentation(&self) -> bool {
|
||||
match self.octets() {
|
||||
|
|
@ -1291,6 +1310,7 @@ impl Ipv6Addr {
|
|||
/// ```
|
||||
#[rustc_const_stable(feature = "const_ipv6", since = "1.50.0")]
|
||||
#[stable(since = "1.7.0", feature = "ip_17")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub const fn is_unspecified(&self) -> bool {
|
||||
u128::from_be_bytes(self.octets()) == u128::from_be_bytes(Ipv6Addr::UNSPECIFIED.octets())
|
||||
|
|
@ -1314,6 +1334,7 @@ impl Ipv6Addr {
|
|||
/// ```
|
||||
#[rustc_const_stable(feature = "const_ipv6", since = "1.50.0")]
|
||||
#[stable(since = "1.7.0", feature = "ip_17")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub const fn is_loopback(&self) -> bool {
|
||||
u128::from_be_bytes(self.octets()) == u128::from_be_bytes(Ipv6Addr::LOCALHOST.octets())
|
||||
|
|
@ -1340,6 +1361,7 @@ impl Ipv6Addr {
|
|||
/// ```
|
||||
#[rustc_const_unstable(feature = "const_ipv6", issue = "76205")]
|
||||
#[unstable(feature = "ip", issue = "27709")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub const fn is_global(&self) -> bool {
|
||||
match self.multicast_scope() {
|
||||
|
|
@ -1367,6 +1389,7 @@ impl Ipv6Addr {
|
|||
/// ```
|
||||
#[rustc_const_unstable(feature = "const_ipv6", issue = "76205")]
|
||||
#[unstable(feature = "ip", issue = "27709")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub const fn is_unique_local(&self) -> bool {
|
||||
(self.segments()[0] & 0xfe00) == 0xfc00
|
||||
|
|
@ -1395,6 +1418,7 @@ impl Ipv6Addr {
|
|||
/// ```
|
||||
#[rustc_const_unstable(feature = "const_ipv6", issue = "76205")]
|
||||
#[unstable(feature = "ip", issue = "27709")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub const fn is_unicast(&self) -> bool {
|
||||
!self.is_multicast()
|
||||
|
|
@ -1446,6 +1470,7 @@ impl Ipv6Addr {
|
|||
/// ```
|
||||
#[rustc_const_unstable(feature = "const_ipv6", issue = "76205")]
|
||||
#[unstable(feature = "ip", issue = "27709")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub const fn is_unicast_link_local(&self) -> bool {
|
||||
(self.segments()[0] & 0xffc0) == 0xfe80
|
||||
|
|
@ -1470,6 +1495,7 @@ impl Ipv6Addr {
|
|||
/// ```
|
||||
#[rustc_const_unstable(feature = "const_ipv6", issue = "76205")]
|
||||
#[unstable(feature = "ip", issue = "27709")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub const fn is_documentation(&self) -> bool {
|
||||
(self.segments()[0] == 0x2001) && (self.segments()[1] == 0xdb8)
|
||||
|
|
@ -1492,6 +1518,7 @@ impl Ipv6Addr {
|
|||
/// assert_eq!(Ipv6Addr::new(0x2001, 0x2, 0, 0, 0, 0, 0, 0).is_benchmarking(), true);
|
||||
/// ```
|
||||
#[unstable(feature = "ip", issue = "27709")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub const fn is_benchmarking(&self) -> bool {
|
||||
(self.segments()[0] == 0x2001) && (self.segments()[1] == 0x2) && (self.segments()[2] == 0)
|
||||
|
|
@ -1529,6 +1556,7 @@ impl Ipv6Addr {
|
|||
/// ```
|
||||
#[rustc_const_unstable(feature = "const_ipv6", issue = "76205")]
|
||||
#[unstable(feature = "ip", issue = "27709")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub const fn is_unicast_global(&self) -> bool {
|
||||
self.is_unicast()
|
||||
|
|
@ -1590,6 +1618,7 @@ impl Ipv6Addr {
|
|||
/// ```
|
||||
#[rustc_const_stable(feature = "const_ipv6", since = "1.50.0")]
|
||||
#[stable(since = "1.7.0", feature = "ip_17")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub const fn is_multicast(&self) -> bool {
|
||||
(self.segments()[0] & 0xff00) == 0xff00
|
||||
|
|
|
|||
|
|
@ -156,6 +156,7 @@ impl SocketAddr {
|
|||
/// Ok(())
|
||||
/// }
|
||||
/// ```
|
||||
#[must_use]
|
||||
#[stable(feature = "unix_socket", since = "1.10.0")]
|
||||
pub fn is_unnamed(&self) -> bool {
|
||||
if let AddressKind::Unnamed = self.address() { true } else { false }
|
||||
|
|
@ -192,6 +193,7 @@ impl SocketAddr {
|
|||
/// }
|
||||
/// ```
|
||||
#[stable(feature = "unix_socket", since = "1.10.0")]
|
||||
#[must_use]
|
||||
pub fn as_pathname(&self) -> Option<&Path> {
|
||||
if let AddressKind::Pathname(path) = self.address() { Some(path) } else { None }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -215,6 +215,7 @@ impl<'a> Prefix<'a> {
|
|||
/// assert!(!Disk(b'C').is_verbatim());
|
||||
/// ```
|
||||
#[inline]
|
||||
#[must_use]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub fn is_verbatim(&self) -> bool {
|
||||
use self::Prefix::*;
|
||||
|
|
@ -247,6 +248,7 @@ impl<'a> Prefix<'a> {
|
|||
/// assert!(path::is_separator('/')); // '/' works for both Unix and Windows
|
||||
/// assert!(!path::is_separator('❤'));
|
||||
/// ```
|
||||
#[must_use]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub fn is_separator(c: char) -> bool {
|
||||
c.is_ascii() && is_sep_byte(c as u8)
|
||||
|
|
@ -427,6 +429,7 @@ impl<'a> PrefixComponent<'a> {
|
|||
|
||||
/// Returns the raw [`OsStr`] slice for this prefix.
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub fn as_os_str(&self) -> &'a OsStr {
|
||||
self.raw
|
||||
|
|
@ -676,6 +679,7 @@ impl<'a> Components<'a> {
|
|||
///
|
||||
/// assert_eq!(Path::new("foo/bar.txt"), components.as_path());
|
||||
/// ```
|
||||
#[must_use]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub fn as_path(&self) -> &'a Path {
|
||||
let mut comps = self.clone();
|
||||
|
|
@ -821,6 +825,7 @@ impl<'a> Iter<'a> {
|
|||
/// assert_eq!(Path::new("foo/bar.txt"), iter.as_path());
|
||||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub fn as_path(&self) -> &'a Path {
|
||||
self.inner.as_path()
|
||||
|
|
@ -1188,6 +1193,7 @@ impl PathBuf {
|
|||
/// assert_eq!(Path::new("/test"), p.as_path());
|
||||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub fn as_path(&self) -> &Path {
|
||||
self
|
||||
|
|
@ -1923,6 +1929,7 @@ impl Path {
|
|||
/// assert_eq!(os_str, std::ffi::OsStr::new("foo.txt"));
|
||||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub fn as_os_str(&self) -> &OsStr {
|
||||
&self.inner
|
||||
|
|
@ -2011,6 +2018,7 @@ impl Path {
|
|||
///
|
||||
/// [`has_root`]: Path::has_root
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[must_use]
|
||||
#[allow(deprecated)]
|
||||
pub fn is_absolute(&self) -> bool {
|
||||
if cfg!(target_os = "redox") {
|
||||
|
|
@ -2035,6 +2043,7 @@ impl Path {
|
|||
///
|
||||
/// [`is_absolute`]: Path::is_absolute
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub fn is_relative(&self) -> bool {
|
||||
!self.is_absolute()
|
||||
|
|
@ -2061,6 +2070,7 @@ impl Path {
|
|||
/// assert!(Path::new("/etc/passwd").has_root());
|
||||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub fn has_root(&self) -> bool {
|
||||
self.components().has_root()
|
||||
|
|
@ -2511,6 +2521,8 @@ impl Path {
|
|||
/// println!("{}", path.display());
|
||||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[must_use = "this does not display the path, \
|
||||
it returns an object that can be displayed"]
|
||||
#[inline]
|
||||
pub fn display(&self) -> Display<'_> {
|
||||
Display { path: self }
|
||||
|
|
@ -2698,6 +2710,7 @@ impl Path {
|
|||
/// a Unix-like system for example. See [`fs::File::open`] or
|
||||
/// [`fs::OpenOptions::open`] for more information.
|
||||
#[stable(feature = "path_ext", since = "1.5.0")]
|
||||
#[must_use]
|
||||
pub fn is_file(&self) -> bool {
|
||||
fs::metadata(self).map(|m| m.is_file()).unwrap_or(false)
|
||||
}
|
||||
|
|
@ -2724,6 +2737,7 @@ impl Path {
|
|||
/// check errors, call [`fs::metadata`] and handle its [`Result`]. Then call
|
||||
/// [`fs::Metadata::is_dir`] if it was [`Ok`].
|
||||
#[stable(feature = "path_ext", since = "1.5.0")]
|
||||
#[must_use]
|
||||
pub fn is_dir(&self) -> bool {
|
||||
fs::metadata(self).map(|m| m.is_dir()).unwrap_or(false)
|
||||
}
|
||||
|
|
@ -2750,6 +2764,7 @@ impl Path {
|
|||
/// assert_eq!(link_path.exists(), false);
|
||||
/// ```
|
||||
#[unstable(feature = "is_symlink", issue = "85748")]
|
||||
#[must_use]
|
||||
pub fn is_symlink(&self) -> bool {
|
||||
fs::symlink_metadata(self).map(|m| m.is_symlink()).unwrap_or(false)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -167,6 +167,7 @@ impl BarrierWaitResult {
|
|||
/// println!("{:?}", barrier_wait_result.is_leader());
|
||||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[must_use]
|
||||
pub fn is_leader(&self) -> bool {
|
||||
self.0
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1031,6 +1031,7 @@ impl ThreadId {
|
|||
/// value is entirely opaque -- only equality testing is stable. Note that
|
||||
/// it is not guaranteed which values new threads will return, and this may
|
||||
/// change across Rust versions.
|
||||
#[must_use]
|
||||
#[unstable(feature = "thread_id_value", issue = "67939")]
|
||||
pub fn as_u64(&self) -> NonZeroU64 {
|
||||
self.0
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit 2d9b1b9da706de24650fdc5c3b0182f55c82115d
|
||||
Subproject commit 7c0088ca744d293a5f4b1e2ac378e7c23d30fe55
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 4c76da9ddb4650203c129fceffdea95a3466c205
|
||||
Subproject commit 270fccd339e5972d9c900e788f197e81a0bcd956
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 2747c4bb2cbc0639b733793ddb0bf4e9daa2634e
|
||||
Subproject commit 2d66852a27c5d0ec50ae021820d1de22caa2b1bd
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 13747275bd14c2d2b453100498532f9ae5504769
|
||||
Subproject commit b5c68b02984f74e99d1f1b332029e05f607e2660
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 28aca4a36962c709bce301c03114b5589381dfb8
|
||||
Subproject commit 9a60624fcad0140826c44389571dc622917cd632
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit d1f03cbaa39d9164f5fe4b9b93762668142e0dad
|
||||
Subproject commit fba15a46ca8efa97e8a955794724ac7ce27805b8
|
||||
Loading…
Add table
Add a link
Reference in a new issue