pub struct BoxGlobal>(/* private fields */)
where
A: Allocator,
T: ?Sized;
Expand description
A pointer type that uniquely owns a heap allocation of type T
.
See the module-level documentation for more.
Implementations§
Source§impl BoxAny, A>where
A: Allocator,
impl BoxAny, A>where
A: Allocator,
1.0.0 · Sourcepub fn downcast(self) -> Result<Box, BoxAny, A>>where
T: Any,
pub fn downcast(self) -> Result<Box, BoxAny, A>>where
T: Any,
Attempts to downcast the box to a concrete type.
§Examples
Sourcepub unsafe fn downcast_unchecked(self) -> Boxwhere
T: Any,
🔬This is a nightly-only experimental API. (downcast_unchecked
#90850)
pub unsafe fn downcast_unchecked(self) -> Boxwhere
T: Any,
downcast_unchecked
#90850)Downcasts the box to a concrete type.
For a safe alternative see downcast
.
§Examples
#![feature(downcast_unchecked)]
use std::any::Any;
let x: Box<dyn Any> = Box::new(1_usize);
unsafe {
assert_eq!(*x.downcast_unchecked::(), 1);
}
§Safety
The contained value must be of type T
. Calling this method
with the incorrect type is undefined behavior.
Source§impl BoxAny + Send, A>where
A: Allocator,
impl BoxAny + Send, A>where
A: Allocator,
1.0.0 · Sourcepub fn downcast(self) -> Result<Box, BoxAny + Send, A>>where
T: Any,
pub fn downcast(self) -> Result<Box, BoxAny + Send, A>>where
T: Any,
Attempts to downcast the box to a concrete type.
§Examples
Sourcepub unsafe fn downcast_unchecked(self) -> Boxwhere
T: Any,
🔬This is a nightly-only experimental API. (downcast_unchecked
#90850)
pub unsafe fn downcast_unchecked(self) -> Boxwhere
T: Any,
downcast_unchecked
#90850)Downcasts the box to a concrete type.
For a safe alternative see downcast
.
§Examples
#![feature(downcast_unchecked)]
use std::any::Any;
let x: Box<dyn Any + Send> = Box::new(1_usize);
unsafe {
assert_eq!(*x.downcast_unchecked::(), 1);
}
§Safety
The contained value must be of type T
. Calling this method
with the incorrect type is undefined behavior.
Source§impl BoxAny + Sync + Send, A>where
A: Allocator,
impl BoxAny + Sync + Send, A>where
A: Allocator,
1.51.0 · Sourcepub fn downcast(self) -> Result<Box, BoxAny + Sync + Send, A>>where
T: Any,
pub fn downcast(self) -> Result<Box, BoxAny + Sync + Send, A>>where
T: Any,
Attempts to downcast the box to a concrete type.
§Examples
Sourcepub unsafe fn downcast_unchecked(self) -> Boxwhere
T: Any,
🔬This is a nightly-only experimental API. (downcast_unchecked
#90850)
pub unsafe fn downcast_unchecked(self) -> Boxwhere
T: Any,
downcast_unchecked
#90850)Downcasts the box to a concrete type.
For a safe alternative see downcast
.
§Examples
#![feature(downcast_unchecked)]
use std::any::Any;
let x: Box<dyn Any + Send + Sync> = Box::new(1_usize);
unsafe {
assert_eq!(*x.downcast_unchecked::(), 1);
}
§Safety
The contained value must be of type T
. Calling this method
with the incorrect type is undefined behavior.
Source§impl Box
impl Box
1.0.0 · Sourcepub fn new(x: T) -> Box
pub fn new(x: T) -> Box
Allocates memory on the heap and then places x
into it.
This doesn’t actually allocate if T
is zero-sized.
§Examples
1.82.0 · Sourcepub fn new_uninit() -> Box<MaybeUninit>
pub fn new_uninit() -> Box<MaybeUninit>
Constructs a new box with uninitialized contents.
§Examples
Sourcepub fn new_zeroed() -> Box<MaybeUninit>
🔬This is a nightly-only experimental API. (new_zeroed_alloc
#129396)
pub fn new_zeroed() -> Box<MaybeUninit>
new_zeroed_alloc
#129396)Constructs a new Box
with uninitialized contents, with the memory
being filled with 0
bytes.
See MaybeUninit::zeroed
for examples of correct and incorrect usage
of this method.
§Examples
1.33.0 · Sourcepub fn pin(x: T) -> Pin<Box>
pub fn pin(x: T) -> Pin<Box>
Constructs a new Pin
. If T
does not implement Unpin
, then
x
will be pinned in memory and unable to be moved.
Constructing and pinning of the Box
can also be done in two steps: Box::pin(x)
does the same as Box::into_pin(Box::new(x))
. Consider using
into_pin
if you already have a Box
, or if you want to
construct a (pinned) Box
in a different way than with Box::new
.
Sourcepub fn try_new(x: T) -> Result<Box, AllocError>
🔬This is a nightly-only experimental API. (allocator_api
#32838)
pub fn try_new(x: T) -> Result<Box, AllocError>
allocator_api
#32838)Allocates memory on the heap then places x
into it,
returning an error if the allocation fails
This doesn’t actually allocate if T
is zero-sized.
§Examples
Sourcepub fn try_new_uninit() -> Result<Box<MaybeUninit>, AllocError>
🔬This is a nightly-only experimental API. (allocator_api
#32838)
pub fn try_new_uninit() -> Result<Box<MaybeUninit>, AllocError>
allocator_api
#32838)Constructs a new box with uninitialized contents on the heap, returning an error if the allocation fails
§Examples
Sourcepub fn try_new_zeroed() -> Result<Box<MaybeUninit>, AllocError>
🔬This is a nightly-only experimental API. (allocator_api
#32838)
pub fn try_new_zeroed() -> Result<Box<MaybeUninit>, AllocError>
allocator_api
#32838)Constructs a new Box
with uninitialized contents, with the memory
being filled with 0
bytes on the heap
See MaybeUninit::zeroed
for examples of correct and incorrect usage
of this method.
§Examples
Source§impl Boxwhere
A: Allocator,
impl Boxwhere
A: Allocator,
Sourcepub fn new_in(x: T, alloc: A) -> Boxwhere
A: Allocator,
🔬This is a nightly-only experimental API. (allocator_api
#32838)
pub fn new_in(x: T, alloc: A) -> Boxwhere
A: Allocator,
allocator_api
#32838)Allocates memory in the given allocator then places x
into it.
This doesn’t actually allocate if T
is zero-sized.
§Examples
Sourcepub fn try_new_in(x: T, alloc: A) -> Result<Box, AllocError>where
A: Allocator,
🔬This is a nightly-only experimental API. (allocator_api
#32838)
pub fn try_new_in(x: T, alloc: A) -> Result<Box, AllocError>where
A: Allocator,
allocator_api
#32838)Allocates memory in the given allocator then places x
into it,
returning an error if the allocation fails
This doesn’t actually allocate if T
is zero-sized.
§Examples
Sourcepub fn new_uninit_in(alloc: A) -> Box<MaybeUninit, A>where
A: Allocator,
🔬This is a nightly-only experimental API. (allocator_api
#32838)
pub fn new_uninit_in(alloc: A) -> Box<MaybeUninit, A>where
A: Allocator,
allocator_api
#32838)Constructs a new box with uninitialized contents in the provided allocator.
§Examples
Sourcepub fn try_new_uninit_in(alloc: A) -> Result<Box<MaybeUninit, A>, AllocError>where
A: Allocator,
🔬This is a nightly-only experimental API. (allocator_api
#32838)
pub fn try_new_uninit_in(alloc: A) -> Result<Box<MaybeUninit, A>, AllocError>where
A: Allocator,
allocator_api
#32838)Constructs a new box with uninitialized contents in the provided allocator, returning an error if the allocation fails
§Examples
Sourcepub fn new_zeroed_in(alloc: A) -> Box<MaybeUninit, A>where
A: Allocator,
🔬This is a nightly-only experimental API. (allocator_api
#32838)
pub fn new_zeroed_in(alloc: A) -> Box<MaybeUninit, A>where
A: Allocator,
allocator_api
#32838)Constructs a new Box
with uninitialized contents, with the memory
being filled with 0
bytes in the provided allocator.
See MaybeUninit::zeroed
for examples of correct and incorrect usage
of this method.
§Examples
Sourcepub fn try_new_zeroed_in(alloc: A) -> Result<Box<MaybeUninit, A>, AllocError>where
A: Allocator,
🔬This is a nightly-only experimental API. (allocator_api
#32838)
pub fn try_new_zeroed_in(alloc: A) -> Result<Box<MaybeUninit, A>, AllocError>where
A: Allocator,
allocator_api
#32838)Constructs a new Box
with uninitialized contents, with the memory
being filled with 0
bytes in the provided allocator,
returning an error if the allocation fails,
See MaybeUninit::zeroed
for examples of correct and incorrect usage
of this method.
§Examples
Sourcepub fn pin_in(x: T, alloc: A) -> Pin<Box>where
A: 'static + Allocator,
🔬This is a nightly-only experimental API. (allocator_api
#32838)
pub fn pin_in(x: T, alloc: A) -> Pin<Box>where
A: 'static + Allocator,
allocator_api
#32838)Constructs a new Pin
. If T
does not implement Unpin
, then
x
will be pinned in memory and unable to be moved.
Constructing and pinning of the Box
can also be done in two steps: Box::pin_in(x, alloc)
does the same as Box::into_pin(Box::new_in(x, alloc))
. Consider using
into_pin
if you already have a Box
, or if you want to
construct a (pinned) Box
in a different way than with Box::new_in
.
Sourcepub fn into_boxed_slice(boxed: Box) -> Box<[T], A>
🔬This is a nightly-only experimental API. (box_into_boxed_slice
#71582)
pub fn into_boxed_slice(boxed: Box) -> Box<[T], A>
box_into_boxed_slice
#71582)Converts a Box
into a Box<[T]>
This conversion does not allocate on the heap and happens in place.
Sourcepub fn into_inner(boxed: Box) -> T
🔬This is a nightly-only experimental API. (box_into_inner
#80437)
pub fn into_inner(boxed: Box) -> T
box_into_inner
#80437)Consumes the Box
, returning the wrapped value.
§Examples
Source§impl Box<[T]>
impl Box<[T]>
1.82.0 · Sourcepub fn new_uninit_slice(len: usize) -> Box<[MaybeUninit]>
pub fn new_uninit_slice(len: usize) -> Box<[MaybeUninit]>
Constructs a new boxed slice with uninitialized contents.
§Examples
Sourcepub fn new_zeroed_slice(len: usize) -> Box<[MaybeUninit]>
🔬This is a nightly-only experimental API. (new_zeroed_alloc
#129396)
pub fn new_zeroed_slice(len: usize) -> Box<[MaybeUninit]>
new_zeroed_alloc
#129396)Constructs a new boxed slice with uninitialized contents, with the memory
being filled with 0
bytes.
See MaybeUninit::zeroed
for examples of correct and incorrect usage
of this method.
§Examples
Sourcepub fn try_new_uninit_slice(
len: usize,
) -> Result<Box<[MaybeUninit]>, AllocError>
🔬This is a nightly-only experimental API. (allocator_api
#32838)
pub fn try_new_uninit_slice(
len: usize,
) -> Result<Box<[MaybeUninit]>, AllocError>
allocator_api
#32838)Constructs a new boxed slice with uninitialized contents. Returns an error if the allocation fails.
§Examples
Sourcepub fn try_new_zeroed_slice(
len: usize,
) -> Result<Box<[MaybeUninit]>, AllocError>
🔬This is a nightly-only experimental API. (allocator_api
#32838)
pub fn try_new_zeroed_slice(
len: usize,
) -> Result<Box<[MaybeUninit]>, AllocError>
allocator_api
#32838)Constructs a new boxed slice with uninitialized contents, with the memory
being filled with 0
bytes. Returns an error if the allocation fails.
See MaybeUninit::zeroed
for examples of correct and incorrect usage
of this method.
§Examples
Sourcepub fn into_arrayusize>(self) -> Option<Box<[T; N]>>
🔬This is a nightly-only experimental API. (slice_as_array
#133508)
pub fn into_arrayusize>(self) -> Option<Box<[T; N]>>
slice_as_array
#133508)Converts the boxed slice into a boxed array.
This operation does not reallocate; the underlying array of the slice is simply reinterpreted as an array type.
If N
is not exactly equal to the length of self
, then this method returns None
.
Source§impl Box<[T], A>where
A: Allocator,
impl Box<[T], A>where
A: Allocator,
Sourcepub fn new_uninit_slice_in(len: usize, alloc: A) -> Box<[MaybeUninit], A>
🔬This is a nightly-only experimental API. (allocator_api
#32838)
pub fn new_uninit_slice_in(len: usize, alloc: A) -> Box<[MaybeUninit], A>
allocator_api
#32838)Constructs a new boxed slice with uninitialized contents in the provided allocator.
§Examples
Sourcepub fn new_zeroed_slice_in(len: usize, alloc: A) -> Box<[MaybeUninit], A>
🔬This is a nightly-only experimental API. (allocator_api
#32838)
pub fn new_zeroed_slice_in(len: usize, alloc: A) -> Box<[MaybeUninit], A>
allocator_api
#32838)Constructs a new boxed slice with uninitialized contents in the provided allocator,
with the memory being filled with 0
bytes.
See MaybeUninit::zeroed
for examples of correct and incorrect usage
of this method.
§Examples
Sourcepub fn try_new_uninit_slice_in(
len: usize,
alloc: A,
) -> Result<Box<[MaybeUninit], A>, AllocError>
🔬This is a nightly-only experimental API. (allocator_api
#32838)
pub fn try_new_uninit_slice_in(
len: usize,
alloc: A,
) -> Result<Box<[MaybeUninit], A>, AllocError>
allocator_api
#32838)Constructs a new boxed slice with uninitialized contents in the provided allocator. Returns an error if the allocation fails.
§Examples
Sourcepub fn try_new_zeroed_slice_in(
len: usize,
alloc: A,
) -> Result<Box<[MaybeUninit], A>, AllocError>
🔬This is a nightly-only experimental API. (allocator_api
#32838)
pub fn try_new_zeroed_slice_in(
len: usize,
alloc: A,
) -> Result<Box<[MaybeUninit], A>, AllocError>
allocator_api
#32838)Constructs a new boxed slice with uninitialized contents in the provided allocator, with the memory
being filled with 0
bytes. Returns an error if the allocation fails.
See MaybeUninit::zeroed
for examples of correct and incorrect usage
of this method.
§Examples
Source§impl Box<MaybeUninit, A>where
A: Allocator,
impl Box<MaybeUninit, A>where
A: Allocator,
1.82.0 · Sourcepub unsafe fn assume_init(self) -> Box
pub unsafe fn assume_init(self) -> Box
Converts to Box
.
§Safety
As with MaybeUninit::assume_init
,
it is up to the caller to guarantee that the value
really is in an initialized state.
Calling this when the content is not yet fully initialized
causes immediate undefined behavior.
§Examples
1.87.0 · Sourcepub fn write(boxed: Box<MaybeUninit, A>, value: T) -> Box
pub fn write(boxed: Box<MaybeUninit, A>, value: T) -> Box
Writes the value and converts to Box
.
This method converts the box similarly to Box::assume_init
but
writes value
into it before conversion thus guaranteeing safety.
In some scenarios use of this method may improve performance because
the compiler may be able to optimize copying from stack.
§Examples
let big_box = Box::<[usize; 1024]>::new_uninit();
let mut array = [0; 1024];
for (i, place) in array.iter_mut().enumerate() {
*place = i;
}
// The optimizer may be able to elide this copy, so previous code writes
// to heap directly.
let big_box = Box::write(big_box, array);
for (i, x) in big_box.iter().enumerate() {
assert_eq!(*x, i);
}
Source§impl Box<[MaybeUninit], A>where
A: Allocator,
impl Box<[MaybeUninit], A>where
A: Allocator,
1.82.0 · Sourcepub unsafe fn assume_init(self) -> Box<[T], A>
pub unsafe fn assume_init(self) -> Box<[T], A>
Converts to Box<[T], A>
.
§Safety
As with MaybeUninit::assume_init
,
it is up to the caller to guarantee that the values
really are in an initialized state.
Calling this when the content is not yet fully initialized
causes immediate undefined behavior.
§Examples
Source§impl Boxwhere
T: ?Sized,
impl Boxwhere
T: ?Sized,
1.4.0 · Sourcepub unsafe fn from_raw(raw: *mut T) -> Box
pub unsafe fn from_raw(raw: *mut T) -> Box
Constructs a box from a raw pointer.
After calling this function, the raw pointer is owned by the
resulting Box
. Specifically, the Box
destructor will call
the destructor of T
and free the allocated memory. For this
to be safe, the memory must have been allocated in accordance
with the memory layout used by Box
.
§Safety
This function is unsafe because improper use may lead to memory problems. For example, a double-free may occur if the function is called twice on the same raw pointer.
The raw pointer must point to a block of memory allocated by the global allocator.
The safety conditions are described in the memory layout section.
§Examples
Recreate a Box
which was previously converted to a raw pointer
using Box::into_raw
:
Manually create a Box
from scratch by using the global allocator:
use std::alloc::{alloc, Layout};
unsafe {
let ptr = alloc(Layout::new::()) as *mut i32;
// In general .write is required to avoid attempting to destruct
// the (uninitialized) previous contents of `ptr`, though for this
// simple example `*ptr = 5` would have worked as well.
ptr.write(5);
let x = Box::from_raw(ptr);
}
Sourcepub unsafe fn from_non_null(ptr: NonNull) -> Box
🔬This is a nightly-only experimental API. (box_vec_non_null
#130364)
pub unsafe fn from_non_null(ptr: NonNull) -> Box
box_vec_non_null
#130364)Constructs a box from a NonNull
pointer.
After calling this function, the NonNull
pointer is owned by
the resulting Box
. Specifically, the Box
destructor will call
the destructor of T
and free the allocated memory. For this
to be safe, the memory must have been allocated in accordance
with the memory layout used by Box
.
§Safety
This function is unsafe because improper use may lead to
memory problems. For example, a double-free may occur if the
function is called twice on the same NonNull
pointer.
The non-null pointer must point to a block of memory allocated by the global allocator.
The safety conditions are described in the memory layout section.
§Examples
Recreate a Box
which was previously converted to a NonNull
pointer using Box::into_non_null
:
#![feature(box_vec_non_null)]
let x = Box::new(5);
let non_null = Box::into_non_null(x);
let x = unsafe { Box::from_non_null(non_null) };
Manually create a Box
from scratch by using the global allocator:
#![feature(box_vec_non_null)]
use std::alloc::{alloc, Layout};
use std::ptr::NonNull;
unsafe {
let non_null = NonNull::new(alloc(Layout::new::()).cast::())
.expect("allocation failed");
// In general .write is required to avoid attempting to destruct
// the (uninitialized) previous contents of `non_null`.
non_null.write(5);
let x = Box::from_non_null(non_null);
}
Source§impl Box
impl Box
Sourcepub unsafe fn from_raw_in(raw: *mut T, alloc: A) -> Box
🔬This is a nightly-only experimental API. (allocator_api
#32838)
pub unsafe fn from_raw_in(raw: *mut T, alloc: A) -> Box
allocator_api
#32838)Constructs a box from a raw pointer in the given allocator.
After calling this function, the raw pointer is owned by the
resulting Box
. Specifically, the Box
destructor will call
the destructor of T
and free the allocated memory. For this
to be safe, the memory must have been allocated in accordance
with the memory layout used by Box
.
§Safety
This function is unsafe because improper use may lead to memory problems. For example, a double-free may occur if the function is called twice on the same raw pointer.
The raw pointer must point to a block of memory allocated by alloc
.
§Examples
Recreate a Box
which was previously converted to a raw pointer
using Box::into_raw_with_allocator
:
#![feature(allocator_api)]
use std::alloc::System;
let x = Box::new_in(5, System);
let (ptr, alloc) = Box::into_raw_with_allocator(x);
let x = unsafe { Box::from_raw_in(ptr, alloc) };
Manually create a Box
from scratch by using the system allocator:
#![feature(allocator_api, slice_ptr_get)]
use std::alloc::{Allocator, Layout, System};
unsafe {
let ptr = System.allocate(Layout::new::())?.as_mut_ptr() as *mut i32;
// In general .write is required to avoid attempting to destruct
// the (uninitialized) previous contents of `ptr`, though for this
// simple example `*ptr = 5` would have worked as well.
ptr.write(5);
let x = Box::from_raw_in(ptr, System);
}
Sourcepub unsafe fn from_non_null_in(raw: NonNull, alloc: A) -> Box
🔬This is a nightly-only experimental API. (allocator_api
#32838)
pub unsafe fn from_non_null_in(raw: NonNull, alloc: A) -> Box
allocator_api
#32838)Constructs a box from a NonNull
pointer in the given allocator.
After calling this function, the NonNull
pointer is owned by
the resulting Box
. Specifically, the Box
destructor will call
the destructor of T
and free the allocated memory. For this
to be safe, the memory must have been allocated in accordance
with the memory layout used by Box
.
§Safety
This function is unsafe because improper use may lead to memory problems. For example, a double-free may occur if the function is called twice on the same raw pointer.
The non-null pointer must point to a block of memory allocated by alloc
.
§Examples
Recreate a Box
which was previously converted to a NonNull
pointer
using Box::into_non_null_with_allocator
:
#![feature(allocator_api, box_vec_non_null)]
use std::alloc::System;
let x = Box::new_in(5, System);
let (non_null, alloc) = Box::into_non_null_with_allocator(x);
let x = unsafe { Box::from_non_null_in(non_null, alloc) };
Manually create a Box
from scratch by using the system allocator:
#![feature(allocator_api, box_vec_non_null, slice_ptr_get)]
use std::alloc::{Allocator, Layout, System};
unsafe {
let non_null = System.allocate(Layout::new::())?.cast::();
// In general .write is required to avoid attempting to destruct
// the (uninitialized) previous contents of `non_null`.
non_null.write(5);
let x = Box::from_non_null_in(non_null, System);
}
1.4.0 · Sourcepub fn into_raw(b: Box) -> *mut T
pub fn into_raw(b: Box) -> *mut T
Consumes the Box
, returning a wrapped raw pointer.
The pointer will be properly aligned and non-null.
After calling this function, the caller is responsible for the
memory previously managed by the Box
. In particular, the
caller should properly destroy T
and release the memory, taking
into account the memory layout used by Box
. The easiest way to
do this is to convert the raw pointer back into a Box
with the
Box::from_raw
function, allowing the Box
destructor to perform
the cleanup.
Note: this is an associated function, which means that you have
to call it as Box::into_raw(b)
instead of b.into_raw()
. This
is so that there is no conflict with a method on the inner type.
§Examples
Converting the raw pointer back into a Box
with Box::from_raw
for automatic cleanup:
let x = Box::new(String::from("Hello"));
let ptr = Box::into_raw(x);
let x = unsafe { Box::from_raw(ptr) };
Manual cleanup by explicitly running the destructor and deallocating the memory:
use std::alloc::{dealloc, Layout};
use std::ptr;
let x = Box::new(String::from("Hello"));
let ptr = Box::into_raw(x);
unsafe {
ptr::drop_in_place(ptr);
dealloc(ptr as *mut u8, Layout::new::());
}
Note: This is equivalent to the following:
Sourcepub fn into_non_null(b: Box) -> NonNull
🔬This is a nightly-only experimental API. (box_vec_non_null
#130364)
pub fn into_non_null(b: Box) -> NonNull
box_vec_non_null
#130364)Consumes the Box
, returning a wrapped NonNull
pointer.
The pointer will be properly aligned.
After calling this function, the caller is responsible for the
memory previously managed by the Box
. In particular, the
caller should properly destroy T
and release the memory, taking
into account the memory layout used by Box
. The easiest way to
do this is to convert the NonNull
pointer back into a Box
with the
Box::from_non_null
function, allowing the Box
destructor to
perform the cleanup.
Note: this is an associated function, which means that you have
to call it as Box::into_non_null(b)
instead of b.into_non_null()
.
This is so that there is no conflict with a method on the inner type.
§Examples
Converting the NonNull
pointer back into a Box
with Box::from_non_null
for automatic cleanup:
#![feature(box_vec_non_null)]
let x = Box::new(String::from("Hello"));
let non_null = Box::into_non_null(x);
let x = unsafe { Box::from_non_null(non_null) };
Manual cleanup by explicitly running the destructor and deallocating the memory:
#![feature(box_vec_non_null)]
use std::alloc::{dealloc, Layout};
let x = Box::new(String::from("Hello"));
let non_null = Box::into_non_null(x);
unsafe {
non_null.drop_in_place();
dealloc(non_null.as_ptr().cast::(), Layout::new::());
}
Note: This is equivalent to the following:
Sourcepub fn into_raw_with_allocator(b: Box) -> (*mut T, A)
🔬This is a nightly-only experimental API. (allocator_api
#32838)
pub fn into_raw_with_allocator(b: Box) -> (*mut T, A)
allocator_api
#32838)Consumes the Box
, returning a wrapped raw pointer and the allocator.
The pointer will be properly aligned and non-null.
After calling this function, the caller is responsible for the
memory previously managed by the Box
. In particular, the
caller should properly destroy T
and release the memory, taking
into account the memory layout used by Box
. The easiest way to
do this is to convert the raw pointer back into a Box
with the
Box::from_raw_in
function, allowing the Box
destructor to perform
the cleanup.
Note: this is an associated function, which means that you have
to call it as Box::into_raw_with_allocator(b)
instead of b.into_raw_with_allocator()
. This
is so that there is no conflict with a method on the inner type.
§Examples
Converting the raw pointer back into a Box
with Box::from_raw_in
for automatic cleanup:
#![feature(allocator_api)]
use std::alloc::System;
let x = Box::new_in(String::from("Hello"), System);
let (ptr, alloc) = Box::into_raw_with_allocator(x);
let x = unsafe { Box::from_raw_in(ptr, alloc) };
Manual cleanup by explicitly running the destructor and deallocating the memory:
#![feature(allocator_api)]
use std::alloc::{Allocator, Layout, System};
use std::ptr::{self, NonNull};
let x = Box::new_in(String::from("Hello"), System);
let (ptr, alloc) = Box::into_raw_with_allocator(x);
unsafe {
ptr::drop_in_place(ptr);
let non_null = NonNull::new_unchecked(ptr);
alloc.deallocate(non_null.cast(), Layout::new::());
}
Sourcepub fn into_non_null_with_allocator(b: Box) -> (NonNull, A)
🔬This is a nightly-only experimental API. (allocator_api
#32838)
pub fn into_non_null_with_allocator(b: Box) -> (NonNull, A)
allocator_api
#32838)Consumes the Box
, returning a wrapped NonNull
pointer and the allocator.
The pointer will be properly aligned.
After calling this function, the caller is responsible for the
memory previously managed by the Box
. In particular, the
caller should properly destroy T
and release the memory, taking
into account the memory layout used by Box
. The easiest way to
do this is to convert the NonNull
pointer back into a Box
with the
Box::from_non_null_in
function, allowing the Box
destructor to
perform the cleanup.
Note: this is an associated function, which means that you have
to call it as Box::into_non_null_with_allocator(b)
instead of
b.into_non_null_with_allocator()
. This is so that there is no
conflict with a method on the inner type.
§Examples
Converting the NonNull
pointer back into a Box
with
Box::from_non_null_in
for automatic cleanup:
#![feature(allocator_api, box_vec_non_null)]
use std::alloc::System;
let x = Box::new_in(String::from("Hello"), System);
let (non_null, alloc) = Box::into_non_null_with_allocator(x);
let x = unsafe { Box::from_non_null_in(non_null, alloc) };
Manual cleanup by explicitly running the destructor and deallocating the memory:
Sourcepub fn as_mut_ptr(b: &mut Box) -> *mut T
🔬This is a nightly-only experimental API. (box_as_ptr
#129090)
pub fn as_mut_ptr(b: &mut Box) -> *mut T
box_as_ptr
#129090)Returns a raw mutable pointer to the Box
’s contents.
The caller must ensure that the Box
outlives the pointer this
function returns, or else it will end up dangling.
This method guarantees that for the purpose of the aliasing model, this method
does not materialize a reference to the underlying memory, and thus the returned pointer
will remain valid when mixed with other calls to as_ptr
and as_mut_ptr
.
Note that calling other methods that materialize references to the memory
may still invalidate this pointer.
See the example below for how this guarantee can be used.
§Examples
Due to the aliasing guarantee, the following code is legal:
Sourcepub fn as_ptr(b: &Box) -> *const T
🔬This is a nightly-only experimental API. (box_as_ptr
#129090)
pub fn as_ptr(b: &Box) -> *const T
box_as_ptr
#129090)Returns a raw pointer to the Box
’s contents.
The caller must ensure that the Box
outlives the pointer this
function returns, or else it will end up dangling.
The caller must also ensure that the memory the pointer (non-transitively) points to
is never written to (except inside an UnsafeCell
) using this pointer or any pointer
derived from it. If you need to mutate the contents of the Box
, use as_mut_ptr
.
This method guarantees that for the purpose of the aliasing model, this method
does not materialize a reference to the underlying memory, and thus the returned pointer
will remain valid when mixed with other calls to as_ptr
and as_mut_ptr
.
Note that calling other methods that materialize mutable references to the memory,
as well as writing to this memory, may still invalidate this pointer.
See the example below for how this guarantee can be used.
§Examples
Due to the aliasing guarantee, the following code is legal:
#![feature(box_as_ptr)]
unsafe {
let mut v = Box::new(0);
let ptr1 = Box::as_ptr(&v);
let ptr2 = Box::as_mut_ptr(&mut v);
let _val = ptr2.read();
// No write to this memory has happened yet, so `ptr1` is still valid.
let _val = ptr1.read();
// However, once we do a write...
ptr2.write(1);
// ... `ptr1` is no longer valid.
// This would be UB: let _val = ptr1.read();
}
Sourcepub fn allocator(b: &Box) -> &A
🔬This is a nightly-only experimental API. (allocator_api
#32838)
pub fn allocator(b: &Box) -> &A
allocator_api
#32838)Returns a reference to the underlying allocator.
Note: this is an associated function, which means that you have
to call it as Box::allocator(&b)
instead of b.allocator()
. This
is so that there is no conflict with a method on the inner type.
1.26.0 · Sourcepub fn leak<'a>(b: Box) -> &'a mut Twhere
A: 'a,
pub fn leak<'a>(b: Box) -> &'a mut Twhere
A: 'a,
Consumes and leaks the Box
, returning a mutable reference,
&'a mut T
.
Note that the type T
must outlive the chosen lifetime 'a
. If the type
has only static references, or none at all, then this may be chosen to be
'static
.
This function is mainly useful for data that lives for the remainder of
the program’s life. Dropping the returned reference will cause a memory
leak. If this is not acceptable, the reference should first be wrapped
with the Box::from_raw
function producing a Box
. This Box
can
then be dropped which will properly destroy T
and release the
allocated memory.
Note: this is an associated function, which means that you have
to call it as Box::leak(b)
instead of b.leak()
. This
is so that there is no conflict with a method on the inner type.
§Examples
Simple usage:
let x = Box::new(41);
let static_ref: &'static mut usize = Box::leak(x);
*static_ref += 1;
assert_eq!(*static_ref, 42);
Unsized data:
1.63.0 · Sourcepub fn into_pin(boxed: Box) -> Pin<Box>where
A: 'static,
pub fn into_pin(boxed: Box) -> Pin<Box>where
A: 'static,
Converts a Box
into a Pin
. If T
does not implement Unpin
, then
*boxed
will be pinned in memory and unable to be moved.
This conversion does not allocate on the heap and happens in place.
This is also available via From
.
Constructing and pinning a Box
with Box::into_pin(Box::new(x))
can also be written more concisely using Box::pin(x)
.
This into_pin
method is useful if you already have a Box
, or you are
constructing a (pinned) Box
in a different way than with Box::new
.
§Notes
It’s not recommended that crates add an impl like From
,
as it’ll introduce an ambiguity when calling Pin::from
.
A demonstration of such a poor impl is shown below.
struct Foo; // A type defined in this crate.
impl From> for Pin {
fn from(_: Box<()>) -> Pin {
Pin::new(Foo)
}
}
let foo = Box::new(());
let bar = Pin::from(foo);
Trait Implementations§
1.64.0 · Source§implAsFd + ?Sized> AsFd for Box
implAsFd + ?Sized> AsFd for Box
Source§fn as_fd(&self) -> BorrowedFd<'_>
fn as_fd(&self) -> BorrowedFd<'_>
1.71.0 · Source§implAsHandle + ?Sized> AsHandle for Box
Available on Windows only.
implAsHandle + ?Sized> AsHandle for Box
Source§fn as_handle(&self) -> BorrowedHandle<'_>
fn as_handle(&self) -> BorrowedHandle<'_>
1.71.0 · Source§implAsSocket> AsSocket for Box
Available on Windows only.
implAsSocket> AsSocket for Box
Source§fn as_socket(&self) -> BorrowedSocket<'_>
fn as_socket(&self) -> BorrowedSocket<'_>
1.85.0 · Source§impl AsyncFn for Box
impl AsyncFn for Box
Source§extern "rust-call" fn async_call(
&self,
args: Args,
) -> <Box as AsyncFnMut>::CallRefFuture<'_>
extern "rust-call" fn async_call(
&self,
args: Args,
) -> <Box as AsyncFnMut>::CallRefFuture<'_>
async_fn_traits
)AsyncFn
, returning a future which may borrow from the called closure.1.85.0 · Source§impl AsyncFnMut for Box
impl AsyncFnMut for Box
Source§type CallRefFuture<'a> = AsyncFnMut>::CallRefFuture<'a>
where
Box: 'a
type CallRefFuture<'a> = AsyncFnMut>::CallRefFuture<'a>
where
Box: 'a
async_fn_traits
)AsyncFnMut::async_call_mut
and AsyncFn::async_call
.Source§extern "rust-call" fn async_call_mut(
&mut self,
args: Args,
) -> <Box as AsyncFnMut>::CallRefFuture<'_>
extern "rust-call" fn async_call_mut(
&mut self,
args: Args,
) -> <Box as AsyncFnMut>::CallRefFuture<'_>
async_fn_traits
)AsyncFnMut
, returning a future which may borrow from the called closure.1.85.0 · Source§impl AsyncFnOnce for Box
impl AsyncFnOnce for Box
Source§type Output = AsyncFnOnce>::Output
type Output = AsyncFnOnce>::Output
async_fn_traits
)Source§type CallOnceFuture = AsyncFnOnce>::CallOnceFuture
type CallOnceFuture = AsyncFnOnce>::CallOnceFuture
async_fn_traits
)AsyncFnOnce::async_call_once
.Source§extern "rust-call" fn async_call_once(
self,
args: Args,
) -> <Box as AsyncFnOnce>::CallOnceFuture
extern "rust-call" fn async_call_once(
self,
args: Args,
) -> <Box as AsyncFnOnce>::CallOnceFuture
async_fn_traits
)AsyncFnOnce
, returning a future which may move out of the called closure.Source§impl AsyncIterator for Box
impl AsyncIterator for Box
Source§type Item = AsyncIterator>::Item
type Item = AsyncIterator>::Item
async_iterator
#79024)Source§fn poll_next(
self: Pin<&mut Box>,
cx: &mut Context<'_>,
) -> Poll<Option<<Box as AsyncIterator>::Item>>
fn poll_next(
self: Pin<&mut Box>,
cx: &mut Context<'_>,
) -> Poll<Option<<Box as AsyncIterator>::Item>>
async_iterator
#79024)None
if the async iterator is exhausted. Read more1.1.0 · Source§impl BorrowMut for Box
impl BorrowMut for Box
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
1.0.0 · Source§implBufRead + ?Sized> BufRead for Box
implBufRead + ?Sized> BufRead for Box
Source§fn fill_buf(&mut self) -> Result<&[u8]>
fn fill_buf(&mut self) -> Result<&[u8]>
Read
methods, if empty. Read moreSource§fn consume(&mut self, amt: usize)
fn consume(&mut self, amt: usize)
amount
of additional bytes from the internal buffer as having been read.
Subsequent calls to read
only return bytes that have not been marked as read. Read moreSource§fn has_data_left(&mut self) -> Result<bool>
fn has_data_left(&mut self) -> Result<bool>
buf_read_has_data_left
#86423)read
. Read moreSource§fn skip_until(&mut self, byte: u8) -> Result<usize>
fn skip_until(&mut self, byte: u8) -> Result<usize>
byte
or EOF is reached. Read moreSource§fn read_line(&mut self, buf: &mut String) -> Result<usize>
fn read_line(&mut self, buf: &mut String) -> Result<usize>
0xA
byte) is reached, and append
them to the provided String
buffer. Read more1.3.0 · Source§impl Clone for Box<[T], A>
impl Clone for Box<[T], A>
1.0.0 · Source§impl Clone for Box
impl Clone for Box
Source§impl Coroutine for Box
impl Coroutine for Box
Source§type Yield = Coroutine>::Yield
type Yield = Coroutine>::Yield
coroutine_trait
#43122)Source§impl Coroutine for Pin<Box>
impl Coroutine for Pin<Box>
Source§type Yield = Coroutine>::Yield
type Yield = Coroutine>::Yield
coroutine_trait
#43122)1.0.0 · Source§impl DoubleEndedIterator for Box
impl DoubleEndedIterator for Box
Source§fn next_back(&mut self) -> Option<Iterator>::Item>
fn next_back(&mut self) -> Option<Iterator>::Item>
Source§fn nth_back(&mut self, n: usize) -> Option<Iterator>::Item>
fn nth_back(&mut self, n: usize) -> Option<Iterator>::Item>
n
th element from the end of the iterator. Read moreSource§fn advance_back_by(&mut self, n: usize) -> Result<(), NonZero<usize>>
fn advance_back_by(&mut self, n: usize) -> Result<(), NonZero<usize>>
iter_advance_by
#77404)n
elements. Read more1.27.0 · Source§fn try_rfold(&mut self, init: B, f: F) -> R
fn try_rfold(&mut self, init: B, f: F) -> R
Iterator::try_fold()
: it takes
elements starting from the back of the iterator. Read more1.8.0 · Source§impl Error for Boxwhere
E: Error,
impl Error for Boxwhere
E: Error,
Source§fn description(&self) -> &str
fn description(&self) -> &str
Source§fn cause(&self) -> Option<&dyn Error>
fn cause(&self) -> Option<&dyn Error>
1.0.0 · Source§impl ExactSizeIterator for Box
impl ExactSizeIterator for Box
1.45.0 · Source§impl Extend<Box<str, A>> for Stringwhere
A: Allocator,
impl Extend<Box<str, A>> for Stringwhere
A: Allocator,
Source§fn extend(&mut self, iter: I)where
I: IntoIterator- Box<str, A>>,
fn extend(&mut self, iter: I)where
I: IntoIterator- Box<str, A>>,
Source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one
#72631)1.17.0 · Source§impl From<&[T]> for Box<[T]>where
T: Clone,
impl From<&[T]> for Box<[T]>where
T: Clone,
1.84.0 · Source§impl From<&mut [T]> for Box<[T]>where
T: Clone,
impl From<&mut [T]> for Box<[T]>where
T: Clone,
1.0.0 · Source§impl<'a> From<&str> for BoxError + Sync + Send + 'a>
impl<'a> From<&str> for BoxError + Sync + Send + 'a>
1.33.0 · Source§impl From<Box> for Pin<Box>
impl From<Box> for Pin<Box>
Source§fn from(boxed: Box) -> Pin<Box>
fn from(boxed: Box) -> Pin<Box>
Converts a Box
into a Pin
. If T
does not implement Unpin
, then
*boxed
will be pinned in memory and unable to be moved.
This conversion does not allocate on the heap and happens in place.
This is also available via Box::into_pin
.
Constructing and pinning a Box
with
can also be written more concisely using Box::pin(x)
.
This From
implementation is useful if you already have a Box
, or you are
constructing a (pinned) Box
in a different way than with Box::new
.
1.19.0 · Source§impl From<Box<str, A>> for Box<[u8], A>where
A: Allocator,
impl From<Box<str, A>> for Box<[u8], A>where
A: Allocator,
Source§fn from(s: Box<str, A>) -> Box<[u8], A>
fn from(s: Box<str, A>) -> Box<[u8], A>
Converts a Box
into a Box<[u8]>
This conversion does not allocate on the heap and happens in place.
§Examples
// create a Box which will be used to create a Box<[u8]>
let boxed: Box = Box::from("hello");
let boxed_str: Box<[u8]> = Box::from(boxed);
// create a &[u8] which will be used to create a Box<[u8]>
let slice: &[u8] = &[104, 101, 108, 108, 111];
let boxed_slice = Box::from(slice);
assert_eq!(boxed_slice, boxed_str);
1.45.0 · Source§impl From<Cow<'_, str>> for Box<str>
impl From<Cow<'_, str>> for Box<str>
Source§fn from(cow: Cow<'_, str>) -> Box<str>
fn from(cow: Cow<'_, str>) -> Box<str>
Converts a Cow<'_, str>
into a Box
When cow
is the Cow::Borrowed
variant, this
conversion allocates on the heap and copies the
underlying str
. Otherwise, it will try to reuse the owned
String
’s allocation.
§Examples
1.22.0 · Source§impl<'a, 'b> From<Cow<'b, str>> for BoxError + 'a>
impl<'a, 'b> From<Cow<'b, str>> for BoxError + 'a>
1.22.0 · Source§impl<'a, 'b> From<Cow<'b, str>> for BoxError + Sync + Send + 'a>
impl<'a, 'b> From<Cow<'b, str>> for BoxError + Sync + Send + 'a>
1.0.0 · Source§impl<'a, E> From for BoxError + 'a>where
E: Error + 'a,
impl<'a, E> From for BoxError + 'a>where
E: Error + 'a,
Source§fn from(err: E) -> BoxError + 'a>
fn from(err: E) -> BoxError + 'a>
Converts a type of Error
into a box of dyn Error
.
§Examples
use std::error::Error;
use std::fmt;
#[derive(Debug)]
struct AnError;
impl fmt::Display for AnError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "An error")
}
}
impl Error for AnError {}
let an_error = AnError;
assert!(0 == size_of_val(&an_error));
let a_boxed_error = Box::<dyn Error>::from(an_error);
assert!(size_of::dyn Error>>() == size_of_val(&a_boxed_error))
1.0.0 · Source§impl<'a, E> From for BoxError + Sync + Send + 'a>
impl<'a, E> From for BoxError + Sync + Send + 'a>
Source§fn from(err: E) -> BoxError + Sync + Send + 'a>
fn from(err: E) -> BoxError + Sync + Send + 'a>
Converts a type of Error
+ Send
+ Sync
into a box of
dyn Error
+ Send
+ Sync
.
§Examples
use std::error::Error;
use std::fmt;
#[derive(Debug)]
struct AnError;
impl fmt::Display for AnError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "An error")
}
}
impl Error for AnError {}
unsafe impl Send for AnError {}
unsafe impl Sync for AnError {}
let an_error = AnError;
assert!(0 == size_of_val(&an_error));
let a_boxed_error = Box::<dyn Error + Send + Sync>::from(an_error);
assert!(
size_of::dyn Error + Send + Sync>>() == size_of_val(&a_boxed_error))
1.0.0 · Source§impl<'a> From<String> for BoxError + Sync + Send + 'a>
impl<'a> From<String> for BoxError + Sync + Send + 'a>
1.20.0 · Source§impl From<Vec> for Box<[T], A>where
A: Allocator,
impl From<Vec> for Box<[T], A>where
A: Allocator,
1.32.0 · Source§impl FromIterator for Box<[I]>
impl FromIterator for Box<[I]>
1.22.0 · Source§impl Hasher for Box
impl Hasher for Box
Source§fn write_u128(&mut self, i: u128)
fn write_u128(&mut self, i: u128)
u128
into this hasher.Source§fn write_usize(&mut self, i: usize)
fn write_usize(&mut self, i: usize)
usize
into this hasher.Source§fn write_i128(&mut self, i: i128)
fn write_i128(&mut self, i: i128)
i128
into this hasher.Source§fn write_isize(&mut self, i: isize)
fn write_isize(&mut self, i: isize)
isize
into this hasher.1.0.0 · Source§impl Iterator for Box
impl Iterator for Box
Source§fn next(&mut self) -> Option<Iterator>::Item>
fn next(&mut self) -> Option<Iterator>::Item>
Source§fn size_hint(&self) -> (usize, Option<usize>)
fn size_hint(&self) -> (usize, Option<usize>)
Source§fn nth(&mut self, n: usize) -> Option<Iterator>::Item>
fn nth(&mut self, n: usize) -> Option<Iterator>::Item>
n
th element of the iterator. Read moreSource§fn last(self) -> Option<Iterator>::Item>
fn last(self) -> Option<Iterator>::Item>
Source§fn next_chunkusize>(
&mut self,
) -> Result<[Self::Item; N], IntoIterItem, N>>where
Self: Sized,
fn next_chunkusize>(
&mut self,
) -> Result<[Self::Item; N], IntoIterItem, N>>where
Self: Sized,
iter_next_chunk
#98326)N
values. Read more1.0.0 · Source§fn count(self) -> usizewhere
Self: Sized,
fn count(self) -> usizewhere
Self: Sized,
Source§fn advance_by(&mut self, n: usize) -> Result<(), NonZero<usize>>
fn advance_by(&mut self, n: usize) -> Result<(), NonZero<usize>>
iter_advance_by
#77404)n
elements. Read more1.28.0 · Source§fn step_by(self, step: usize) -> StepBy ⓘwhere
Self: Sized,
fn step_by(self, step: usize) -> StepBy ⓘwhere
Self: Sized,
1.0.0 · Source§fn chain(self, other: U) -> ChainIntoIterator>::IntoIter> ⓘ
fn chain(self, other: U) -> ChainIntoIterator>::IntoIter> ⓘ
1.0.0 · Source§fn zip(self, other: U) -> ZipIntoIterator>::IntoIter> ⓘwhere
Self: Sized,
U: IntoIterator,
fn zip(self, other: U) -> ZipIntoIterator>::IntoIter> ⓘwhere
Self: Sized,
U: IntoIterator,
Source§fn intersperse(self, separator: Self::Item) -> Intersperse ⓘ
fn intersperse(self, separator: Self::Item) -> Intersperse ⓘ
iter_intersperse
#79524)separator
between adjacent
items of the original iterator. Read moreSource§fn intersperse_with(self, separator: G) -> IntersperseWith ⓘ
fn intersperse_with(self, separator: G) -> IntersperseWith ⓘ
iter_intersperse
#79524)separator
between adjacent items of the original iterator. Read more1.0.0 · Source§fn map(self, f: F) -> Map ⓘ
fn map(self, f: F) -> Map ⓘ
1.0.0 · Source§fn filter
fn filter
1.0.0 · Source§fn filter_map(self, f: F) -> FilterMap ⓘ
fn filter_map(self, f: F) -> FilterMap ⓘ
1.0.0 · Source§fn enumerate(self) -> Enumerate ⓘwhere
Self: Sized,
fn enumerate(self) -> Enumerate ⓘwhere
Self: Sized,
1.0.0 · Source§fn skip_while
fn skip_while
1.0.0 · Source§fn take_while
fn take_while
1.57.0 · Source§fn map_while(self, predicate: P) -> MapWhile ⓘ
fn map_while(self, predicate: P) -> MapWhile ⓘ
1.0.0 · Source§fn skip(self, n: usize) -> Skip ⓘwhere
Self: Sized,
fn skip(self, n: usize) -> Skip ⓘwhere
Self: Sized,
n
elements. Read more1.0.0 · Source§fn take(self, n: usize) -> Take ⓘwhere
Self: Sized,
fn take(self, n: usize) -> Take ⓘwhere
Self: Sized,
n
elements, or fewer
if the underlying iterator ends sooner. Read more1.0.0 · Source§fn flat_map(self, f: F) -> FlatMap ⓘ
fn flat_map(self, f: F) -> FlatMap ⓘ
1.29.0 · Source§fn flatten(self) -> Flatten ⓘ
fn flatten(self) -> Flatten ⓘ
Source§fn map_windowsusize>(self, f: F) -> MapWindows ⓘ
fn map_windowsusize>(self, f: F) -> MapWindows ⓘ
iter_map_windows
#87155)f
for each contiguous window of size N
over
self
and returns an iterator over the outputs of f
. Like slice::windows()
,
the windows during mapping overlap as well. Read more1.0.0 · Source§fn inspect(self, f: F) -> Inspect ⓘ
fn inspect(self, f: F) -> Inspect ⓘ
1.0.0 · Source§fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
Iterator
. Read more1.0.0 · Source§fn collect(self) -> Bwhere
B: FromIteratorItem>,
Self: Sized,
fn collect(self) -> Bwhere
B: FromIteratorItem>,
Self: Sized,
Source§fn try_collect(
&mut self,
) -> <Item as Try>::Residual as Residual>::TryType
fn try_collect(
&mut self,
) -> <Item as Try>::Residual as Residual>::TryType
iterator_try_collect
#94047)Source§fn collect_into(self, collection: &mut E) -> &mut E
fn collect_into(self, collection: &mut E) -> &mut E
iter_collect_into
#94780)1.0.0 · Source§fn partition(self, f: F) -> (B, B)
fn partition(self, f: F) -> (B, B)
Source§fn partition_in_place<'a, T, P>(self, predicate: P) -> usize
fn partition_in_place<'a, T, P>(self, predicate: P) -> usize
iter_partition_in_place
#62543)true
precede all those that return false
.
Returns the number of true
elements found. Read moreSource§fn is_partitioned
(self, predicate: P) -> bool
fn is_partitioned
(self, predicate: P) -> bool
iter_is_partitioned
#62544)true
precede all those that return false
. Read more1.27.0 · Source§fn try_fold(&mut self, init: B, f: F) -> R
fn try_fold(&mut self, init: B, f: F) -> R
1.27.0 · Source§fn try_for_each(&mut self, f: F) -> R
fn try_for_each(&mut self, f: F) -> R
1.0.0 · Source§fn fold(self, init: B, f: F) -> B
fn fold(self, init: B, f: F) -> B
1.51.0 · Source§fn reduce(self, f: F) -> OptionItem>
fn reduce(self, f: F) -> OptionItem>
Source§fn try_reduce(
&mut self,
f: impl FnMut(Self::Item, Self::Item) -> R,
) -> <Try>::Residual as Residual<Option<Try>::Output>>>::TryType
fn try_reduce(
&mut self,
f: impl FnMut(Self::Item, Self::Item) -> R,
) -> <Try>::Residual as Residual<Option<Try>::Output>>>::TryType
iterator_try_reduce
#87053)1.0.0 · Source§fn all(&mut self, f: F) -> bool
fn all(&mut self, f: F) -> bool
1.0.0 · Source§fn any(&mut self, f: F) -> bool
fn any(&mut self, f: F) -> bool
1.0.0 · Source§fn find
(&mut self, predicate: P) -> OptionItem>
fn find
(&mut self, predicate: P) -> Option
1.30.0 · Source§fn find_map(&mut self, f: F) -> Option
fn find_map(&mut self, f: F) -> Option
Source§fn try_find(
&mut self,
f: impl FnMut(&Self::Item) -> R,
) -> <Try>::Residual as Residual<OptionItem>>>::TryType
fn try_find(
&mut self,
f: impl FnMut(&Self::Item) -> R,
) -> <Try>::Residual as Residual<OptionItem>>>::TryType
try_find
#63178)1.0.0 · Source§fn rposition
fn rposition
1.6.0 · Source§fn max_by_key(self, f: F) -> OptionItem>
fn max_by_key(self, f: F) -> OptionItem>
1.15.0 · Source§fn max_by(self, compare: F) -> OptionItem>
fn max_by(self, compare: F) -> OptionItem>
1.6.0 · Source§fn min_by_key(self, f: F) -> OptionItem>
fn min_by_key(self, f: F) -> OptionItem>
1.15.0 · Source§fn min_by(self, compare: F) -> OptionItem>
fn min_by(self, compare: F) -> OptionItem>
1.0.0 · Source§fn rev(self) -> Rev ⓘwhere
Self: Sized + DoubleEndedIterator,
fn rev(self) -> Rev ⓘwhere
Self: Sized + DoubleEndedIterator,
1.0.0 · Source§fn unzip(self) -> (FromA, FromB)
fn unzip(self) -> (FromA, FromB)
1.36.0 · Source§fn copied<'a, T>(self) -> Copied ⓘ
fn copied<'a, T>(self) -> Copied ⓘ
Source§fn array_chunksusize>(self) -> ArrayChunks ⓘwhere
Self: Sized,
fn array_chunksusize>(self) -> ArrayChunks ⓘwhere
Self: Sized,
iter_array_chunks
#100450)N
elements of the iterator at a time. Read more1.11.0 · Source§fn product
(self) -> P
fn product
(self) -> P
1.5.0 · Source§fn cmp(self, other: I) -> Orderingwhere
I: IntoIterator- Item>,
Self::Item: Ord,
Self: Sized,
fn cmp(self, other: I) -> Orderingwhere
I: IntoIterator- Item>,
Self::Item: Ord,
Self: Sized,
Source§fn cmp_by(self, other: I, cmp: F) -> Ordering
fn cmp_by(self, other: I, cmp: F) -> Ordering
iter_order_by
#64295)Iterator
with those
of another with respect to the specified comparison function. Read more1.5.0 · Source§fn partial_cmp(self, other: I) -> Option<Ordering>
fn partial_cmp(self, other: I) -> Option<Ordering>
PartialOrd
elements of
this Iterator
with those of another. The comparison works like short-circuit
evaluation, returning a result without comparing the remaining elements.
As soon as an order can be determined, the evaluation stops and a result is returned. Read moreSource§fn partial_cmp_by(self, other: I, partial_cmp: F) -> Option<Ordering>
fn partial_cmp_by(self, other: I, partial_cmp: F) -> Option<Ordering>
iter_order_by
#64295)Iterator
with those
of another with respect to the specified comparison function. Read moreSource§fn eq_by(self, other: I, eq: F) -> bool
fn eq_by(self, other: I, eq: F) -> bool
iter_order_by
#64295)1.5.0 · Source§fn lt(self, other: I) -> bool
fn lt(self, other: I) -> bool
Iterator
are lexicographically
less than those of another. Read more1.5.0 · Source§fn le(self, other: I) -> bool
fn le(self, other: I) -> bool
Iterator
are lexicographically
less or equal to those of another. Read more1.5.0 · Source§fn gt(self, other: I) -> bool
fn gt(self, other: I) -> bool
Iterator
are lexicographically
greater than those of another. Read more1.5.0 · Source§fn ge(self, other: I) -> bool
fn ge(self, other: I) -> bool
Iterator
are lexicographically
greater than or equal to those of another. Read more1.82.0 · Source§fn is_sorted(self) -> bool
fn is_sorted(self) -> bool
1.82.0 · Source§fn is_sorted_by(self, compare: F) -> bool
fn is_sorted_by(self, compare: F) -> bool
1.82.0 · Source§fn is_sorted_by_key(self, f: F) -> bool
fn is_sorted_by_key(self, f: F) -> bool
1.0.0 · Source§impl Ord for Box
impl Ord for Box
1.0.0 · Source§impl PartialOrd for Box
impl PartialOrd for Box
1.0.0 · Source§implRead + ?Sized> Read for Box
implRead + ?Sized> Read for Box
Source§fn read(&mut self, buf: &mut [u8]) -> Result<usize>
fn read(&mut self, buf: &mut [u8]) -> Result<usize>
Source§fn read_buf(&mut self, cursor: BorrowedCursor<'_>) -> Result<()>
fn read_buf(&mut self, cursor: BorrowedCursor<'_>) -> Result<()>
read_buf
#78485)Source§fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize>
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize>
read
, except that it reads into a slice of buffers. Read moreSource§fn is_read_vectored(&self) -> bool
fn is_read_vectored(&self) -> bool
can_vector
#69941)Source§fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize>
fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize>
buf
. Read moreSource§fn read_to_string(&mut self, buf: &mut String) -> Result<usize>
fn read_to_string(&mut self, buf: &mut String) -> Result<usize>
buf
. Read moreSource§fn read_exact(&mut self, buf: &mut [u8]) -> Result<()>
fn read_exact(&mut self, buf: &mut [u8]) -> Result<()>
buf
. Read moreSource§fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<()>
fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<()>
read_buf
#78485)cursor
. Read more1.0.0 · Source§fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
Read
. Read more1.0.0 · Source§implSeek + ?Sized> Seek for Box
implSeek + ?Sized> Seek for Box
Source§fn seek(&mut self, pos: SeekFrom) -> Result<u64>
fn seek(&mut self, pos: SeekFrom) -> Result<u64>
Source§fn stream_len(&mut self) -> Result<u64>
fn stream_len(&mut self) -> Result<u64>
seek_stream_len
#59359)1.43.0 · Source§implusize> TryFrom<Box<[T]>> for Box<[T; N]>
implusize> TryFrom<Box<[T]>> for Box<[T; N]>
Source§fn try_from(
boxed_slice: Box<[T]>,
) -> Result<Box<[T; N]>, <Box<[T; N]> as TryFrom<Box<[T]>>>::Error>
fn try_from( boxed_slice: Box<[T]>, ) -> Result<Box<[T; N]>, <Box<[T; N]> as TryFrom<Box<[T]>>>::Error>
Attempts to convert a Box<[T]>
into a Box<[T; N]>
.
The conversion occurs in-place and does not require a new memory allocation.
§Errors
Returns the old Box<[T]>
in the Err
variant if
boxed_slice.len()
does not equal N
.
1.66.0 · Source§implusize> TryFrom<Vec> for Box<[T; N]>
implusize> TryFrom<Vec> for Box<[T; N]>
Source§fn try_from(
vec: Vec,
) -> Result<Box<[T; N]>, <Box<[T; N]> as TryFrom<Vec>>::Error>
fn try_from(
vec: Vec,
) -> Result<Box<[T; N]>, <Box<[T; N]> as TryFrom<Vec>>::Error>
Attempts to convert a Vec
into a Box<[T; N]>
.
Like Vec::into_boxed_slice
, this is in-place if vec.capacity() == N
,
but will require a reallocation otherwise.
§Errors
Returns the original Vec
in the Err
variant if
boxed_slice.len()
does not equal N
.
§Examples
This can be used with vec!
to create an array on the heap:
1.0.0 · Source§implWrite + ?Sized> Write for Box
implWrite + ?Sized> Write for Box
Source§fn write(&mut self, buf: &[u8]) -> Result<usize>
fn write(&mut self, buf: &[u8]) -> Result<usize>
Source§fn is_write_vectored(&self) -> bool
fn is_write_vectored(&self) -> bool
can_vector
#69941)Source§fn flush(&mut self) -> Result<()>
fn flush(&mut self) -> Result<()>
Source§fn write_all(&mut self, buf: &[u8]) -> Result<()>
fn write_all(&mut self, buf: &[u8]) -> Result<()>
Source§fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<()>
fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<()>
write_all_vectored
#70436)impl CoerceUnsized<Box> for Box
impl DerefPure for Box
impl DispatchFromDyn<Box> for Box
impl Eq for Box
impl FusedIterator for Box
impl<'a, I, A> !Iterator for &'a Box<[I], A>where
A: Allocator,
This implementation is required to make sure that the &Box<[I]>: IntoIterator
implementation doesn’t overlap with IntoIterator for T where T: Iterator
blanket.
impl<'a, I, A> !Iterator for &'a mut Box<[I], A>where
A: Allocator,
This implementation is required to make sure that the &mut Box<[I]>: IntoIterator
implementation doesn’t overlap with IntoIterator for T where T: Iterator
blanket.
impl !Iterator for Box<[I], A>where
A: Allocator,
This implementation is required to make sure that the Box<[I]>: IntoIterator
implementation doesn’t overlap with IntoIterator for T where T: Iterator
blanket.
impl PinCoerceUnsized for Box
impl PointerLike for Box
impl Unpin for Box
Auto Trait Implementations§
impl Freeze for Box
impl RefUnwindSafe for Box
impl Send for Box
impl Sync for Box
impl UnwindSafe for Box
Blanket Implementations§
Source§impl BorrowMut for Twhere
T: ?Sized,
impl BorrowMut for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl CloneToUninit for Twhere
T: Clone,
impl CloneToUninit for Twhere
T: Clone,
Source§impl IntoAsyncIterator for Iwhere
I: AsyncIterator,
impl IntoAsyncIterator for Iwhere
I: AsyncIterator,
Source§type Item = AsyncIterator>::Item
type Item = AsyncIterator>::Item
async_iterator
#79024)Source§type IntoAsyncIter = I
type IntoAsyncIter = I
async_iterator
#79024)Source§fn into_async_iter(self) -> IntoAsyncIterator>::IntoAsyncIter
fn into_async_iter(self) -> IntoAsyncIterator>::IntoAsyncIter
async_iterator
#79024)self
into an async iteratorSource§impl IntoFuture for Fwhere
F: Future,
impl IntoFuture for Fwhere
F: Future,
Source§type IntoFuture = F
type IntoFuture = F
Source§fn into_future(self) -> IntoFuture>::IntoFuture
fn into_future(self) -> IntoFuture>::IntoFuture
Source§impl IntoIterator for Iwhere
I: Iterator,
impl IntoIterator for Iwhere
I: Iterator,
Source§impl Pattern for F
impl Pattern for F
Source§type Searcher<'a> = CharPredicateSearcher<'a, F>
type Searcher<'a> = CharPredicateSearcher<'a, F>
pattern
#27721)Source§fn into_searcher<'a>(self, haystack: &'a str) -> CharPredicateSearcher<'a, F>
fn into_searcher<'a>(self, haystack: &'a str) -> CharPredicateSearcher<'a, F>
pattern
#27721)self
and the haystack
to search in.Source§fn is_contained_in<'a>(self, haystack: &'a str) -> bool
fn is_contained_in<'a>(self, haystack: &'a str) -> bool
pattern
#27721)Source§fn is_prefix_of<'a>(self, haystack: &'a str) -> bool
fn is_prefix_of<'a>(self, haystack: &'a str) -> bool
pattern
#27721)Source§fn strip_prefix_of<'a>(self, haystack: &'a str) -> Option<&'a str>
fn strip_prefix_of<'a>(self, haystack: &'a str) -> Option<&'a str>
pattern
#27721)Source§fn is_suffix_of<'a>(self, haystack: &'a str) -> boolwhere
CharPredicateSearcher<'a, F>: ReverseSearcher<'a>,
fn is_suffix_of<'a>(self, haystack: &'a str) -> boolwhere
CharPredicateSearcher<'a, F>: ReverseSearcher<'a>,
pattern
#27721)Source§fn strip_suffix_of<'a>(self, haystack: &'a str) -> Option<&'a str>where
CharPredicateSearcher<'a, F>: ReverseSearcher<'a>,
fn strip_suffix_of<'a>(self, haystack: &'a str) -> Option<&'a str>where
CharPredicateSearcher<'a, F>: ReverseSearcher<'a>,
pattern
#27721)Source§fn as_utf8_pattern(&self) -> Option<Utf8Pattern<'_>>
fn as_utf8_pattern(&self) -> Option<Utf8Pattern<'_>>
pattern
#27721)