pub unsafe trait TrustedLen: Iterator { }
trusted_len
#37572)Expand description
An iterator that reports an accurate length using size_hint.
The iterator reports a size hint where it is either exact
(lower bound is equal to upper bound), or the upper bound is None
.
The upper bound must only be None
if the actual iterator length is
larger than usize::MAX
. In that case, the lower bound must be
usize::MAX
, resulting in an Iterator::size_hint()
of
(usize::MAX, None)
.
The iterator must produce exactly the number of elements it reported or diverge before reaching the end.
When shouldn’t an adapter be TrustedLen
?
If an adapter makes an iterator shorter by a given amount, then it’s
usually incorrect for that adapter to implement TrustedLen
. The inner
iterator might return more than usize::MAX
items, but there’s no way to
know what k
elements less than that will be, since the size_hint
from
the inner iterator has already saturated and lost that information.
This is why Skip<I>
isn’t TrustedLen
, even when
I
implements TrustedLen
.
Safety
This trait must only be implemented when the contract is upheld. Consumers
of this trait must inspect Iterator::size_hint()
’s upper bound.
Implementors§
impl TrustedLen for IndexRange
impl TrustedLen for Bytes<'_>
impl TrustedLen for StepBy<Range<u8>>
Safety: This macro is only applied to ranges over types <= usize which means the inner length is guaranteed to fit into a usize and so the outer length calculation won’t encounter clamped values
impl TrustedLen for StepBy<Range<u16>>
Safety: This macro is only applied to ranges over types <= usize which means the inner length is guaranteed to fit into a usize and so the outer length calculation won’t encounter clamped values
impl TrustedLen for StepBy<Range<u32>>
Safety: This macro is only applied to ranges over types <= usize which means the inner length is guaranteed to fit into a usize and so the outer length calculation won’t encounter clamped values
impl TrustedLen for StepBy<Range<u64>>
Safety: This macro is only applied to ranges over types <= usize which means the inner length is guaranteed to fit into a usize and so the outer length calculation won’t encounter clamped values
impl TrustedLen for StepBy<Range<usize>>
Safety: This macro is only applied to ranges over types <= usize which means the inner length is guaranteed to fit into a usize and so the outer length calculation won’t encounter clamped values