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
use crate::iter::Step; /// 一个迭代器,用完后总是继续产生 `None`。 /// /// 确保一次返回 `None` 的融合迭代器上的 next 调用保证再次返回 [`None`]。 /// 该 trait 应该由以此方式运行的所有迭代器实现,因为它允许优化 [`Iterator::fuse()`]。 /// /// /// Note: 通常,如果需要融合的迭代器,则不应在泛型范围内使用 `FusedIterator`。 /// 相反,您应该只在迭代器上调用 [`Iterator::fuse()`]。 /// 如果迭代器已经融合,则额外的 [`Fuse`] 包装器将是无操作的,并且不会降低性能。 /// /// [`Fuse`]: crate::iter::Fuse /// #[stable(feature = "fused", since = "1.26.0")] #[rustc_unsafe_specialization_marker] pub trait FusedIterator: Iterator {} #[stable(feature = "fused", since = "1.26.0")] impl<I: FusedIterator + ?Sized> FusedIterator for &mut I {} /// 一个使用 size_hint 报告准确长度的迭代器。 /// /// 迭代器报告一个大小提示,该提示要么是精确的 (下限等于上限),要么上限是 [`None`]。 /// /// 如果实际的迭代器长度大于 [`usize::MAX`],则上限必须仅为 [`None`]。 /// 在这种情况下,下限必须为 [`usize::MAX`],从而导致 [`Iterator::size_hint()`] 为 `(usize::MAX, None)`。 /// /// 迭代器必须精确地生成它所报告或发散的元素数量,然后才能结束。 /// /// # Safety /// /// 只有在遵守契约的情况下才能实现 trait。 /// trait 的使用者必须检查 [`Iterator::size_hint () `] 的上限。 /// /// /// #[unstable(feature = "trusted_len", issue = "37572")] #[rustc_unsafe_specialization_marker] pub unsafe trait TrustedLen: Iterator {} #[unstable(feature = "trusted_len", issue = "37572")] unsafe impl<I: TrustedLen + ?Sized> TrustedLen for &mut I {} /// 一个迭代器,当产生一个项时,它将从其基础 [`SourceIter`] 中获取至少一个元素。 /// /// 调用任何推进迭代器的方法,例如 /// [`next()`] [`try_fold()`] 或 [`try_fold()`],可确保对于每一步,迭代器的基础源的至少一个值已移出,并且迭代器链的结果可以插入到其位置,前提是源的结构约束允许这种插入。 /// /// 换句话说,此 trait 表示可以在适当位置收集迭代器管道。 /// /// [`SourceIter`]: crate::iter::SourceIter /// [`next()`]: Iterator::next /// [`try_fold()`]: Iterator::try_fold /// /// #[unstable(issue = "none", feature = "inplace_iteration")] #[doc(hidden)] pub unsafe trait InPlaceIterable: Iterator {} /// 一种支持 [`Step`] 的所有不可变变量的类型。 /// /// [`Step::steps_between()`] 的不可变变量是 [`TrustedLen`] 的不可变变量的超集。 /// 因此,对于具有相同泛型参数的所有范围类型,都实现了 [`TrustedLen`]。 /// /// # Safety /// /// 给定类型的 [`Step`] 的实现必须保证所有方法的所有不可变变量都得到维护。 /// 有关详细信息,请参见 [`Step`] trait 的文档。 /// 消费者可以自由地依赖不安全代码中的不可变变量。 /// #[unstable(feature = "trusted_step", issue = "85731")] #[rustc_specialization_trait] pub unsafe trait TrustedStep: Step {}