pub unsafe trait TrustedRandomAccess: TrustedRandomAccessNoCoerce { }
trusted_random_access
)Expand description
An iterator whose items are random-accessible efficiently
Safety
The iterator’s size_hint
must be exact and cheap to call.
TrustedRandomAccessNoCoerce::size
may not be overridden.
All subtypes and all supertypes of Self
must also implement TrustedRandomAccess
.
In particular, this means that types with non-invariant parameters usually can not have
an impl for TrustedRandomAccess
that depends on any trait bounds on such parameters, except
for bounds that come from the respective struct/enum definition itself, or bounds involving
traits that themselves come with a guarantee similar to this one.
If Self: ExactSizeIterator
then self.len()
must always produce results consistent
with self.size()
.
If Self: Iterator
, then <Self as Iterator>::__iterator_get_unchecked(&mut self, idx)
must be safe to call provided the following conditions are met.
0 <= idx
andidx < self.size()
.- If
Self: !Clone
, thenself.__iterator_get_unchecked(idx)
is never called with the same index onself
more than once. - After
self.__iterator_get_unchecked(idx)
has been called, thenself.next_back()
will only be called at mostself.size() - idx - 1
times. IfSelf: Clone
andself
is cloned, then this number is calculated forself
and its clone individually, butself.next_back()
calls that happened before the cloning count for bothself
and the clone. - After
self.__iterator_get_unchecked(idx)
has been called, then only the following methods will be called onself
or on any new clones ofself
:std::clone::Clone::clone
std::iter::Iterator::size_hint
std::iter::DoubleEndedIterator::next_back
std::iter::ExactSizeIterator::len
std::iter::Iterator::__iterator_get_unchecked
std::iter::TrustedRandomAccessNoCoerce::size
- If
T
is a subtype ofSelf
, thenself
is allowed to be coerced toT
. Ifself
is coerced toT
afterself.__iterator_get_unchecked(idx)
has already been called, then no methods except for the ones listed under 4. are allowed to be called on the resulting value of typeT
, either. Multiple such coercion steps are allowed. Regarding 2. and 3., the number of times__iterator_get_unchecked(idx)
ornext_back()
is called onself
and the resulting value of typeT
(and on further coercion results with sub-subtypes) are added together and their sums must not exceed the specified bounds.
Further, given that these conditions are met, it must guarantee that:
- It does not change the value returned from
size_hint
- It must be safe to call the methods listed above on
self
after callingself.__iterator_get_unchecked(idx)
, assuming that the required traits are implemented. - It must also be safe to drop
self
after callingself.__iterator_get_unchecked(idx)
. - If
T
is a subtype ofSelf
, then it must be safe to coerceself
toT
.