Expand description
A pointer type for heap allocation.
See the module-level documentation for more.
Implementations
impl<T> Box<T>
source
impl<T> Box<T>
sourcepub fn new_uninit() -> Box<MaybeUninit<T>>ⓘNotable traits for Box<I, A>impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> type Item = I::Item;impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static, type Output = F::Output;
source
pub fn new_uninit() -> Box<MaybeUninit<T>>ⓘNotable traits for Box<I, A>impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> type Item = I::Item;impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static, type Output = F::Output;
sourceA: 'static, type Output = F::Output;
pub fn new_zeroed() -> Box<MaybeUninit<T>>ⓘNotable traits for Box<I, A>impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> type Item = I::Item;impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static, type Output = F::Output;
source
pub fn new_zeroed() -> Box<MaybeUninit<T>>ⓘNotable traits for Box<I, A>impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> type Item = I::Item;impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static, type Output = F::Output;
sourceA: 'static, type Output = F::Output;
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
#![feature(new_uninit)]
let zero = Box::<u32>::new_zeroed();
let zero = unsafe { zero.assume_init() };
assert_eq!(*zero, 0)Runpub fn pin(x: T) -> Pin<Box<T>>
1.33.0 · source
pub fn pin(x: T) -> Pin<Box<T>>
1.33.0 · sourceConstructs a new Pin<Box<T>>. If T does not implement Unpin, then
x will be pinned in memory and unable to be moved.
pub fn try_new(x: T) -> Result<Self, AllocError>
source
pub fn try_new(x: T) -> Result<Self, AllocError>
sourcepub fn try_new_uninit() -> Result<Box<MaybeUninit<T>>, AllocError>
source
pub fn try_new_uninit() -> Result<Box<MaybeUninit<T>>, AllocError>
sourceConstructs a new box with uninitialized contents on the heap, returning an error if the allocation fails
Examples
#![feature(allocator_api, new_uninit)]
let mut five = Box::<u32>::try_new_uninit()?;
let five = unsafe {
// Deferred initialization:
five.as_mut_ptr().write(5);
five.assume_init()
};
assert_eq!(*five, 5);Runpub fn try_new_zeroed() -> Result<Box<MaybeUninit<T>>, AllocError>
source
pub fn try_new_zeroed() -> Result<Box<MaybeUninit<T>>, AllocError>
sourceConstructs 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
#![feature(allocator_api, new_uninit)]
let zero = Box::<u32>::try_new_zeroed()?;
let zero = unsafe { zero.assume_init() };
assert_eq!(*zero, 0);Runimpl<T, A: Allocator> Box<T, A>
source
impl<T, A: Allocator> Box<T, A>
sourcepub fn try_new_in(x: T, alloc: A) -> Result<Self, AllocError> where
A: Allocator,
const: unstable · source
pub fn try_new_in(x: T, alloc: A) -> Result<Self, AllocError> where
A: Allocator,
const: unstable · sourcepub fn new_uninit_in(alloc: A) -> Box<MaybeUninit<T>, A>ⓘNotable traits for Box<I, A>impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> type Item = I::Item;impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static, type Output = F::Output; where
A: Allocator,
const: unstable · source
pub fn new_uninit_in(alloc: A) -> Box<MaybeUninit<T>, A>ⓘNotable traits for Box<I, A>impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> type Item = I::Item;impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static, type Output = F::Output; where
A: Allocator,
const: unstable · sourceA: 'static, type Output = F::Output;
Constructs a new box with uninitialized contents in the provided allocator.
Examples
#![feature(allocator_api, new_uninit)]
use std::alloc::System;
let mut five = Box::<u32, _>::new_uninit_in(System);
let five = unsafe {
// Deferred initialization:
five.as_mut_ptr().write(5);
five.assume_init()
};
assert_eq!(*five, 5)Runpub fn try_new_uninit_in(alloc: A) -> Result<Box<MaybeUninit<T>, A>, AllocError> where
A: Allocator,
const: unstable · source
pub fn try_new_uninit_in(alloc: A) -> Result<Box<MaybeUninit<T>, A>, AllocError> where
A: Allocator,
const: unstable · sourceConstructs a new box with uninitialized contents in the provided allocator, returning an error if the allocation fails
Examples
#![feature(allocator_api, new_uninit)]
use std::alloc::System;
let mut five = Box::<u32, _>::try_new_uninit_in(System)?;
let five = unsafe {
// Deferred initialization:
five.as_mut_ptr().write(5);
five.assume_init()
};
assert_eq!(*five, 5);Runpub fn new_zeroed_in(alloc: A) -> Box<MaybeUninit<T>, A>ⓘNotable traits for Box<I, A>impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> type Item = I::Item;impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static, type Output = F::Output; where
A: Allocator,
const: unstable · source
pub fn new_zeroed_in(alloc: A) -> Box<MaybeUninit<T>, A>ⓘNotable traits for Box<I, A>impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> type Item = I::Item;impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static, type Output = F::Output; where
A: Allocator,
const: unstable · sourceA: 'static, type Output = F::Output;
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
#![feature(allocator_api, new_uninit)]
use std::alloc::System;
let zero = Box::<u32, _>::new_zeroed_in(System);
let zero = unsafe { zero.assume_init() };
assert_eq!(*zero, 0)Runpub fn try_new_zeroed_in(alloc: A) -> Result<Box<MaybeUninit<T>, A>, AllocError> where
A: Allocator,
const: unstable · source
pub fn try_new_zeroed_in(alloc: A) -> Result<Box<MaybeUninit<T>, A>, AllocError> where
A: Allocator,
const: unstable · sourceConstructs 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
#![feature(allocator_api, new_uninit)]
use std::alloc::System;
let zero = Box::<u32, _>::try_new_zeroed_in(System)?;
let zero = unsafe { zero.assume_init() };
assert_eq!(*zero, 0);Runpub fn pin_in(x: T, alloc: A) -> Pin<Self> where
A: 'static + Allocator,
const: unstable · source
pub fn pin_in(x: T, alloc: A) -> Pin<Self> where
A: 'static + Allocator,
const: unstable · sourceConstructs a new Pin<Box<T, A>>. If T does not implement Unpin, then
x will be pinned in memory and unable to be moved.
pub fn into_boxed_slice(boxed: Self) -> Box<[T], A>ⓘNotable traits for Box<I, A>impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> type Item = I::Item;impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static, type Output = F::Output;
const: unstable · source
pub fn into_boxed_slice(boxed: Self) -> Box<[T], A>ⓘNotable traits for Box<I, A>impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> type Item = I::Item;impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static, type Output = F::Output;
const: unstable · sourceA: 'static, type Output = F::Output;
Converts a Box<T> into a Box<[T]>
This conversion does not allocate on the heap and happens in place.
impl<T> Box<[T]>
source
impl<T> Box<[T]>
sourcepub fn new_uninit_slice(len: usize) -> Box<[MaybeUninit<T>]>ⓘNotable traits for Box<I, A>impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> type Item = I::Item;impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static, type Output = F::Output;
source
pub fn new_uninit_slice(len: usize) -> Box<[MaybeUninit<T>]>ⓘNotable traits for Box<I, A>impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> type Item = I::Item;impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static, type Output = F::Output;
sourceA: 'static, type Output = F::Output;
Constructs a new boxed slice with uninitialized contents.
Examples
#![feature(new_uninit)]
let mut values = Box::<[u32]>::new_uninit_slice(3);
let values = unsafe {
// Deferred initialization:
values[0].as_mut_ptr().write(1);
values[1].as_mut_ptr().write(2);
values[2].as_mut_ptr().write(3);
values.assume_init()
};
assert_eq!(*values, [1, 2, 3])Runpub fn new_zeroed_slice(len: usize) -> Box<[MaybeUninit<T>]>ⓘNotable traits for Box<I, A>impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> type Item = I::Item;impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static, type Output = F::Output;
source
pub fn new_zeroed_slice(len: usize) -> Box<[MaybeUninit<T>]>ⓘNotable traits for Box<I, A>impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> type Item = I::Item;impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static, type Output = F::Output;
sourceA: 'static, type Output = F::Output;
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
#![feature(new_uninit)]
let values = Box::<[u32]>::new_zeroed_slice(3);
let values = unsafe { values.assume_init() };
assert_eq!(*values, [0, 0, 0])Runpub fn try_new_uninit_slice(
len: usize
) -> Result<Box<[MaybeUninit<T>]>, AllocError>
source
pub fn try_new_uninit_slice(
len: usize
) -> Result<Box<[MaybeUninit<T>]>, AllocError>
sourceConstructs a new boxed slice with uninitialized contents. Returns an error if the allocation fails
Examples
#![feature(allocator_api, new_uninit)]
let mut values = Box::<[u32]>::try_new_uninit_slice(3)?;
let values = unsafe {
// Deferred initialization:
values[0].as_mut_ptr().write(1);
values[1].as_mut_ptr().write(2);
values[2].as_mut_ptr().write(3);
values.assume_init()
};
assert_eq!(*values, [1, 2, 3]);Runpub fn try_new_zeroed_slice(
len: usize
) -> Result<Box<[MaybeUninit<T>]>, AllocError>
source
pub fn try_new_zeroed_slice(
len: usize
) -> Result<Box<[MaybeUninit<T>]>, AllocError>
sourceConstructs 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
#![feature(allocator_api, new_uninit)]
let values = Box::<[u32]>::try_new_zeroed_slice(3)?;
let values = unsafe { values.assume_init() };
assert_eq!(*values, [0, 0, 0]);Runimpl<T, A: Allocator> Box<[T], A>
source
impl<T, A: Allocator> Box<[T], A>
sourcepub fn new_uninit_slice_in(len: usize, alloc: A) -> Box<[MaybeUninit<T>], A>ⓘNotable traits for Box<I, A>impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> type Item = I::Item;impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static, type Output = F::Output;
source
pub fn new_uninit_slice_in(len: usize, alloc: A) -> Box<[MaybeUninit<T>], A>ⓘNotable traits for Box<I, A>impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> type Item = I::Item;impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static, type Output = F::Output;
sourceA: 'static, type Output = F::Output;
Constructs a new boxed slice with uninitialized contents in the provided allocator.
Examples
#![feature(allocator_api, new_uninit)]
use std::alloc::System;
let mut values = Box::<[u32], _>::new_uninit_slice_in(3, System);
let values = unsafe {
// Deferred initialization:
values[0].as_mut_ptr().write(1);
values[1].as_mut_ptr().write(2);
values[2].as_mut_ptr().write(3);
values.assume_init()
};
assert_eq!(*values, [1, 2, 3])Runpub fn new_zeroed_slice_in(len: usize, alloc: A) -> Box<[MaybeUninit<T>], A>ⓘNotable traits for Box<I, A>impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> type Item = I::Item;impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static, type Output = F::Output;
source
pub fn new_zeroed_slice_in(len: usize, alloc: A) -> Box<[MaybeUninit<T>], A>ⓘNotable traits for Box<I, A>impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> type Item = I::Item;impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static, type Output = F::Output;
sourceA: 'static, type Output = F::Output;
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
#![feature(allocator_api, new_uninit)]
use std::alloc::System;
let values = Box::<[u32], _>::new_zeroed_slice_in(3, System);
let values = unsafe { values.assume_init() };
assert_eq!(*values, [0, 0, 0])Runimpl<T, A: Allocator> Box<MaybeUninit<T>, A>
source
impl<T, A: Allocator> Box<MaybeUninit<T>, A>
sourcepub unsafe fn assume_init(self) -> Box<T, A>ⓘNotable traits for Box<I, A>impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> type Item = I::Item;impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static, type Output = F::Output;
const: unstable · source
pub unsafe fn assume_init(self) -> Box<T, A>ⓘNotable traits for Box<I, A>impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> type Item = I::Item;impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static, type Output = F::Output;
const: unstable · sourceA: 'static, type Output = F::Output;
Converts to Box<T, A>.
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
#![feature(new_uninit)]
let mut five = Box::<u32>::new_uninit();
let five: Box<u32> = unsafe {
// Deferred initialization:
five.as_mut_ptr().write(5);
five.assume_init()
};
assert_eq!(*five, 5)Runpub fn write(boxed: Self, value: T) -> Box<T, A>ⓘNotable traits for Box<I, A>impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> type Item = I::Item;impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static, type Output = F::Output;
const: unstable · source
pub fn write(boxed: Self, value: T) -> Box<T, A>ⓘNotable traits for Box<I, A>impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> type Item = I::Item;impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static, type Output = F::Output;
const: unstable · sourceA: 'static, type Output = F::Output;
Writes the value and converts to Box<T, A>.
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
#![feature(new_uninit)]
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);
}Runimpl<T, A: Allocator> Box<[MaybeUninit<T>], A>
source
impl<T, A: Allocator> Box<[MaybeUninit<T>], A>
sourcepub unsafe fn assume_init(self) -> Box<[T], A>ⓘNotable traits for Box<I, A>impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> type Item = I::Item;impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static, type Output = F::Output;
source
pub unsafe fn assume_init(self) -> Box<[T], A>ⓘNotable traits for Box<I, A>impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> type Item = I::Item;impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static, type Output = F::Output;
sourceA: 'static, type Output = F::Output;
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
#![feature(new_uninit)]
let mut values = Box::<[u32]>::new_uninit_slice(3);
let values = unsafe {
// Deferred initialization:
values[0].as_mut_ptr().write(1);
values[1].as_mut_ptr().write(2);
values[2].as_mut_ptr().write(3);
values.assume_init()
};
assert_eq!(*values, [1, 2, 3])Runimpl<T: ?Sized> Box<T>
source
impl<T: ?Sized> Box<T>
sourcepub unsafe fn from_raw(raw: *mut T) -> Self
1.4.0 · source
pub unsafe fn from_raw(raw: *mut T) -> Self
1.4.0 · sourceConstructs 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 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:
let x = Box::new(5);
let ptr = Box::into_raw(x);
let x = unsafe { Box::from_raw(ptr) };RunManually create a Box from scratch by using the global allocator:
use std::alloc::{alloc, Layout};
unsafe {
let ptr = alloc(Layout::new::<i32>()) 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);
}Runimpl<T: ?Sized, A: Allocator> Box<T, A>
source
impl<T: ?Sized, A: Allocator> Box<T, A>
sourcepub unsafe fn from_raw_in(raw: *mut T, alloc: A) -> Self
const: unstable · source
pub unsafe fn from_raw_in(raw: *mut T, alloc: A) -> Self
const: unstable · sourceConstructs 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.
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) };RunManually 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::<i32>())?.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);
}Runpub fn into_raw(b: Self) -> *mut T
1.4.0 · source
pub fn into_raw(b: Self) -> *mut T
1.4.0 · sourceConsumes 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) };RunManual 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 p = Box::into_raw(x);
unsafe {
ptr::drop_in_place(p);
dealloc(p as *mut u8, Layout::new::<String>());
}Runpub fn into_raw_with_allocator(b: Self) -> (*mut T, A)
const: unstable · source
pub fn into_raw_with_allocator(b: Self) -> (*mut T, A)
const: unstable · sourceConsumes 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) };RunManual 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::<String>());
}Runpub fn allocator(b: &Self) -> &A
const: unstable · source
pub fn allocator(b: &Self) -> &A
const: unstable · sourceReturns 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.
pub fn leak<'a>(b: Self) -> &'a mut T where
A: 'a,
1.26.0 (const: unstable) · source
pub fn leak<'a>(b: Self) -> &'a mut T where
A: 'a,
1.26.0 (const: unstable) · sourceConsumes 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);RunUnsized data:
let x = vec![1, 2, 3].into_boxed_slice();
let static_ref = Box::leak(x);
static_ref[0] = 4;
assert_eq!(*static_ref, [4, 2, 3]);Runimpl<A: Allocator> Box<dyn Any, A>
source
impl<A: Allocator> Box<dyn Any, A>
sourcepub fn downcast<T: Any>(self) -> Result<Box<T, A>, Self>
source
pub fn downcast<T: Any>(self) -> Result<Box<T, A>, Self>
sourceAttempt to downcast the box to a concrete type.
Examples
use std::any::Any;
fn print_if_string(value: Box<dyn Any>) {
if let Ok(string) = value.downcast::<String>() {
println!("String ({}): {}", string.len(), string);
}
}
let my_string = "Hello World".to_string();
print_if_string(Box::new(my_string));
print_if_string(Box::new(0i8));Runpub unsafe fn downcast_unchecked<T: Any>(self) -> Box<T, A>ⓘNotable traits for Box<I, A>impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> type Item = I::Item;impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static, type Output = F::Output;
source
pub unsafe fn downcast_unchecked<T: Any>(self) -> Box<T, A>ⓘNotable traits for Box<I, A>impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> type Item = I::Item;impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static, type Output = F::Output;
sourceA: 'static, type Output = F::Output;
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::<usize>(), 1);
}RunSafety
The contained value must be of type T. Calling this method
with the incorrect type is undefined behavior.
impl<A: Allocator> Box<dyn Any + Send, A>
source
impl<A: Allocator> Box<dyn Any + Send, A>
sourcepub fn downcast<T: Any>(self) -> Result<Box<T, A>, Self>
source
pub fn downcast<T: Any>(self) -> Result<Box<T, A>, Self>
sourceAttempt to downcast the box to a concrete type.
Examples
use std::any::Any;
fn print_if_string(value: Box<dyn Any + Send>) {
if let Ok(string) = value.downcast::<String>() {
println!("String ({}): {}", string.len(), string);
}
}
let my_string = "Hello World".to_string();
print_if_string(Box::new(my_string));
print_if_string(Box::new(0i8));Runpub unsafe fn downcast_unchecked<T: Any>(self) -> Box<T, A>ⓘNotable traits for Box<I, A>impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> type Item = I::Item;impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static, type Output = F::Output;
source
pub unsafe fn downcast_unchecked<T: Any>(self) -> Box<T, A>ⓘNotable traits for Box<I, A>impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> type Item = I::Item;impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static, type Output = F::Output;
sourceA: 'static, type Output = F::Output;
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::<usize>(), 1);
}RunSafety
The contained value must be of type T. Calling this method
with the incorrect type is undefined behavior.
impl<A: Allocator> Box<dyn Any + Send + Sync, A>
source
impl<A: Allocator> Box<dyn Any + Send + Sync, A>
sourcepub fn downcast<T: Any>(self) -> Result<Box<T, A>, Self>
1.51.0 · source
pub fn downcast<T: Any>(self) -> Result<Box<T, A>, Self>
1.51.0 · sourceAttempt to downcast the box to a concrete type.
Examples
use std::any::Any;
fn print_if_string(value: Box<dyn Any + Send + Sync>) {
if let Ok(string) = value.downcast::<String>() {
println!("String ({}): {}", string.len(), string);
}
}
let my_string = "Hello World".to_string();
print_if_string(Box::new(my_string));
print_if_string(Box::new(0i8));Runpub unsafe fn downcast_unchecked<T: Any>(self) -> Box<T, A>ⓘNotable traits for Box<I, A>impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> type Item = I::Item;impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static, type Output = F::Output;
source
pub unsafe fn downcast_unchecked<T: Any>(self) -> Box<T, A>ⓘNotable traits for Box<I, A>impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> type Item = I::Item;impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static, type Output = F::Output;
sourceA: 'static, type Output = F::Output;
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::<usize>(), 1);
}RunSafety
The contained value must be of type T. Calling this method
with the incorrect type is undefined behavior.
Trait Implementations
impl<S: ?Sized + AsyncIterator + Unpin> AsyncIterator for Box<S>
source
impl<S: ?Sized + AsyncIterator + Unpin> AsyncIterator for Box<S>
sourceimpl<T: ?Sized, A: Allocator> BorrowMut<T> for Box<T, A>
1.1.0 · source
impl<T: ?Sized, A: Allocator> BorrowMut<T> for Box<T, A>
1.1.0 · sourcefn borrow_mut(&mut self) -> &mut T
source
fn borrow_mut(&mut self) -> &mut T
sourceMutably borrows from an owned value. Read more
impl<T: Clone, A: Allocator + Clone> Clone for Box<T, A>
source
impl<T: Clone, A: Allocator + Clone> Clone for Box<T, A>
sourcefn clone_from(&mut self, source: &Self)
source
fn clone_from(&mut self, source: &Self)
sourceimpl Default for Box<CStr>
1.17.0 · source
impl Default for Box<CStr>
1.17.0 · sourcefn default() -> Box<CStr>ⓘNotable traits for Box<I, A>impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> type Item = I::Item;impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static, type Output = F::Output;
source
fn default() -> Box<CStr>ⓘNotable traits for Box<I, A>impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> type Item = I::Item;impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static, type Output = F::Output;
sourceA: 'static, type Output = F::Output;
Returns the “default value” for a type. Read more
impl<I: DoubleEndedIterator + ?Sized, A: Allocator> DoubleEndedIterator for Box<I, A>
source
impl<I: DoubleEndedIterator + ?Sized, A: Allocator> DoubleEndedIterator for Box<I, A>
sourcefn next_back(&mut self) -> Option<I::Item>
source
fn next_back(&mut self) -> Option<I::Item>
sourceRemoves and returns an element from the end of the iterator. Read more
fn nth_back(&mut self, n: usize) -> Option<I::Item>
source
fn nth_back(&mut self, n: usize) -> Option<I::Item>
sourceReturns the nth element from the end of the iterator. Read more
fn advance_back_by(&mut self, n: usize) -> Result<(), usize>
source
fn advance_back_by(&mut self, n: usize) -> Result<(), usize>
sourceAdvances the iterator from the back by n elements. Read more
fn try_rfold<B, F, R>(&mut self, init: B, f: F) -> R where
F: FnMut(B, Self::Item) -> R,
R: Try<Output = B>,
1.27.0 · source
fn try_rfold<B, F, R>(&mut self, init: B, f: F) -> R where
F: FnMut(B, Self::Item) -> R,
R: Try<Output = B>,
1.27.0 · sourceThis is the reverse version of Iterator::try_fold(): it takes
elements starting from the back of the iterator. Read more
impl<I: ExactSizeIterator + ?Sized, A: Allocator> ExactSizeIterator for Box<I, A>
source
impl<I: ExactSizeIterator + ?Sized, A: Allocator> ExactSizeIterator for Box<I, A>
sourceimpl Extend<Box<str, Global>> for String
1.45.0 · source
impl Extend<Box<str, Global>> for String
1.45.0 · sourcefn extend<I: IntoIterator<Item = Box<str>>>(&mut self, iter: I)
source
fn extend<I: IntoIterator<Item = Box<str>>>(&mut self, iter: I)
sourceExtends a collection with the contents of an iterator. Read more
fn extend_reserve(&mut self, additional: usize)
source
fn extend_reserve(&mut self, additional: usize)
sourceReserves capacity in a collection for the given number of additional elements. Read more
impl<T: Copy> From<&'_ [T]> for Box<[T]>
1.17.0 · source
impl<T: Copy> From<&'_ [T]> for Box<[T]>
1.17.0 · sourceimpl From<&'_ CStr> for Box<CStr>
1.17.0 · source
impl From<&'_ CStr> for Box<CStr>
1.17.0 · sourcefn from(s: &CStr) -> Box<CStr>ⓘNotable traits for Box<I, A>impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> type Item = I::Item;impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static, type Output = F::Output;
source
fn from(s: &CStr) -> Box<CStr>ⓘNotable traits for Box<I, A>impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> type Item = I::Item;impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static, type Output = F::Output;
sourceA: 'static, type Output = F::Output;
Converts a &CStr into a Box<CStr>,
by copying the contents into a newly allocated Box.
impl From<&'_ str> for Box<str>
1.17.0 · source
impl From<&'_ str> for Box<str>
1.17.0 · sourceimpl<T, const N: usize> From<[T; N]> for Box<[T]>
1.45.0 · source
impl<T, const N: usize> From<[T; N]> for Box<[T]>
1.45.0 · sourceimpl<T: ?Sized, A: Allocator> From<Box<T, A>> for Pin<Box<T, A>> where
A: 'static,
1.33.0 (const: unstable) · source
impl<T: ?Sized, A: Allocator> From<Box<T, A>> for Pin<Box<T, A>> where
A: 'static,
1.33.0 (const: unstable) · sourceimpl<A: Allocator> From<Box<str, A>> for Box<[u8], A>
1.19.0 · source
impl<A: Allocator> From<Box<str, A>> for Box<[u8], A>
1.19.0 · sourcefn from(s: Box<str, A>) -> Self
source
fn from(s: Box<str, A>) -> Self
sourceConverts a Box<str> into a Box<[u8]>
This conversion does not allocate on the heap and happens in place.
Examples
// create a Box<str> which will be used to create a Box<[u8]>
let boxed: Box<str> = 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);Runimpl From<CString> for Box<CStr>
1.20.0 · source
impl From<CString> for Box<CStr>
1.20.0 · sourceimpl<T: Copy> From<Cow<'_, [T]>> for Box<[T]>
1.45.0 · source
impl<T: Copy> From<Cow<'_, [T]>> for Box<[T]>
1.45.0 · sourcefn from(cow: Cow<'_, [T]>) -> Box<[T]>ⓘNotable traits for Box<I, A>impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> type Item = I::Item;impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static, type Output = F::Output;
source
fn from(cow: Cow<'_, [T]>) -> Box<[T]>ⓘNotable traits for Box<I, A>impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> type Item = I::Item;impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static, type Output = F::Output;
sourceA: 'static, type Output = F::Output;
Converts a Cow<'_, [T]> into a Box<[T]>
When cow is the Cow::Borrowed variant, this
conversion allocates on the heap and copies the
underlying slice. Otherwise, it will try to reuse the owned
Vec’s allocation.
impl From<Cow<'_, CStr>> for Box<CStr>
1.45.0 · source
impl From<Cow<'_, CStr>> for Box<CStr>
1.45.0 · sourcefn from(cow: Cow<'_, CStr>) -> Box<CStr>ⓘNotable traits for Box<I, A>impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> type Item = I::Item;impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static, type Output = F::Output;
source
fn from(cow: Cow<'_, CStr>) -> Box<CStr>ⓘNotable traits for Box<I, A>impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> type Item = I::Item;impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static, type Output = F::Output;
sourceA: 'static, type Output = F::Output;
Converts a Cow<'a, CStr> into a Box<CStr>,
by copying the contents if they are borrowed.
impl From<Cow<'_, str>> for Box<str>
1.45.0 · source
impl From<Cow<'_, str>> for Box<str>
1.45.0 · sourcefn from(cow: Cow<'_, str>) -> Box<str>ⓘNotable traits for Box<I, A>impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> type Item = I::Item;impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static, type Output = F::Output;
source
fn from(cow: Cow<'_, str>) -> Box<str>ⓘNotable traits for Box<I, A>impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> type Item = I::Item;impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static, type Output = F::Output;
sourceA: 'static, type Output = F::Output;
Converts a Cow<'_, str> into a Box<str>
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
use std::borrow::Cow;
let unboxed = Cow::Borrowed("hello");
let boxed: Box<str> = Box::from(unboxed);
println!("{boxed}");Runlet unboxed = Cow::Owned("hello".to_string());
let boxed: Box<str> = Box::from(unboxed);
println!("{boxed}");Runimpl From<String> for Box<str>
1.20.0 · source
impl From<String> for Box<str>
1.20.0 · sourceimpl<I> FromIterator<I> for Box<[I]>
1.32.0 · source
impl<I> FromIterator<I> for Box<[I]>
1.32.0 · sourcefn from_iter<T: IntoIterator<Item = I>>(iter: T) -> Self
source
fn from_iter<T: IntoIterator<Item = I>>(iter: T) -> Self
sourceCreates a value from an iterator. Read more
impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static,
1.36.0 · source
impl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A> where
A: 'static,
1.36.0 · sourceimpl<G: ?Sized + Generator<R> + Unpin, R, A: Allocator> Generator<R> for Box<G, A> where
A: 'static,
source
impl<G: ?Sized + Generator<R> + Unpin, R, A: Allocator> Generator<R> for Box<G, A> where
A: 'static,
sourceimpl<T: ?Sized + Hasher, A: Allocator> Hasher for Box<T, A>
1.22.0 · source
impl<T: ?Sized + Hasher, A: Allocator> Hasher for Box<T, A>
1.22.0 · sourcefn write_u128(&mut self, i: u128)
source
fn write_u128(&mut self, i: u128)
sourceWrites a single u128 into this hasher.
fn write_usize(&mut self, i: usize)
source
fn write_usize(&mut self, i: usize)
sourceWrites a single usize into this hasher.
fn write_i128(&mut self, i: i128)
source
fn write_i128(&mut self, i: i128)
sourceWrites a single i128 into this hasher.
fn write_isize(&mut self, i: isize)
source
fn write_isize(&mut self, i: isize)
sourceWrites a single isize into this hasher.
fn write_length_prefix(&mut self, len: usize)
source
fn write_length_prefix(&mut self, len: usize)
sourceWrites a length prefix into this hasher, as part of being prefix-free. Read more
impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A>
source
impl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A>
sourcefn next(&mut self) -> Option<I::Item>
source
fn next(&mut self) -> Option<I::Item>
sourceAdvances the iterator and returns the next value. Read more
fn size_hint(&self) -> (usize, Option<usize>)
source
fn size_hint(&self) -> (usize, Option<usize>)
sourceReturns the bounds on the remaining length of the iterator. Read more
fn nth(&mut self, n: usize) -> Option<I::Item>
source
fn nth(&mut self, n: usize) -> Option<I::Item>
sourceReturns the nth element of the iterator. Read more
fn count(self) -> usize
source
fn count(self) -> usize
sourceConsumes the iterator, counting the number of iterations and returning it. Read more
fn advance_by(&mut self, n: usize) -> Result<(), usize>
source
fn advance_by(&mut self, n: usize) -> Result<(), usize>
sourceAdvances the iterator by n elements. Read more
fn step_by(self, step: usize) -> StepBy<Self>
1.28.0 · source
fn step_by(self, step: usize) -> StepBy<Self>
1.28.0 · sourceCreates an iterator starting at the same point, but stepping by the given amount at each iteration. Read more
fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter> where
U: IntoIterator<Item = Self::Item>,
source
fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter> where
U: IntoIterator<Item = Self::Item>,
sourceTakes two iterators and creates a new iterator over both in sequence. Read more
fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter> where
U: IntoIterator,
source
fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter> where
U: IntoIterator,
source‘Zips up’ two iterators into a single iterator of pairs. Read more
fn intersperse(self, separator: Self::Item) -> Intersperse<Self> where
Self::Item: Clone,
source
fn intersperse(self, separator: Self::Item) -> Intersperse<Self> where
Self::Item: Clone,
sourceCreates a new iterator which places a copy of separator between adjacent
items of the original iterator. Read more
fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G> where
G: FnMut() -> Self::Item,
source
fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G> where
G: FnMut() -> Self::Item,
sourceCreates a new iterator which places an item generated by separator
between adjacent items of the original iterator. Read more
fn map<B, F>(self, f: F) -> Map<Self, F> where
F: FnMut(Self::Item) -> B,
source
fn map<B, F>(self, f: F) -> Map<Self, F> where
F: FnMut(Self::Item) -> B,
sourceTakes a closure and creates an iterator which calls that closure on each element. Read more
fn for_each<F>(self, f: F) where
F: FnMut(Self::Item),
1.21.0 · source
fn for_each<F>(self, f: F) where
F: FnMut(Self::Item),
1.21.0 · sourceCalls a closure on each element of an iterator. Read more
fn filter<P>(self, predicate: P) -> Filter<Self, P> where
P: FnMut(&Self::Item) -> bool,
source
fn filter<P>(self, predicate: P) -> Filter<Self, P> where
P: FnMut(&Self::Item) -> bool,
sourceCreates an iterator which uses a closure to determine if an element should be yielded. Read more
fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F> where
F: FnMut(Self::Item) -> Option<B>,
source
fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F> where
F: FnMut(Self::Item) -> Option<B>,
sourceCreates an iterator that both filters and maps. Read more
fn enumerate(self) -> Enumerate<Self>
source
fn enumerate(self) -> Enumerate<Self>
sourceCreates an iterator which gives the current iteration count as well as the next value. Read more
fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P> where
P: FnMut(&Self::Item) -> bool,
source
fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P> where
P: FnMut(&Self::Item) -> bool,
sourcefn take_while<P>(self, predicate: P) -> TakeWhile<Self, P> where
P: FnMut(&Self::Item) -> bool,
source
fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P> where
P: FnMut(&Self::Item) -> bool,
sourceCreates an iterator that yields elements based on a predicate. Read more
fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P> where
P: FnMut(Self::Item) -> Option<B>,
1.57.0 · source
fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P> where
P: FnMut(Self::Item) -> Option<B>,
1.57.0 · sourceCreates an iterator that both yields elements based on a predicate and maps. Read more
fn skip(self, n: usize) -> Skip<Self>
source
fn skip(self, n: usize) -> Skip<Self>
sourceCreates an iterator that skips the first n elements. Read more
fn take(self, n: usize) -> Take<Self>
source
fn take(self, n: usize) -> Take<Self>
sourceCreates an iterator that yields the first n elements, or fewer
if the underlying iterator ends sooner. Read more
fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F> where
F: FnMut(&mut St, Self::Item) -> Option<B>,
source
fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F> where
F: FnMut(&mut St, Self::Item) -> Option<B>,
sourcefn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F> where
U: IntoIterator,
F: FnMut(Self::Item) -> U,
source
fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F> where
U: IntoIterator,
F: FnMut(Self::Item) -> U,
sourceCreates an iterator that works like map, but flattens nested structure. Read more
fn flatten(self) -> Flatten<Self> where
Self::Item: IntoIterator,
1.29.0 · source
fn flatten(self) -> Flatten<Self> where
Self::Item: IntoIterator,
1.29.0 · sourceCreates an iterator that flattens nested structure. Read more
fn inspect<F>(self, f: F) -> Inspect<Self, F> where
F: FnMut(&Self::Item),
source
fn inspect<F>(self, f: F) -> Inspect<Self, F> where
F: FnMut(&Self::Item),
sourceDoes something with each element of an iterator, passing the value on. Read more
fn collect<B>(self) -> B where
B: FromIterator<Self::Item>,
source
fn collect<B>(self) -> B where
B: FromIterator<Self::Item>,
sourceTransforms an iterator into a collection. Read more
fn try_collect<B>(
&mut self
) -> <<Self::Item as Try>::Residual as Residual<B>>::TryType where
B: FromIterator<<Self::Item as Try>::Output>,
Self::Item: Try,
<Self::Item as Try>::Residual: Residual<B>,
source
fn try_collect<B>(
&mut self
) -> <<Self::Item as Try>::Residual as Residual<B>>::TryType where
B: FromIterator<<Self::Item as Try>::Output>,
Self::Item: Try,
<Self::Item as Try>::Residual: Residual<B>,
sourceFallibly transforms an iterator into a collection, short circuiting if a failure is encountered. Read more
fn collect_into<E>(self, collection: &mut E) -> &mut E where
E: Extend<Self::Item>,
source
fn collect_into<E>(self, collection: &mut E) -> &mut E where
E: Extend<Self::Item>,
sourceCollects all the items from an iterator into a collection. Read more
fn partition<B, F>(self, f: F) -> (B, B) where
B: Default + Extend<Self::Item>,
F: FnMut(&Self::Item) -> bool,
source
fn partition<B, F>(self, f: F) -> (B, B) where
B: Default + Extend<Self::Item>,
F: FnMut(&Self::Item) -> bool,
sourceConsumes an iterator, creating two collections from it. Read more
fn partition_in_place<'a, T, P>(self, predicate: P) -> usize where
T: 'a,
Self: DoubleEndedIterator<Item = &'a mut T>,
P: FnMut(&T) -> bool,
source
fn partition_in_place<'a, T, P>(self, predicate: P) -> usize where
T: 'a,
Self: DoubleEndedIterator<Item = &'a mut T>,
P: FnMut(&T) -> bool,
sourceReorders the elements of this iterator in-place according to the given predicate,
such that all those that return true precede all those that return false.
Returns the number of true elements found. Read more
fn is_partitioned<P>(self, predicate: P) -> bool where
P: FnMut(Self::Item) -> bool,
source
fn is_partitioned<P>(self, predicate: P) -> bool where
P: FnMut(Self::Item) -> bool,
sourceChecks if the elements of this iterator are partitioned according to the given predicate,
such that all those that return true precede all those that return false. Read more
fn try_fold<B, F, R>(&mut self, init: B, f: F) -> R where
F: FnMut(B, Self::Item) -> R,
R: Try<Output = B>,
1.27.0 · source
fn try_fold<B, F, R>(&mut self, init: B, f: F) -> R where
F: FnMut(B, Self::Item) -> R,
R: Try<Output = B>,
1.27.0 · sourceAn iterator method that applies a function as long as it returns successfully, producing a single, final value. Read more
fn try_for_each<F, R>(&mut self, f: F) -> R where
F: FnMut(Self::Item) -> R,
R: Try<Output = ()>,
1.27.0 · source
fn try_for_each<F, R>(&mut self, f: F) -> R where
F: FnMut(Self::Item) -> R,
R: Try<Output = ()>,
1.27.0 · sourceAn iterator method that applies a fallible function to each item in the iterator, stopping at the first error and returning that error. Read more
fn fold<B, F>(self, init: B, f: F) -> B where
F: FnMut(B, Self::Item) -> B,
source
fn fold<B, F>(self, init: B, f: F) -> B where
F: FnMut(B, Self::Item) -> B,
sourceFolds every element into an accumulator by applying an operation, returning the final result. Read more
fn reduce<F>(self, f: F) -> Option<Self::Item> where
F: FnMut(Self::Item, Self::Item) -> Self::Item,
1.51.0 · source
fn reduce<F>(self, f: F) -> Option<Self::Item> where
F: FnMut(Self::Item, Self::Item) -> Self::Item,
1.51.0 · sourceReduces the elements to a single one, by repeatedly applying a reducing operation. Read more
fn try_reduce<F, R>(
&mut self,
f: F
) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryType where
F: FnMut(Self::Item, Self::Item) -> R,
R: Try<Output = Self::Item>,
<R as Try>::Residual: Residual<Option<Self::Item>>,
source
fn try_reduce<F, R>(
&mut self,
f: F
) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryType where
F: FnMut(Self::Item, Self::Item) -> R,
R: Try<Output = Self::Item>,
<R as Try>::Residual: Residual<Option<Self::Item>>,
sourceReduces the elements to a single one by repeatedly applying a reducing operation. If the closure returns a failure, the failure is propagated back to the caller immediately. Read more
fn all<F>(&mut self, f: F) -> bool where
F: FnMut(Self::Item) -> bool,
source
fn all<F>(&mut self, f: F) -> bool where
F: FnMut(Self::Item) -> bool,
sourceTests if every element of the iterator matches a predicate. Read more
fn any<F>(&mut self, f: F) -> bool where
F: FnMut(Self::Item) -> bool,
source
fn any<F>(&mut self, f: F) -> bool where
F: FnMut(Self::Item) -> bool,
sourceTests if any element of the iterator matches a predicate. Read more
fn find<P>(&mut self, predicate: P) -> Option<Self::Item> where
P: FnMut(&Self::Item) -> bool,
source
fn find<P>(&mut self, predicate: P) -> Option<Self::Item> where
P: FnMut(&Self::Item) -> bool,
sourceSearches for an element of an iterator that satisfies a predicate. Read more
fn find_map<B, F>(&mut self, f: F) -> Option<B> where
F: FnMut(Self::Item) -> Option<B>,
1.30.0 · source
fn find_map<B, F>(&mut self, f: F) -> Option<B> where
F: FnMut(Self::Item) -> Option<B>,
1.30.0 · sourceApplies function to the elements of iterator and returns the first non-none result. Read more
fn try_find<F, R>(
&mut self,
f: F
) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryType where
F: FnMut(&Self::Item) -> R,
R: Try<Output = bool>,
<R as Try>::Residual: Residual<Option<Self::Item>>,
source
fn try_find<F, R>(
&mut self,
f: F
) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryType where
F: FnMut(&Self::Item) -> R,
R: Try<Output = bool>,
<R as Try>::Residual: Residual<Option<Self::Item>>,
sourceApplies function to the elements of iterator and returns the first true result or the first error. Read more
fn position<P>(&mut self, predicate: P) -> Option<usize> where
P: FnMut(Self::Item) -> bool,
source
fn position<P>(&mut self, predicate: P) -> Option<usize> where
P: FnMut(Self::Item) -> bool,
sourceSearches for an element in an iterator, returning its index. Read more
fn rposition<P>(&mut self, predicate: P) -> Option<usize> where
P: FnMut(Self::Item) -> bool,
Self: ExactSizeIterator + DoubleEndedIterator,
source
fn rposition<P>(&mut self, predicate: P) -> Option<usize> where
P: FnMut(Self::Item) -> bool,
Self: ExactSizeIterator + DoubleEndedIterator,
sourceSearches for an element in an iterator from the right, returning its index. Read more
fn max(self) -> Option<Self::Item> where
Self::Item: Ord,
source
fn max(self) -> Option<Self::Item> where
Self::Item: Ord,
sourceReturns the maximum element of an iterator. Read more
fn min(self) -> Option<Self::Item> where
Self::Item: Ord,
source
fn min(self) -> Option<Self::Item> where
Self::Item: Ord,
sourceReturns the minimum element of an iterator. Read more
fn max_by_key<B, F>(self, f: F) -> Option<Self::Item> where
B: Ord,
F: FnMut(&Self::Item) -> B,
1.6.0 · source
fn max_by_key<B, F>(self, f: F) -> Option<Self::Item> where
B: Ord,
F: FnMut(&Self::Item) -> B,
1.6.0 · sourceReturns the element that gives the maximum value from the specified function. Read more
fn max_by<F>(self, compare: F) -> Option<Self::Item> where
F: FnMut(&Self::Item, &Self::Item) -> Ordering,
1.15.0 · source
fn max_by<F>(self, compare: F) -> Option<Self::Item> where
F: FnMut(&Self::Item, &Self::Item) -> Ordering,
1.15.0 · sourceReturns the element that gives the maximum value with respect to the specified comparison function. Read more
fn min_by_key<B, F>(self, f: F) -> Option<Self::Item> where
B: Ord,
F: FnMut(&Self::Item) -> B,
1.6.0 · source
fn min_by_key<B, F>(self, f: F) -> Option<Self::Item> where
B: Ord,
F: FnMut(&Self::Item) -> B,
1.6.0 · sourceReturns the element that gives the minimum value from the specified function. Read more
fn min_by<F>(self, compare: F) -> Option<Self::Item> where
F: FnMut(&Self::Item, &Self::Item) -> Ordering,
1.15.0 · source
fn min_by<F>(self, compare: F) -> Option<Self::Item> where
F: FnMut(&Self::Item, &Self::Item) -> Ordering,
1.15.0 · sourceReturns the element that gives the minimum value with respect to the specified comparison function. Read more
fn rev(self) -> Rev<Self> where
Self: DoubleEndedIterator,
source
fn rev(self) -> Rev<Self> where
Self: DoubleEndedIterator,
sourceReverses an iterator’s direction. Read more
fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB) where
FromA: Default + Extend<A>,
FromB: Default + Extend<B>,
Self: Iterator<Item = (A, B)>,
source
fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB) where
FromA: Default + Extend<A>,
FromB: Default + Extend<B>,
Self: Iterator<Item = (A, B)>,
sourceConverts an iterator of pairs into a pair of containers. Read more
fn copied<'a, T>(self) -> Copied<Self> where
T: 'a + Copy,
Self: Iterator<Item = &'a T>,
1.36.0 · source
fn copied<'a, T>(self) -> Copied<Self> where
T: 'a + Copy,
Self: Iterator<Item = &'a T>,
1.36.0 · sourceCreates an iterator which copies all of its elements. Read more
fn sum<S>(self) -> S where
S: Sum<Self::Item>,
1.11.0 · source
fn sum<S>(self) -> S where
S: Sum<Self::Item>,
1.11.0 · sourceSums the elements of an iterator. Read more
fn product<P>(self) -> P where
P: Product<Self::Item>,
1.11.0 · source
fn product<P>(self) -> P where
P: Product<Self::Item>,
1.11.0 · sourceIterates over the entire iterator, multiplying all the elements Read more
fn cmp<I>(self, other: I) -> Ordering where
I: IntoIterator<Item = Self::Item>,
Self::Item: Ord,
1.5.0 · source
fn cmp<I>(self, other: I) -> Ordering where
I: IntoIterator<Item = Self::Item>,
Self::Item: Ord,
1.5.0 · sourceLexicographically compares the elements of this Iterator with those
of another. Read more
fn cmp_by<I, F>(self, other: I, cmp: F) -> Ordering where
I: IntoIterator,
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,
source
fn cmp_by<I, F>(self, other: I, cmp: F) -> Ordering where
I: IntoIterator,
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,
sourceLexicographically compares the elements of this Iterator with those
of another with respect to the specified comparison function. Read more
fn partial_cmp<I>(self, other: I) -> Option<Ordering> where
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>,
1.5.0 · source
fn partial_cmp<I>(self, other: I) -> Option<Ordering> where
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>,
1.5.0 · sourceLexicographically compares the elements of this Iterator with those
of another. Read more
fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering> where
I: IntoIterator,
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,
source
fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering> where
I: IntoIterator,
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,
sourceLexicographically compares the elements of this Iterator with those
of another with respect to the specified comparison function. Read more
fn eq<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialEq<<I as IntoIterator>::Item>,
1.5.0 · source
fn eq<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialEq<<I as IntoIterator>::Item>,
1.5.0 · sourcefn eq_by<I, F>(self, other: I, eq: F) -> bool where
I: IntoIterator,
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,
source
fn eq_by<I, F>(self, other: I, eq: F) -> bool where
I: IntoIterator,
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,
sourcefn ne<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialEq<<I as IntoIterator>::Item>,
1.5.0 · source
fn ne<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialEq<<I as IntoIterator>::Item>,
1.5.0 · sourcefn lt<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>,
1.5.0 · source
fn lt<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>,
1.5.0 · sourceDetermines if the elements of this Iterator are lexicographically
less than those of another. Read more
fn le<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>,
1.5.0 · source
fn le<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>,
1.5.0 · sourceDetermines if the elements of this Iterator are lexicographically
less or equal to those of another. Read more
fn gt<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>,
1.5.0 · source
fn gt<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>,
1.5.0 · sourceDetermines if the elements of this Iterator are lexicographically
greater than those of another. Read more
fn ge<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>,
1.5.0 · source
fn ge<I>(self, other: I) -> bool where
I: IntoIterator,
Self::Item: PartialOrd<<I as IntoIterator>::Item>,
1.5.0 · sourceDetermines if the elements of this Iterator are lexicographically
greater than or equal to those of another. Read more
fn is_sorted(self) -> bool where
Self::Item: PartialOrd<Self::Item>,
source
fn is_sorted(self) -> bool where
Self::Item: PartialOrd<Self::Item>,
sourceChecks if the elements of this iterator are sorted. Read more
fn is_sorted_by<F>(self, compare: F) -> bool where
F: FnMut(&Self::Item, &Self::Item) -> Option<Ordering>,
source
fn is_sorted_by<F>(self, compare: F) -> bool where
F: FnMut(&Self::Item, &Self::Item) -> Option<Ordering>,
sourceChecks if the elements of this iterator are sorted using the given comparator function. Read more
fn is_sorted_by_key<F, K>(self, f: F) -> bool where
F: FnMut(Self::Item) -> K,
K: PartialOrd<K>,
source
fn is_sorted_by_key<F, K>(self, f: F) -> bool where
F: FnMut(Self::Item) -> K,
K: PartialOrd<K>,
sourceChecks if the elements of this iterator are sorted using the given key extraction function. Read more
impl<T: ?Sized + Ord, A: Allocator> Ord for Box<T, A>
source
impl<T: ?Sized + Ord, A: Allocator> Ord for Box<T, A>
sourceimpl<T: ?Sized + PartialOrd, A: Allocator> PartialOrd<Box<T, A>> for Box<T, A>
source
impl<T: ?Sized + PartialOrd, A: Allocator> PartialOrd<Box<T, A>> for Box<T, A>
sourcefn partial_cmp(&self, other: &Self) -> Option<Ordering>
source
fn partial_cmp(&self, other: &Self) -> Option<Ordering>
sourceThis method returns an ordering between self and other values if one exists. Read more
fn lt(&self, other: &Self) -> bool
source
fn lt(&self, other: &Self) -> bool
sourceThis method tests less than (for self and other) and is used by the < operator. Read more
fn le(&self, other: &Self) -> bool
source
fn le(&self, other: &Self) -> bool
sourceThis method tests less than or equal to (for self and other) and is used by the <=
operator. Read more
impl<T, const N: usize> TryFrom<Box<[T], Global>> for Box<[T; N]>
1.43.0 · source
impl<T, const N: usize> TryFrom<Box<[T], Global>> for Box<[T; N]>
1.43.0 · sourceimpl<T: ?Sized + Unsize<U>, U: ?Sized, A: Allocator> CoerceUnsized<Box<U, A>> for Box<T, A>
sourceimpl<T: ?Sized + Unsize<U>, U: ?Sized> DispatchFromDyn<Box<U, Global>> for Box<T, Global>
sourceimpl<T: ?Sized + Eq, A: Allocator> Eq for Box<T, A>
sourceimpl<I: FusedIterator + ?Sized, A: Allocator> FusedIterator for Box<I, A>
1.26.0 · sourceimpl<T: ?Sized, A: Allocator> Unpin for Box<T, A> where
A: 'static,
1.33.0 (const: unstable) · sourceAuto Trait Implementations
impl<T: ?Sized, A> RefUnwindSafe for Box<T, A> where
A: RefUnwindSafe,
T: RefUnwindSafe,
impl<T: ?Sized, A> Send for Box<T, A> where
A: Send,
T: Send,
impl<T: ?Sized, A> Sync for Box<T, A> where
A: Sync,
T: Sync,
impl<T: ?Sized, A> UnwindSafe for Box<T, A> where
A: UnwindSafe,
T: UnwindSafe,
Blanket Implementations
impl<T> BorrowMut<T> for T where
T: ?Sized,
source
impl<T> BorrowMut<T> for T where
T: ?Sized,
sourcefn borrow_mut(&mut self) -> &mut T
const: unstable · source
fn borrow_mut(&mut self) -> &mut T
const: unstable · sourceMutably borrows from an owned value. Read more
impl<F> IntoFuture for F where
F: Future,
source
impl<F> IntoFuture for F where
F: Future,
sourceimpl<I> IntoIterator for I where
I: Iterator,
source
impl<I> IntoIterator for I where
I: Iterator,
sourceimpl<'a, F> Pattern<'a> for F where
F: FnMut(char) -> bool,
source
impl<'a, F> Pattern<'a> for F where
F: FnMut(char) -> bool,
sourcefn into_searcher(self, haystack: &'a str) -> CharPredicateSearcher<'a, F>
source
fn into_searcher(self, haystack: &'a str) -> CharPredicateSearcher<'a, F>
sourceConstructs the associated searcher from
self and the haystack to search in. Read more
fn is_contained_in(self, haystack: &'a str) -> bool
source
fn is_contained_in(self, haystack: &'a str) -> bool
sourceChecks whether the pattern matches anywhere in the haystack
fn is_prefix_of(self, haystack: &'a str) -> bool
source
fn is_prefix_of(self, haystack: &'a str) -> bool
sourceChecks whether the pattern matches at the front of the haystack
fn strip_prefix_of(self, haystack: &'a str) -> Option<&'a str>
source
fn strip_prefix_of(self, haystack: &'a str) -> Option<&'a str>
sourceRemoves the pattern from the front of haystack, if it matches.
fn is_suffix_of(self, haystack: &'a str) -> bool where
CharPredicateSearcher<'a, F>: ReverseSearcher<'a>,
source
fn is_suffix_of(self, haystack: &'a str) -> bool where
CharPredicateSearcher<'a, F>: ReverseSearcher<'a>,
sourceChecks whether the pattern matches at the back of the haystack
fn strip_suffix_of(self, haystack: &'a str) -> Option<&'a str> where
CharPredicateSearcher<'a, F>: ReverseSearcher<'a>,
source
fn strip_suffix_of(self, haystack: &'a str) -> Option<&'a str> where
CharPredicateSearcher<'a, F>: ReverseSearcher<'a>,
sourceRemoves the pattern from the back of haystack, if it matches.
impl<T> ToOwned for T where
T: Clone,
source
impl<T> ToOwned for T where
T: Clone,
sourcetype Owned = T
type Owned = T
The resulting type after obtaining ownership.
fn clone_into(&self, target: &mut T)
source
fn clone_into(&self, target: &mut T)
sourceUses borrowed data to replace owned data, usually by cloning. Read more