1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
use crate::iter::{FusedIterator, TrustedLen}; /// Creates a new iterator that endlessly repeats a single element. /// /// The `repeat()` function repeats a single value over and over again. /// /// Infinite iterators like `repeat()` are often used with adapters like /// [`Iterator::take()`], in order to make them finite. /// /// If the element type of the iterator you need does not implement `Clone`, /// or if you do not want to keep the repeated element in memory, you can /// instead use the [`repeat_with()`] function. /// /// [`repeat_with()`]: crate::iter::repeat_with /// /// # Examples /// /// Basic usage: /// /// ``` /// use std::iter; /// /// // the number four 4ever: /// let mut fours = iter::repeat(4); /// /// assert_eq!(Some(4), fours.next()); /// assert_eq!(Some(4), fours.next()); /// assert_eq!(Some(4), fours.next()); /// assert_eq!(Some(4), fours.next()); /// assert_eq!(Some(4), fours.next()); /// /// // yup, still four /// assert_eq!(Some(4), fours.next()); /// ``` /// /// Going finite with [`Iterator::take()`]: /// /// ``` /// use std::iter; /// /// // that last example was too many fours. Let's only have four fours. /// let mut four_fours = iter::repeat(4).take(4); /// /// assert_eq!(Some(4), four_fours.next()); /// assert_eq!(Some(4), four_fours.next()); /// assert_eq!(Some(4), four_fours.next()); /// assert_eq!(Some(4), four_fours.next()); /// /// // ... and now we're done /// assert_eq!(None, four_fours.next()); /// ``` #[inline] #[stable(feature = "rust1", since = "1.0.0")] pub fn repeat<T: Clone>(elt: T) -> Repeat<T> { Repeat { element: elt } } /// An iterator that repeats an element endlessly. /// /// This `struct` is created by the [`repeat()`] function. See its documentation for more. #[derive(Clone, Debug)] #[stable(feature = "rust1", since = "1.0.0")] pub struct Repeat<A> { element: A, } #[stable(feature = "rust1", since = "1.0.0")] impl<A: Clone> Iterator for Repeat<A> { type Item = A; #[inline] fn next(&mut self) -> Option<A> { Some(self.element.clone()) } #[inline] fn size_hint(&self) -> (usize, Option<usize>) { (usize::MAX, None) } } #[stable(feature = "rust1", since = "1.0.0")] impl<A: Clone> DoubleEndedIterator for Repeat<A> { #[inline] fn next_back(&mut self) -> Option<A> { Some(self.element.clone()) } } #[stable(feature = "fused", since = "1.26.0")] impl<A: Clone> FusedIterator for Repeat<A> {} #[unstable(feature = "trusted_len", issue = "37572")] unsafe impl<A: Clone> TrustedLen for Repeat<A> {}