Trait otter_api_tests::iter::ExactSizeIterator 1.0.0[−][src]
pub trait ExactSizeIterator: Iterator { fn len(&self) -> usize { ... } fn is_empty(&self) -> bool { ... } }
Expand description
An iterator that knows its exact length.
Many Iterators don’t know how many times they will iterate, but some do.
If an iterator knows how many times it can iterate, providing access to
that information can be useful. For example, if you want to iterate
backwards, a good start is to know where the end is.
When implementing an ExactSizeIterator, you must also implement
Iterator. When doing so, the implementation of Iterator::size_hint
must return the exact size of the iterator.
The len method has a default implementation, so you usually shouldn’t
implement it. However, you may be able to provide a more performant
implementation than the default, so overriding it in this case makes sense.
Note that this trait is a safe trait and as such does not and cannot
guarantee that the returned length is correct. This means that unsafe
code must not rely on the correctness of Iterator::size_hint. The
unstable and unsafe TrustedLen trait gives
this additional guarantee.
Examples
Basic usage:
// a finite range knows exactly how many times it will iterate let five = 0..5; assert_eq!(5, five.len());
In the module-level docs, we implemented an Iterator, Counter.
Let’s implement ExactSizeIterator for it as well:
impl ExactSizeIterator for Counter { // We can easily calculate the remaining number of iterations. fn len(&self) -> usize { 5 - self.count } } // And now we can use it! let counter = Counter::new(); assert_eq!(5, counter.len());
Provided methods
Returns the exact length of the iterator.
The implementation ensures that the iterator will return exactly len()
more times a Some(T) value, before returning None.
This method has a default implementation, so you usually should not
implement it directly. However, if you can provide a more efficient
implementation, you can do so. See the trait-level docs for an
example.
This function has the same safety guarantees as the
Iterator::size_hint function.
Examples
Basic usage:
// a finite range knows exactly how many times it will iterate let five = 0..5; assert_eq!(5, five.len());
exact_size_is_empty)Returns true if the iterator is empty.
This method has a default implementation using
ExactSizeIterator::len(), so you don’t need to implement it yourself.
Examples
Basic usage:
#![feature(exact_size_is_empty)] let mut one_element = std::iter::once(0); assert!(!one_element.is_empty()); assert_eq!(one_element.next(), Some(0)); assert!(one_element.is_empty()); assert_eq!(one_element.next(), None);
Implementations on Foreign Types
impl<A> ExactSizeIterator for IntoIter<A> where
A: Array, impl<'a, T> ExactSizeIterator for Drain<'a, T> where
T: Array,
impl<'a, T> ExactSizeIterator for Drain<'a, T> where
T: Array, impl<'a, K, V> ExactSizeIterator for IterMut<'a, K, V> where
K: Enum<V>, impl<'a, V> ExactSizeIterator for Values<'a, V> where
V: 'a, impl<'a, K, V> ExactSizeIterator for Iter<'a, K, V> where
K: Enum<V>, impl<'a, V> ExactSizeIterator for ValuesMut<'a, V> where
V: 'a, impl<K, V> ExactSizeIterator for IntoIter<K, V> where
K: Enum<V>, impl<'a, S, T> ExactSizeIterator for SliceChooseIter<'a, S, T> where
T: 'a,
S: Index<usize, Output = T> + 'a + ?Sized, [src]
impl<'a, S, T> ExactSizeIterator for SliceChooseIter<'a, S, T> where
T: 'a,
S: Index<usize, Output = T> + 'a + ?Sized, [src]impl<'p, A, I> ExactSizeIterator for ArrayVecSplice<'p, A, I> where
A: Array,
I: Iterator<Item = <A as Array>::Item>,
impl<'p, A, I> ExactSizeIterator for ArrayVecSplice<'p, A, I> where
A: Array,
I: Iterator<Item = <A as Array>::Item>, impl<'p, A, I> ExactSizeIterator for TinyVecSplice<'p, A, I> where
A: Array,
I: Iterator<Item = <A as Array>::Item>,
impl<'p, A, I> ExactSizeIterator for TinyVecSplice<'p, A, I> where
A: Array,
I: Iterator<Item = <A as Array>::Item>, impl<'a, T> ExactSizeIterator for ArrayVecDrain<'a, T> where
T: 'a + Default, impl<'a, P> ExactSizeIterator for Rows<'a, P> where
P: 'a + Pixel,
<P as Pixel>::Subpixel: 'a,
impl<'a, P> ExactSizeIterator for Rows<'a, P> where
P: 'a + Pixel,
<P as Pixel>::Subpixel: 'a, impl<'a, P> ExactSizeIterator for PixelsMut<'a, P> where
P: 'a + Pixel,
<P as Pixel>::Subpixel: 'a,
impl<'a, P> ExactSizeIterator for PixelsMut<'a, P> where
P: 'a + Pixel,
<P as Pixel>::Subpixel: 'a, impl<'a, P> ExactSizeIterator for EnumeratePixelsMut<'a, P> where
P: 'a + Pixel,
<P as Pixel>::Subpixel: 'a,
impl<'a, P> ExactSizeIterator for EnumeratePixelsMut<'a, P> where
P: 'a + Pixel,
<P as Pixel>::Subpixel: 'a, impl<'a, P> ExactSizeIterator for EnumerateRowsMut<'a, P> where
P: 'a + Pixel,
<P as Pixel>::Subpixel: 'a,
impl<'a, P> ExactSizeIterator for EnumerateRowsMut<'a, P> where
P: 'a + Pixel,
<P as Pixel>::Subpixel: 'a, impl<'a, P> ExactSizeIterator for EnumeratePixels<'a, P> where
P: 'a + Pixel,
<P as Pixel>::Subpixel: 'a,
impl<'a, P> ExactSizeIterator for EnumeratePixels<'a, P> where
P: 'a + Pixel,
<P as Pixel>::Subpixel: 'a, impl<'a, P> ExactSizeIterator for EnumerateRows<'a, P> where
P: 'a + Pixel,
<P as Pixel>::Subpixel: 'a,
impl<'a, P> ExactSizeIterator for EnumerateRows<'a, P> where
P: 'a + Pixel,
<P as Pixel>::Subpixel: 'a, impl<'a, P> ExactSizeIterator for RowsMut<'a, P> where
P: 'a + Pixel,
<P as Pixel>::Subpixel: 'a,
impl<'a, P> ExactSizeIterator for RowsMut<'a, P> where
P: 'a + Pixel,
<P as Pixel>::Subpixel: 'a, impl<'a, P> ExactSizeIterator for Pixels<'a, P> where
P: 'a + Pixel,
<P as Pixel>::Subpixel: 'a,
impl<'a, P> ExactSizeIterator for Pixels<'a, P> where
P: 'a + Pixel,
<P as Pixel>::Subpixel: 'a, impl ExactSizeIterator for CharIter
impl ExactSizeIterator for CharIterimpl<'a> ExactSizeIterator for Bytes<'a>
impl<'a> ExactSizeIterator for Bytes<'a>impl<'a> ExactSizeIterator for DrainBytes<'a>
impl<'a> ExactSizeIterator for DrainBytes<'a>impl<'a, T> ExactSizeIterator for CachedIterMut<'a, T> where
T: 'a + Send, impl<T> ExactSizeIterator for IntoIter<T> where
T: Send, impl<'_, T> ExactSizeIterator for IterMut<'_, T> where
T: Send, impl<T> ExactSizeIterator for CachedIntoIter<T> where
T: Send, impl ExactSizeIterator for CharIter
impl ExactSizeIterator for CharIterimpl<'a, V> ExactSizeIterator for Keys<'a, V>impl<'a, V> ExactSizeIterator for Drain<'a, V>impl<'a, V> ExactSizeIterator for Values<'a, V>impl<V> ExactSizeIterator for IntoIter<V>impl<'a, V> ExactSizeIterator for IterMut<'a, V>impl<'a, V> ExactSizeIterator for Iter<'a, V>impl<'a, V> ExactSizeIterator for ValuesMut<'a, V>impl<'_, Fut> ExactSizeIterator for IterMut<'_, Fut> where
Fut: Unpin, impl<'_, St> ExactSizeIterator for IterMut<'_, St> where
St: Stream + Unpin, impl<'_, Fut> ExactSizeIterator for Iter<'_, Fut> where
Fut: Unpin, impl<'_, St> ExactSizeIterator for Iter<'_, St> where
St: Stream + Unpin, impl<'_, Fut> ExactSizeIterator for IterPinMut<'_, Fut>impl<St> ExactSizeIterator for IntoIter<St> where
St: Stream + Unpin, impl<'_, Fut> ExactSizeIterator for IterPinRef<'_, Fut>impl<Fut> ExactSizeIterator for IntoIter<Fut> where
Fut: Unpin, impl<'_, K, V> ExactSizeIterator for ValuesMut<'_, K, V>
impl<'_, K, V> ExactSizeIterator for ValuesMut<'_, K, V>impl<'a, K> ExactSizeIterator for Iter<'a, K>
impl<'a, K> ExactSizeIterator for Iter<'a, K>impl<K> ExactSizeIterator for IntoIter<K>
impl<K> ExactSizeIterator for IntoIter<K>impl<'_, T> ExactSizeIterator for RawDrain<'_, T>impl<T> ExactSizeIterator for RawIter<T>impl<K, V> ExactSizeIterator for IntoIter<K, V>
impl<K, V> ExactSizeIterator for IntoIter<K, V>impl<'_, K, V> ExactSizeIterator for Keys<'_, K, V>
impl<'_, K, V> ExactSizeIterator for Keys<'_, K, V>impl<T> ExactSizeIterator for RawIntoIter<T>impl<'_, K, V> ExactSizeIterator for Iter<'_, K, V>
impl<'_, K, V> ExactSizeIterator for Iter<'_, K, V>impl<'_, K> ExactSizeIterator for Drain<'_, K>
impl<'_, K> ExactSizeIterator for Drain<'_, K>impl<'_, K, V> ExactSizeIterator for Drain<'_, K, V>
impl<'_, K, V> ExactSizeIterator for Drain<'_, K, V>impl<'_, K, V> ExactSizeIterator for IterMut<'_, K, V>
impl<'_, K, V> ExactSizeIterator for IterMut<'_, K, V>impl<'_, K, V> ExactSizeIterator for Values<'_, K, V>
impl<'_, K, V> ExactSizeIterator for Values<'_, K, V>Implementors
impl<'_, A> ExactSizeIterator for otter_api_tests::imports::failure::_core::option::Iter<'_, A>[src]impl<'_, A> ExactSizeIterator for otter_api_tests::imports::failure::_core::option::IterMut<'_, A>[src]impl<'_, T> ExactSizeIterator for otter_api_tests::imports::failure::_core::result::Iter<'_, T>[src]impl<'_, T> ExactSizeIterator for otter_api_tests::imports::failure::_core::result::IterMut<'_, T>[src]impl<'_, T> ExactSizeIterator for otter_api_tests::imports::failure::_core::slice::IterMut<'_, T>[src]
impl<'_, T> ExactSizeIterator for otter_api_tests::imports::failure::_core::slice::IterMut<'_, T>[src]impl<'a, I, T> ExactSizeIterator for Cloned<I> where
T: 'a + Clone,
I: ExactSizeIterator<Item = &'a T>, 1.1.0[src]
impl<'a, I, T> ExactSizeIterator for Cloned<I> where
T: 'a + Clone,
I: ExactSizeIterator<Item = &'a T>, 1.1.0[src]impl<'a, I, T> ExactSizeIterator for Copied<I> where
T: 'a + Copy,
I: ExactSizeIterator<Item = &'a T>, 1.36.0[src]
impl<'a, I, T> ExactSizeIterator for Copied<I> where
T: 'a + Copy,
I: ExactSizeIterator<Item = &'a T>, 1.36.0[src]impl<'a, K, V> ExactSizeIterator for otter_api_tests::imports::slotmap::basic::Drain<'a, K, V> where
K: Key, [src]impl<'a, K, V> ExactSizeIterator for otter_api_tests::imports::slotmap::basic::Iter<'a, K, V> where
K: Key, [src]impl<'a, K, V> ExactSizeIterator for otter_api_tests::imports::slotmap::basic::IterMut<'a, K, V> where
K: Key, [src]impl<'a, K, V> ExactSizeIterator for otter_api_tests::imports::slotmap::basic::Keys<'a, K, V> where
K: Key, [src]impl<'a, K, V> ExactSizeIterator for otter_api_tests::imports::slotmap::basic::Values<'a, K, V> where
K: Key, [src]impl<'a, K, V> ExactSizeIterator for otter_api_tests::imports::slotmap::basic::ValuesMut<'a, K, V> where
K: Key, [src]impl<'a, K, V> ExactSizeIterator for otter_api_tests::imports::slotmap::dense::Drain<'a, K, V> where
K: 'a + Key, [src]impl<'a, K, V> ExactSizeIterator for otter_api_tests::imports::slotmap::dense::Iter<'a, K, V> where
K: 'a + Key, [src]impl<'a, K, V> ExactSizeIterator for otter_api_tests::imports::slotmap::dense::IterMut<'a, K, V> where
K: 'a + Key, [src]impl<'a, K, V> ExactSizeIterator for otter_api_tests::imports::slotmap::dense::Keys<'a, K, V> where
K: 'a + Key, [src]impl<'a, K, V> ExactSizeIterator for otter_api_tests::imports::slotmap::dense::Values<'a, K, V> where
K: 'a + Key, [src]impl<'a, K, V> ExactSizeIterator for otter_api_tests::imports::slotmap::dense::ValuesMut<'a, K, V> where
K: 'a + Key, [src]impl<'a, K, V> ExactSizeIterator for otter_api_tests::imports::slotmap::hop::Drain<'a, K, V> where
K: Key, [src]impl<'a, K, V> ExactSizeIterator for otter_api_tests::imports::slotmap::hop::Iter<'a, K, V> where
K: Key, [src]impl<'a, K, V> ExactSizeIterator for otter_api_tests::imports::slotmap::hop::IterMut<'a, K, V> where
K: Key, [src]impl<'a, K, V> ExactSizeIterator for otter_api_tests::imports::slotmap::hop::Keys<'a, K, V> where
K: Key, [src]impl<'a, K, V> ExactSizeIterator for otter_api_tests::imports::slotmap::hop::Values<'a, K, V> where
K: Key, [src]impl<'a, K, V> ExactSizeIterator for otter_api_tests::imports::slotmap::hop::ValuesMut<'a, K, V> where
K: Key, [src]impl<'a, K, V> ExactSizeIterator for otter_api_tests::imports::slotmap::secondary::Drain<'a, K, V> where
K: Key, [src]impl<'a, K, V> ExactSizeIterator for otter_api_tests::imports::slotmap::secondary::Iter<'a, K, V> where
K: Key, [src]impl<'a, K, V> ExactSizeIterator for otter_api_tests::imports::slotmap::secondary::IterMut<'a, K, V> where
K: Key, [src]impl<'a, K, V> ExactSizeIterator for otter_api_tests::imports::slotmap::secondary::Keys<'a, K, V> where
K: Key, [src]impl<'a, K, V> ExactSizeIterator for otter_api_tests::imports::slotmap::secondary::Values<'a, K, V> where
K: Key, [src]impl<'a, K, V> ExactSizeIterator for otter_api_tests::imports::slotmap::secondary::ValuesMut<'a, K, V> where
K: Key, [src]impl<'a, K, V> ExactSizeIterator for otter_api_tests::imports::slotmap::sparse_secondary::Drain<'a, K, V> where
K: Key, [src]impl<'a, K, V> ExactSizeIterator for otter_api_tests::imports::slotmap::sparse_secondary::Iter<'a, K, V> where
K: Key, [src]impl<'a, K, V> ExactSizeIterator for otter_api_tests::imports::slotmap::sparse_secondary::IterMut<'a, K, V> where
K: Key, [src]impl<'a, K, V> ExactSizeIterator for otter_api_tests::imports::slotmap::sparse_secondary::Keys<'a, K, V> where
K: Key, [src]impl<'a, K, V> ExactSizeIterator for otter_api_tests::imports::slotmap::sparse_secondary::Values<'a, K, V> where
K: Key, [src]impl<'a, K, V> ExactSizeIterator for otter_api_tests::imports::slotmap::sparse_secondary::ValuesMut<'a, K, V> where
K: Key, [src]impl<'a, T, const CAP: usize> ExactSizeIterator for otter_api_tests::imports::otter_base::imports::arrayvec::Drain<'a, T, CAP> where
T: 'a, [src]impl<'r> ExactSizeIterator for otter_api_tests::imports::regex::bytes::CaptureNames<'r>impl<'r> ExactSizeIterator for otter_api_tests::imports::regex::CaptureNames<'r>impl<A> ExactSizeIterator for otter_api_tests::imports::otter_base::imports::itertools::Zip<(A,)> where
A: ExactSizeIterator, [src]impl<A, B> ExactSizeIterator for otter_api_tests::imports::otter_base::imports::itertools::Zip<(A, B)> where
B: ExactSizeIterator,
A: ExactSizeIterator, [src]impl<A, B> ExactSizeIterator for otter_api_tests::iter::Zip<A, B> where
B: ExactSizeIterator,
A: ExactSizeIterator, [src]impl<A, B, C> ExactSizeIterator for otter_api_tests::imports::otter_base::imports::itertools::Zip<(A, B, C)> where
C: ExactSizeIterator,
B: ExactSizeIterator,
A: ExactSizeIterator, [src]impl<A, B, C, D> ExactSizeIterator for otter_api_tests::imports::otter_base::imports::itertools::Zip<(A, B, C, D)> where
C: ExactSizeIterator,
B: ExactSizeIterator,
A: ExactSizeIterator,
D: ExactSizeIterator, [src]impl<A, B, C, D, E> ExactSizeIterator for otter_api_tests::imports::otter_base::imports::itertools::Zip<(A, B, C, D, E)> where
C: ExactSizeIterator,
E: ExactSizeIterator,
B: ExactSizeIterator,
A: ExactSizeIterator,
D: ExactSizeIterator, [src]impl<A, B, C, D, E, F> ExactSizeIterator for otter_api_tests::imports::otter_base::imports::itertools::Zip<(A, B, C, D, E, F)> where
C: ExactSizeIterator,
E: ExactSizeIterator,
B: ExactSizeIterator,
A: ExactSizeIterator,
F: ExactSizeIterator,
D: ExactSizeIterator, [src]impl<A, B, C, D, E, F, G> ExactSizeIterator for otter_api_tests::imports::otter_base::imports::itertools::Zip<(A, B, C, D, E, F, G)> where
C: ExactSizeIterator,
E: ExactSizeIterator,
B: ExactSizeIterator,
G: ExactSizeIterator,
A: ExactSizeIterator,
F: ExactSizeIterator,
D: ExactSizeIterator, [src]impl<A, B, C, D, E, F, G, H> ExactSizeIterator for otter_api_tests::imports::otter_base::imports::itertools::Zip<(A, B, C, D, E, F, G, H)> where
C: ExactSizeIterator,
E: ExactSizeIterator,
B: ExactSizeIterator,
G: ExactSizeIterator,
A: ExactSizeIterator,
F: ExactSizeIterator,
D: ExactSizeIterator,
H: ExactSizeIterator, [src]impl<A, B, C, D, E, F, G, H, I> ExactSizeIterator for otter_api_tests::imports::otter_base::imports::itertools::Zip<(A, B, C, D, E, F, G, H, I)> where
C: ExactSizeIterator,
E: ExactSizeIterator,
B: ExactSizeIterator,
G: ExactSizeIterator,
A: ExactSizeIterator,
F: ExactSizeIterator,
I: ExactSizeIterator,
D: ExactSizeIterator,
H: ExactSizeIterator, [src]impl<A, B, C, D, E, F, G, H, I, J> ExactSizeIterator for otter_api_tests::imports::otter_base::imports::itertools::Zip<(A, B, C, D, E, F, G, H, I, J)> where
C: ExactSizeIterator,
E: ExactSizeIterator,
B: ExactSizeIterator,
G: ExactSizeIterator,
A: ExactSizeIterator,
F: ExactSizeIterator,
I: ExactSizeIterator,
D: ExactSizeIterator,
H: ExactSizeIterator,
J: ExactSizeIterator, [src]impl<A, B, C, D, E, F, G, H, I, J, K> ExactSizeIterator for otter_api_tests::imports::otter_base::imports::itertools::Zip<(A, B, C, D, E, F, G, H, I, J, K)> where
C: ExactSizeIterator,
E: ExactSizeIterator,
B: ExactSizeIterator,
G: ExactSizeIterator,
A: ExactSizeIterator,
K: ExactSizeIterator,
F: ExactSizeIterator,
I: ExactSizeIterator,
D: ExactSizeIterator,
H: ExactSizeIterator,
J: ExactSizeIterator, [src]impl<A, B, C, D, E, F, G, H, I, J, K, L> ExactSizeIterator for otter_api_tests::imports::otter_base::imports::itertools::Zip<(A, B, C, D, E, F, G, H, I, J, K, L)> where
C: ExactSizeIterator,
E: ExactSizeIterator,
L: ExactSizeIterator,
B: ExactSizeIterator,
G: ExactSizeIterator,
A: ExactSizeIterator,
K: ExactSizeIterator,
F: ExactSizeIterator,
I: ExactSizeIterator,
D: ExactSizeIterator,
H: ExactSizeIterator,
J: ExactSizeIterator, [src]impl<B, I, F> ExactSizeIterator for Map<I, F> where
F: FnMut(<I as Iterator>::Item) -> B,
I: ExactSizeIterator, [src]
impl<B, I, F> ExactSizeIterator for Map<I, F> where
F: FnMut(<I as Iterator>::Item) -> B,
I: ExactSizeIterator, [src]impl<I> ExactSizeIterator for Tee<I> where
I: ExactSizeIterator,
<I as Iterator>::Item: Clone, [src]impl<I, F> ExactSizeIterator for PadUsing<I, F> where
F: FnMut(usize) -> <I as Iterator>::Item,
I: ExactSizeIterator, [src]impl<I, F> ExactSizeIterator for Update<I, F> where
F: FnMut(&mut <I as Iterator>::Item),
I: ExactSizeIterator, [src]impl<I, F> ExactSizeIterator for Inspect<I, F> where
F: FnMut(&<I as Iterator>::Item),
I: ExactSizeIterator, [src]
impl<I, F> ExactSizeIterator for Inspect<I, F> where
F: FnMut(&<I as Iterator>::Item),
I: ExactSizeIterator, [src]impl<I, J> ExactSizeIterator for ZipEq<I, J> where
I: ExactSizeIterator,
J: ExactSizeIterator, [src]impl<K, V> ExactSizeIterator for otter_api_tests::imports::slotmap::basic::IntoIter<K, V> where
K: Key, [src]impl<K, V> ExactSizeIterator for otter_api_tests::imports::slotmap::dense::IntoIter<K, V> where
K: Key, [src]impl<K, V> ExactSizeIterator for otter_api_tests::imports::slotmap::hop::IntoIter<K, V> where
K: Key, [src]impl<K, V> ExactSizeIterator for otter_api_tests::imports::slotmap::secondary::IntoIter<K, V> where
K: Key, [src]impl<K, V> ExactSizeIterator for otter_api_tests::imports::slotmap::sparse_secondary::IntoIter<K, V> where
K: Key, [src]impl<L, R> ExactSizeIterator for Either<L, R> where
L: ExactSizeIterator,
R: ExactSizeIterator<Item = <L as Iterator>::Item>, [src]impl<T, N> ExactSizeIterator for GenericArrayIter<T, N> where
N: ArrayLength<T>,
impl<T, N> ExactSizeIterator for GenericArrayIter<T, N> where
N: ArrayLength<T>, impl<T, U> ExactSizeIterator for ZipLongest<T, U> where
T: ExactSizeIterator,
U: ExactSizeIterator, [src]impl<T, const CAP: usize> ExactSizeIterator for otter_api_tests::imports::otter_base::imports::arrayvec::IntoIter<T, CAP>[src]