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 <= idxandidx < self.size().- If
Self: !Clone, thenself.__iterator_get_unchecked(idx)is never called with the same index onselfmore than once. - After
self.__iterator_get_unchecked(idx)has been called, thenself.next_back()will only be called at mostself.size() - idx - 1times. IfSelf: Cloneandselfis cloned, then this number is calculated forselfand its clone individually, butself.next_back()calls that happened before the cloning count for bothselfand the clone. - After
self.__iterator_get_unchecked(idx)has been called, then only the following methods will be called onselfor on any new clones ofself:std::clone::Clone::clonestd::iter::Iterator::size_hintstd::iter::DoubleEndedIterator::next_backstd::iter::ExactSizeIterator::lenstd::iter::Iterator::__iterator_get_uncheckedstd::iter::TrustedRandomAccessNoCoerce::size
- If
Tis a subtype ofSelf, thenselfis allowed to be coerced toT. Ifselfis coerced toTafterself.__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 onselfand 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
selfafter callingself.__iterator_get_unchecked(idx), assuming that the required traits are implemented. - It must also be safe to drop
selfafter callingself.__iterator_get_unchecked(idx). - If
Tis a subtype ofSelf, then it must be safe to coerceselftoT.