Skip to main content

TrustedLen

Trait TrustedLen 

Source
pub unsafe trait TrustedLen: Iterator { }
Expand description

Trait for all types which have a known upper-bound.

Functions that receive a TrustedLen iterator can assume that it’s size_hint is exact, and can pre-allocate memory, unroll loops, or otherwise optimize their implementations accordingly.

§Safety

The type which implements this trait must provide an exact Some upper-bound for its size_hint method. Failure to do so can trigger undefined behavior in users of the trait.

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementations on Foreign Types§

Source§

impl TrustedLen for Range<i8>

Source§

impl TrustedLen for Range<i16>

Source§

impl TrustedLen for Range<i32>

Source§

impl TrustedLen for Range<i64>

Source§

impl TrustedLen for Range<u8>

Source§

impl TrustedLen for Range<u16>

Source§

impl TrustedLen for Range<u32>

Source§

impl TrustedLen for Range<u64>

Source§

impl TrustedLen for Range<usize>

Source§

impl TrustedLen for RangeInclusive<i8>

Source§

impl TrustedLen for RangeInclusive<i16>

Source§

impl TrustedLen for RangeInclusive<i32>

Source§

impl TrustedLen for RangeInclusive<i64>

Source§

impl TrustedLen for RangeInclusive<u8>

Source§

impl TrustedLen for RangeInclusive<u16>

Source§

impl TrustedLen for RangeInclusive<u32>

Source§

impl TrustedLen for RangeInclusive<u64>

Source§

impl TrustedLen for RangeInclusive<usize>

Source§

impl TrustedLen for StepBy<Range<i8>>

Source§

impl TrustedLen for StepBy<Range<i16>>

Source§

impl TrustedLen for StepBy<Range<i32>>

Source§

impl TrustedLen for StepBy<Range<i64>>

Source§

impl TrustedLen for StepBy<Range<u8>>

Source§

impl TrustedLen for StepBy<Range<u16>>

Source§

impl TrustedLen for StepBy<Range<u32>>

Source§

impl TrustedLen for StepBy<Range<u64>>

Source§

impl TrustedLen for StepBy<Range<usize>>

Source§

impl TrustedLen for StepBy<RangeInclusive<i8>>

Source§

impl TrustedLen for StepBy<RangeInclusive<i16>>

Source§

impl TrustedLen for StepBy<RangeInclusive<i32>>

Source§

impl TrustedLen for StepBy<RangeInclusive<i64>>

Source§

impl TrustedLen for StepBy<RangeInclusive<u8>>

Source§

impl TrustedLen for StepBy<RangeInclusive<u16>>

Source§

impl TrustedLen for StepBy<RangeInclusive<u32>>

Source§

impl TrustedLen for StepBy<RangeInclusive<u64>>

Source§

impl TrustedLen for StepBy<RangeInclusive<usize>>

Source§

impl<'a, I, T: 'a, E: 'a> TrustedLen for ProcessResults<'a, I, E>
where I: TrustedLen<Item = Result<T, E>>,

Source§

impl<'a, I, T> TrustedLen for Cloned<I>
where I: TrustedLen<Item = &'a T>, T: Clone + 'a,

Source§

impl<'a, I, T> TrustedLen for Copied<I>
where I: TrustedLen<Item = &'a T>, T: Copy + 'a,

Source§

impl<B, I, F> TrustedLen for Map<I, F>
where I: TrustedLen, F: FnMut(I::Item) -> B,

Source§

impl<I, T> TrustedLen for Enumerate<I>
where I: TrustedLen<Item = T>,

Source§

impl<I> TrustedLen for Skip<I>
where I: TrustedLen,

Source§

impl<T, U> TrustedLen for Zip<T, U>
where T: TrustedLen, U: TrustedLen,

A Zip is only TrustedLen when both halves are, so it cannot be built from an iterator without an exact upper bound, such as std::iter::repeat:

ⓘ
use vortex_buffer::trusted_len::TrustedLen;

fn assert_trusted_len<I: TrustedLen>(_: I) {}
assert_trusted_len([1u8, 2, 3].into_iter().zip(std::iter::repeat(0u8)));

Bound the other half instead, e.g. with std::iter::repeat_n:

use vortex_buffer::trusted_len::TrustedLen;

fn assert_trusted_len<I: TrustedLen>(_: I) {}
assert_trusted_len([1u8, 2, 3].into_iter().zip(std::iter::repeat_n(0u8, 3)));
Source§

impl<T, const N: usize> TrustedLen for IntoIter<T, N>

Source§

impl<T: Clone> TrustedLen for RepeatN<T>

Source§

impl<T> TrustedLen for IntoIter<T>

Source§

impl<T> TrustedLen for Iter<'_, T>

Source§

impl<T> TrustedLen for IterMut<'_, T>

Implementors§