pub struct DstBase<D: ?Sized + Pointee, A: Alignment, const N: usize> { /* private fields */ }Expand description
Sized object that stores a DST object, such as a trait object, on the stack.
The layout of DstBase consists of the DST metadata (for trait objects, this is the vtable
pointer) and a fixed block of memory storing the actual object.
DstBase implements Deref and DerefMut for the DST, so it can be used in place of the DST
in most use-cases.
let dst = Dst::<dyn ToString, 8>::new(12u32);
assert_eq!(dst.to_string(), "12");Rather than using DstBase directly, use Dst, which is aligned to the target word boundary.
This is almost always what you want.
§Alignment and Capacity
The alignment and capacity of the backing storage are specified via the generic parameters A
and N respectively. Since DST objects can have any size and alignment, the object being
stored must fit and be well-aligned within the backing storage. These checks are done at
compile-time, resulting in a compile-time error if the size or alignment requirements are
not met.
For example, the following will work:
// u32 fits within 8 bytes and an alignment of 4
let dst = DstBase::<dyn std::fmt::Debug, A4, 8>::new(12u32);however, this will fail to compile due to insufficient capacity:
// [u32; 3] does not fit within 8 bytes
let dst = DstBase::<dyn std::fmt::Debug, A4, 8>::new([1u32, 23u32, 0u32]);and this will also fail to compile due to insufficient alignment:
// f64 does not fit the alignment requirement of 4 bytes
let dst = DstBase::<dyn std::fmt::Debug, A4, 8>::new(12.0f64);Implementations§
Source§impl<D: ?Sized, A: Alignment, const N: usize> DstBase<D, A, N>
impl<D: ?Sized, A: Alignment, const N: usize> DstBase<D, A, N>
Sourcepub fn new<T: Unsize<D>>(value: T) -> Self
pub fn new<T: Unsize<D>>(value: T) -> Self
Create a new DstBase from a sized value.
value is coerced from its original type into the type D and stored into the DstBase.
The size and alignment of value are checked against the DstBase parameters at
compile-time, resulting in a compile error if value doesn’t fit.
Trait Implementations§
Source§impl<Rhs, D: ?Sized + AddAssign<Rhs>, A: Alignment, const N: usize> AddAssign<Rhs> for DstBase<D, A, N>
impl<Rhs, D: ?Sized + AddAssign<Rhs>, A: Alignment, const N: usize> AddAssign<Rhs> for DstBase<D, A, N>
Source§fn add_assign(&mut self, rhs: Rhs)
fn add_assign(&mut self, rhs: Rhs)
+= operation. Read moreSource§impl<T: ?Sized, D: ?Sized + AsMut<T>, A: Alignment, const N: usize> AsMut<T> for DstBase<D, A, N>
impl<T: ?Sized, D: ?Sized + AsMut<T>, A: Alignment, const N: usize> AsMut<T> for DstBase<D, A, N>
Source§impl<T: ?Sized, D: ?Sized + AsRef<T>, A: Alignment, const N: usize> AsRef<T> for DstBase<D, A, N>
impl<T: ?Sized, D: ?Sized + AsRef<T>, A: Alignment, const N: usize> AsRef<T> for DstBase<D, A, N>
Source§impl<Rhs, D: ?Sized + BitAndAssign<Rhs>, A: Alignment, const N: usize> BitAndAssign<Rhs> for DstBase<D, A, N>
impl<Rhs, D: ?Sized + BitAndAssign<Rhs>, A: Alignment, const N: usize> BitAndAssign<Rhs> for DstBase<D, A, N>
Source§fn bitand_assign(&mut self, rhs: Rhs)
fn bitand_assign(&mut self, rhs: Rhs)
&= operation. Read moreSource§impl<Rhs, D: ?Sized + BitOrAssign<Rhs>, A: Alignment, const N: usize> BitOrAssign<Rhs> for DstBase<D, A, N>
impl<Rhs, D: ?Sized + BitOrAssign<Rhs>, A: Alignment, const N: usize> BitOrAssign<Rhs> for DstBase<D, A, N>
Source§fn bitor_assign(&mut self, rhs: Rhs)
fn bitor_assign(&mut self, rhs: Rhs)
|= operation. Read moreSource§impl<Rhs, D: ?Sized + BitXorAssign<Rhs>, A: Alignment, const N: usize> BitXorAssign<Rhs> for DstBase<D, A, N>
impl<Rhs, D: ?Sized + BitXorAssign<Rhs>, A: Alignment, const N: usize> BitXorAssign<Rhs> for DstBase<D, A, N>
Source§fn bitxor_assign(&mut self, rhs: Rhs)
fn bitxor_assign(&mut self, rhs: Rhs)
^= operation. Read moreSource§impl<D: ?Sized, A: Alignment, const N: usize> BorrowMut<D> for DstBase<D, A, N>
impl<D: ?Sized, A: Alignment, const N: usize> BorrowMut<D> for DstBase<D, A, N>
Source§fn borrow_mut(&mut self) -> &mut D
fn borrow_mut(&mut self) -> &mut D
Source§impl<Rhs, D: ?Sized + DivAssign<Rhs>, A: Alignment, const N: usize> DivAssign<Rhs> for DstBase<D, A, N>
impl<Rhs, D: ?Sized + DivAssign<Rhs>, A: Alignment, const N: usize> DivAssign<Rhs> for DstBase<D, A, N>
Source§fn div_assign(&mut self, rhs: Rhs)
fn div_assign(&mut self, rhs: Rhs)
/= operation. Read moreSource§impl<D: ?Sized + DoubleEndedIterator, A: Alignment, const N: usize> DoubleEndedIterator for DstBase<D, A, N>
impl<D: ?Sized + DoubleEndedIterator, A: Alignment, const N: usize> DoubleEndedIterator for DstBase<D, A, N>
Source§fn next_back(&mut self) -> Option<Self::Item>
fn next_back(&mut self) -> Option<Self::Item>
Source§fn nth_back(&mut self, n: usize) -> Option<Self::Item>
fn nth_back(&mut self, n: usize) -> Option<Self::Item>
nth 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)n elements. Read more1.27.0 · Source§fn try_rfold<B, F, R>(&mut self, init: B, f: F) -> R
fn try_rfold<B, F, R>(&mut self, init: B, f: F) -> R
Iterator::try_fold(): it takes
elements starting from the back of the iterator. Read moreSource§impl<D: ?Sized + Error, A: Alignment, const N: usize> Error for DstBase<D, A, N>
impl<D: ?Sized + Error, A: Alignment, const N: usize> Error for DstBase<D, A, N>
Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
Source§impl<D: ?Sized + ExactSizeIterator, A: Alignment, const N: usize> ExactSizeIterator for DstBase<D, A, N>
impl<D: ?Sized + ExactSizeIterator, A: Alignment, const N: usize> ExactSizeIterator for DstBase<D, A, N>
Source§impl<D: ?Sized + Hasher, A: Alignment, const N: usize> Hasher for DstBase<D, A, N>
impl<D: ?Sized + Hasher, A: Alignment, const N: usize> Hasher for DstBase<D, A, N>
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.Source§fn write_length_prefix(&mut self, len: usize)
fn write_length_prefix(&mut self, len: usize)
hasher_prefixfree_extras)Source§impl<Idx, D: ?Sized + Index<Idx>, A: Alignment, const N: usize> Index<Idx> for DstBase<D, A, N>
impl<Idx, D: ?Sized + Index<Idx>, A: Alignment, const N: usize> Index<Idx> for DstBase<D, A, N>
Source§impl<Idx, D: ?Sized + IndexMut<Idx>, A: Alignment, const N: usize> IndexMut<Idx> for DstBase<D, A, N>
impl<Idx, D: ?Sized + IndexMut<Idx>, A: Alignment, const N: usize> IndexMut<Idx> for DstBase<D, A, N>
Source§impl<D: ?Sized + Iterator, A: Alignment, const N: usize> Iterator for DstBase<D, A, N>
impl<D: ?Sized + Iterator, A: Alignment, const N: usize> Iterator for DstBase<D, A, N>
Source§fn next(&mut self) -> Option<Self::Item>
fn next(&mut self) -> Option<Self::Item>
Source§fn size_hint(&self) -> (usize, Option<usize>)
fn size_hint(&self) -> (usize, Option<usize>)
Source§fn nth(&mut self, n: usize) -> Option<Self::Item>
fn nth(&mut self, n: usize) -> Option<Self::Item>
nth element of the iterator. Read moreSource§fn next_chunk<const N: usize>(
&mut self,
) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where
Self: Sized,
fn next_chunk<const N: usize>(
&mut self,
) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where
Self: Sized,
iter_next_chunk)N values. Read more1.0.0 · Source§fn count(self) -> usizewhere
Self: Sized,
fn count(self) -> usizewhere
Self: Sized,
1.0.0 · Source§fn last(self) -> Option<Self::Item>where
Self: Sized,
fn last(self) -> Option<Self::Item>where
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)n elements. Read more1.28.0 · Source§fn step_by(self, step: usize) -> StepBy<Self>where
Self: Sized,
fn step_by(self, step: usize) -> StepBy<Self>where
Self: Sized,
1.0.0 · Source§fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>
fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>
1.0.0 · Source§fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where
Self: Sized,
U: IntoIterator,
fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where
Self: Sized,
U: IntoIterator,
Source§fn intersperse(self, separator: Self::Item) -> Intersperse<Self>
fn intersperse(self, separator: Self::Item) -> Intersperse<Self>
iter_intersperse)separator between adjacent
items of the original iterator. Read moreSource§fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>
fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>
iter_intersperse)separator
between adjacent items of the original iterator. Read more1.0.0 · Source§fn map<B, F>(self, f: F) -> Map<Self, F>
fn map<B, F>(self, f: F) -> Map<Self, F>
1.0.0 · Source§fn filter<P>(self, predicate: P) -> Filter<Self, P>
fn filter<P>(self, predicate: P) -> Filter<Self, P>
1.0.0 · Source§fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>
fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>
1.0.0 · Source§fn enumerate(self) -> Enumerate<Self>where
Self: Sized,
fn enumerate(self) -> Enumerate<Self>where
Self: Sized,
1.0.0 · Source§fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>
fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>
1.0.0 · Source§fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>
fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>
1.57.0 · Source§fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>
fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>
1.0.0 · Source§fn skip(self, n: usize) -> Skip<Self>where
Self: Sized,
fn skip(self, n: usize) -> Skip<Self>where
Self: Sized,
n elements. Read more1.0.0 · Source§fn take(self, n: usize) -> Take<Self>where
Self: Sized,
fn take(self, n: usize) -> Take<Self>where
Self: Sized,
n elements, or fewer
if the underlying iterator ends sooner. Read more1.0.0 · Source§fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>
fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>
1.29.0 · Source§fn flatten(self) -> Flatten<Self>
fn flatten(self) -> Flatten<Self>
Source§fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>
fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>
iter_map_windows)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<F>(self, f: F) -> Inspect<Self, F>
fn inspect<F>(self, f: F) -> Inspect<Self, F>
1.0.0 · Source§fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
Iterator. Read moreSource§fn try_collect<B>(
&mut self,
) -> <<Self::Item as Try>::Residual as Residual<B>>::TryType
fn try_collect<B>( &mut self, ) -> <<Self::Item as Try>::Residual as Residual<B>>::TryType
iterator_try_collect)Source§fn collect_into<E>(self, collection: &mut E) -> &mut E
fn collect_into<E>(self, collection: &mut E) -> &mut E
iter_collect_into)1.0.0 · Source§fn partition<B, F>(self, f: F) -> (B, B)
fn partition<B, F>(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)true precede all those that return false.
Returns the number of true elements found. Read moreSource§fn is_partitioned<P>(self, predicate: P) -> bool
fn is_partitioned<P>(self, predicate: P) -> bool
iter_is_partitioned)true precede all those that return false. Read more1.27.0 · Source§fn try_fold<B, F, R>(&mut self, init: B, f: F) -> R
fn try_fold<B, F, R>(&mut self, init: B, f: F) -> R
1.27.0 · Source§fn try_for_each<F, R>(&mut self, f: F) -> R
fn try_for_each<F, R>(&mut self, f: F) -> R
1.0.0 · Source§fn fold<B, F>(self, init: B, f: F) -> B
fn fold<B, F>(self, init: B, f: F) -> B
1.51.0 · Source§fn reduce<F>(self, f: F) -> Option<Self::Item>
fn reduce<F>(self, f: F) -> Option<Self::Item>
Source§fn try_reduce<R>(
&mut self,
f: impl FnMut(Self::Item, Self::Item) -> R,
) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryType
fn try_reduce<R>( &mut self, f: impl FnMut(Self::Item, Self::Item) -> R, ) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryType
iterator_try_reduce)1.0.0 · Source§fn all<F>(&mut self, f: F) -> bool
fn all<F>(&mut self, f: F) -> bool
1.0.0 · Source§fn any<F>(&mut self, f: F) -> bool
fn any<F>(&mut self, f: F) -> bool
1.0.0 · Source§fn find<P>(&mut self, predicate: P) -> Option<Self::Item>
fn find<P>(&mut self, predicate: P) -> Option<Self::Item>
1.30.0 · Source§fn find_map<B, F>(&mut self, f: F) -> Option<B>
fn find_map<B, F>(&mut self, f: F) -> Option<B>
Source§fn try_find<R>(
&mut self,
f: impl FnMut(&Self::Item) -> R,
) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryType
fn try_find<R>( &mut self, f: impl FnMut(&Self::Item) -> R, ) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryType
try_find)1.0.0 · Source§fn position<P>(&mut self, predicate: P) -> Option<usize>
fn position<P>(&mut self, predicate: P) -> Option<usize>
1.0.0 · Source§fn rposition<P>(&mut self, predicate: P) -> Option<usize>
fn rposition<P>(&mut self, predicate: P) -> Option<usize>
1.0.0 · Source§fn max(self) -> Option<Self::Item>
fn max(self) -> Option<Self::Item>
1.0.0 · Source§fn min(self) -> Option<Self::Item>
fn min(self) -> Option<Self::Item>
1.6.0 · Source§fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>
fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>
1.15.0 · Source§fn max_by<F>(self, compare: F) -> Option<Self::Item>
fn max_by<F>(self, compare: F) -> Option<Self::Item>
1.6.0 · Source§fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>
fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>
1.15.0 · Source§fn min_by<F>(self, compare: F) -> Option<Self::Item>
fn min_by<F>(self, compare: F) -> Option<Self::Item>
1.0.0 · Source§fn rev(self) -> Rev<Self>where
Self: Sized + DoubleEndedIterator,
fn rev(self) -> Rev<Self>where
Self: Sized + DoubleEndedIterator,
1.0.0 · Source§fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)
fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)
1.36.0 · Source§fn copied<'a, T>(self) -> Copied<Self>
fn copied<'a, T>(self) -> Copied<Self>
Source§fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where
Self: Sized,
fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where
Self: Sized,
iter_array_chunks)N elements of the iterator at a time. Read more1.11.0 · Source§fn product<P>(self) -> P
fn product<P>(self) -> P
Source§fn cmp_by<I, F>(self, other: I, cmp: F) -> Ordering
fn cmp_by<I, F>(self, other: I, cmp: F) -> Ordering
iter_order_by)Iterator with those
of another with respect to the specified comparison function. Read more1.5.0 · Source§fn partial_cmp<I>(self, other: I) -> Option<Ordering>
fn partial_cmp<I>(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<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where
Self: Sized,
I: IntoIterator,
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,
fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where
Self: Sized,
I: IntoIterator,
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,
iter_order_by)Iterator with those
of another with respect to the specified comparison function. Read moreSource§fn eq_by<I, F>(self, other: I, eq: F) -> bool
fn eq_by<I, F>(self, other: I, eq: F) -> bool
iter_order_by)1.5.0 · Source§fn lt<I>(self, other: I) -> bool
fn lt<I>(self, other: I) -> bool
Iterator are lexicographically
less than those of another. Read more1.5.0 · Source§fn le<I>(self, other: I) -> bool
fn le<I>(self, other: I) -> bool
Iterator are lexicographically
less or equal to those of another. Read more1.5.0 · Source§fn gt<I>(self, other: I) -> bool
fn gt<I>(self, other: I) -> bool
Iterator are lexicographically
greater than those of another. Read more1.5.0 · Source§fn ge<I>(self, other: I) -> bool
fn ge<I>(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<F>(self, compare: F) -> bool
fn is_sorted_by<F>(self, compare: F) -> bool
1.82.0 · Source§fn is_sorted_by_key<F, K>(self, f: F) -> bool
fn is_sorted_by_key<F, K>(self, f: F) -> bool
Source§impl<Rhs, D: ?Sized + MulAssign<Rhs>, A: Alignment, const N: usize> MulAssign<Rhs> for DstBase<D, A, N>
impl<Rhs, D: ?Sized + MulAssign<Rhs>, A: Alignment, const N: usize> MulAssign<Rhs> for DstBase<D, A, N>
Source§fn mul_assign(&mut self, rhs: Rhs)
fn mul_assign(&mut self, rhs: Rhs)
*= operation. Read moreSource§impl<D: ?Sized + Ord, A: Alignment, const N: usize> Ord for DstBase<D, A, N>
impl<D: ?Sized + Ord, A: Alignment, const N: usize> Ord for DstBase<D, A, N>
Source§impl<D: ?Sized + PartialOrd, A: Alignment, const N: usize> PartialOrd for DstBase<D, A, N>
impl<D: ?Sized + PartialOrd, A: Alignment, const N: usize> PartialOrd for DstBase<D, A, N>
Source§impl<Rhs, D: ?Sized + RemAssign<Rhs>, A: Alignment, const N: usize> RemAssign<Rhs> for DstBase<D, A, N>
impl<Rhs, D: ?Sized + RemAssign<Rhs>, A: Alignment, const N: usize> RemAssign<Rhs> for DstBase<D, A, N>
Source§fn rem_assign(&mut self, rhs: Rhs)
fn rem_assign(&mut self, rhs: Rhs)
%= operation. Read moreSource§impl<Rhs, D: ?Sized + ShlAssign<Rhs>, A: Alignment, const N: usize> ShlAssign<Rhs> for DstBase<D, A, N>
impl<Rhs, D: ?Sized + ShlAssign<Rhs>, A: Alignment, const N: usize> ShlAssign<Rhs> for DstBase<D, A, N>
Source§fn shl_assign(&mut self, rhs: Rhs)
fn shl_assign(&mut self, rhs: Rhs)
<<= operation. Read moreSource§impl<Rhs, D: ?Sized + ShrAssign<Rhs>, A: Alignment, const N: usize> ShrAssign<Rhs> for DstBase<D, A, N>
impl<Rhs, D: ?Sized + ShrAssign<Rhs>, A: Alignment, const N: usize> ShrAssign<Rhs> for DstBase<D, A, N>
Source§fn shr_assign(&mut self, rhs: Rhs)
fn shr_assign(&mut self, rhs: Rhs)
>>= operation. Read moreSource§impl<Rhs, D: ?Sized + SubAssign<Rhs>, A: Alignment, const N: usize> SubAssign<Rhs> for DstBase<D, A, N>
impl<Rhs, D: ?Sized + SubAssign<Rhs>, A: Alignment, const N: usize> SubAssign<Rhs> for DstBase<D, A, N>
Source§fn sub_assign(&mut self, rhs: Rhs)
fn sub_assign(&mut self, rhs: Rhs)
-= operation. Read more