1use super::TrustedLen;
2
3#[stable(feature = "rust1", since = "1.0.0")]
98#[rustc_on_unimplemented(
99 on(
100 Self = "&[{A}]",
101 message = "a slice of type `{Self}` cannot be built since we need to store the elements somewhere",
102 label = "try explicitly collecting into a `Vec<{A}>`",
103 ),
104 on(
105 all(A = "{integer}", any(Self = "&[{integral}]",)),
106 message = "a slice of type `{Self}` cannot be built since we need to store the elements somewhere",
107 label = "try explicitly collecting into a `Vec<{A}>`",
108 ),
109 on(
110 Self = "[{A}]",
111 message = "a slice of type `{Self}` cannot be built since `{Self}` has no definite size",
112 label = "try explicitly collecting into a `Vec<{A}>`",
113 ),
114 on(
115 all(A = "{integer}", any(Self = "[{integral}]",)),
116 message = "a slice of type `{Self}` cannot be built since `{Self}` has no definite size",
117 label = "try explicitly collecting into a `Vec<{A}>`",
118 ),
119 on(
120 Self = "[{A}; _]",
121 message = "an array of type `{Self}` cannot be built directly from an iterator",
122 label = "try collecting into a `Vec<{A}>`, then using `.try_into()`",
123 ),
124 on(
125 all(A = "{integer}", any(Self = "[{integral}; _]",)),
126 message = "an array of type `{Self}` cannot be built directly from an iterator",
127 label = "try collecting into a `Vec<{A}>`, then using `.try_into()`",
128 ),
129 message = "a value of type `{Self}` cannot be built from an iterator \
130 over elements of type `{A}`",
131 label = "value of type `{Self}` cannot be built from `std::iter::Iterator<Item={A}>`"
132)]
133#[rustc_diagnostic_item = "FromIterator"]
134pub trait FromIterator<A>: Sized {
135 #[stable(feature = "rust1", since = "1.0.0")]
151 #[rustc_diagnostic_item = "from_iter_fn"]
152 fn from_iter<T: IntoIterator<Item = A>>(iter: T) -> Self;
153}
154
155#[rustc_diagnostic_item = "IntoIterator"]
240#[rustc_on_unimplemented(
241 on(
242 Self = "core::ops::range::RangeTo<Idx>",
243 label = "if you meant to iterate until a value, add a starting value",
244 note = "`..end` is a `RangeTo`, which cannot be iterated on; you might have meant to have a \
245 bounded `Range`: `0..end`"
246 ),
247 on(
248 Self = "core::ops::range::RangeToInclusive<Idx>",
249 label = "if you meant to iterate until a value (including it), add a starting value",
250 note = "`..=end` is a `RangeToInclusive`, which cannot be iterated on; you might have meant \
251 to have a bounded `RangeInclusive`: `0..=end`"
252 ),
253 on(
254 Self = "[]",
255 label = "`{Self}` is not an iterator; try calling `.into_iter()` or `.iter()`"
256 ),
257 on(Self = "&[]", label = "`{Self}` is not an iterator; try calling `.iter()`"),
258 on(
259 Self = "alloc::vec::Vec<T, A>",
260 label = "`{Self}` is not an iterator; try calling `.into_iter()` or `.iter()`"
261 ),
262 on(Self = "&str", label = "`{Self}` is not an iterator; try calling `.chars()` or `.bytes()`"),
263 on(
264 Self = "alloc::string::String",
265 label = "`{Self}` is not an iterator; try calling `.chars()` or `.bytes()`"
266 ),
267 on(
268 Self = "{integral}",
269 note = "if you want to iterate between `start` until a value `end`, use the exclusive range \
270 syntax `start..end` or the inclusive range syntax `start..=end`"
271 ),
272 on(
273 Self = "{float}",
274 note = "if you want to iterate between `start` until a value `end`, use the exclusive range \
275 syntax `start..end` or the inclusive range syntax `start..=end`"
276 ),
277 label = "`{Self}` is not an iterator",
278 message = "`{Self}` is not an iterator"
279)]
280#[rustc_skip_during_method_dispatch(array, boxed_slice)]
281#[stable(feature = "rust1", since = "1.0.0")]
282#[rustc_const_unstable(feature = "const_iter", issue = "92476")]
283pub const trait IntoIterator {
284 #[rustc_diagnostic_item = "IntoIteratorItem"]
286 #[stable(feature = "rust1", since = "1.0.0")]
287 type Item;
288
289 #[stable(feature = "rust1", since = "1.0.0")]
291 type IntoIter: Iterator<Item = Self::Item>;
292
293 #[lang = "into_iter"]
311 #[stable(feature = "rust1", since = "1.0.0")]
312 fn into_iter(self) -> Self::IntoIter;
313}
314
315#[stable(feature = "rust1", since = "1.0.0")]
316#[rustc_const_unstable(feature = "const_iter", issue = "92476")]
317impl<I: [const] Iterator> const IntoIterator for I {
318 type Item = I::Item;
319 type IntoIter = I;
320
321 #[inline]
322 fn into_iter(self) -> I {
323 self
324 }
325}
326
327#[stable(feature = "rust1", since = "1.0.0")]
397pub trait Extend<A> {
398 #[stable(feature = "rust1", since = "1.0.0")]
416 fn extend<T: IntoIterator<Item = A>>(&mut self, iter: T);
417
418 #[unstable(feature = "extend_one", issue = "72631")]
420 fn extend_one(&mut self, item: A) {
421 self.extend(Some(item));
422 }
423
424 #[unstable(feature = "extend_one", issue = "72631")]
428 fn extend_reserve(&mut self, additional: usize) {
429 let _ = additional;
430 }
431
432 #[unstable(feature = "extend_one_unchecked", issue = "none")]
444 #[doc(hidden)]
445 unsafe fn extend_one_unchecked(&mut self, item: A)
446 where
447 Self: Sized,
448 {
449 self.extend_one(item);
450 }
451}
452
453#[stable(feature = "extend_for_unit", since = "1.28.0")]
454impl Extend<()> for () {
455 fn extend<T: IntoIterator<Item = ()>>(&mut self, iter: T) {
456 iter.into_iter().for_each(drop)
457 }
458 fn extend_one(&mut self, _item: ()) {}
459}
460
461#[doc(fake_variadic)] #[stable(feature = "extend_for_tuple", since = "1.56.0")]
465impl<T, ExtendT> Extend<(T,)> for (ExtendT,)
466where
467 ExtendT: Extend<T>,
468{
469 fn extend<I: IntoIterator<Item = (T,)>>(&mut self, iter: I) {
491 self.0.extend(iter.into_iter().map(|t| t.0));
492 }
493
494 fn extend_one(&mut self, item: (T,)) {
495 self.0.extend_one(item.0)
496 }
497
498 fn extend_reserve(&mut self, additional: usize) {
499 self.0.extend_reserve(additional)
500 }
501
502 unsafe fn extend_one_unchecked(&mut self, item: (T,)) {
503 unsafe { self.0.extend_one_unchecked(item.0) }
505 }
506}
507
508#[doc(fake_variadic)] #[stable(feature = "from_iterator_for_tuple", since = "1.79.0")]
530impl<T, ExtendT> FromIterator<(T,)> for (ExtendT,)
531where
532 ExtendT: Default + Extend<T>,
533{
534 fn from_iter<Iter: IntoIterator<Item = (T,)>>(iter: Iter) -> Self {
535 let mut res = ExtendT::default();
536 res.extend(iter.into_iter().map(|t| t.0));
537 (res,)
538 }
539}
540
541fn default_extend<ExtendT, I, T>(collection: &mut ExtendT, iter: I)
544where
545 ExtendT: Extend<T>,
546 I: IntoIterator<Item = T>,
547{
548 trait SpecExtend<I> {
551 fn extend(&mut self, iter: I);
552 }
553
554 fn extender<ExtendT, T>(collection: &mut ExtendT) -> impl FnMut(T) + use<'_, ExtendT, T>
557 where
558 ExtendT: Extend<T>,
559 {
560 move |item| collection.extend_one(item)
561 }
562
563 unsafe fn unchecked_extender<ExtendT, T>(
564 collection: &mut ExtendT,
565 ) -> impl FnMut(T) + use<'_, ExtendT, T>
566 where
567 ExtendT: Extend<T>,
568 {
569 move |item| unsafe { collection.extend_one_unchecked(item) }
572 }
573
574 impl<ExtendT, I, T> SpecExtend<I> for ExtendT
575 where
576 ExtendT: Extend<T>,
577 I: Iterator<Item = T>,
578 {
579 default fn extend(&mut self, iter: I) {
580 let (lower_bound, _) = iter.size_hint();
581 if lower_bound > 0 {
582 self.extend_reserve(lower_bound);
583 }
584
585 iter.for_each(extender(self))
586 }
587 }
588
589 impl<ExtendT, I, T> SpecExtend<I> for ExtendT
590 where
591 ExtendT: Extend<T>,
592 I: TrustedLen<Item = T>,
593 {
594 fn extend(&mut self, iter: I) {
595 let (lower_bound, upper_bound) = iter.size_hint();
596 if lower_bound > 0 {
597 self.extend_reserve(lower_bound);
598 }
599
600 if upper_bound.is_none() {
601 iter.for_each(extender(self))
603 } else {
604 iter.for_each(unsafe { unchecked_extender(self) })
607 }
608 }
609 }
610
611 SpecExtend::extend(collection, iter.into_iter());
612}
613
614macro_rules! impl_extend_tuple {
616 ($(($ty:tt, $extend_ty:tt, $index:tt)),+) => {
617 #[doc(hidden)]
618 #[stable(feature = "extend_for_tuple", since = "1.56.0")]
619 impl<$($ty,)+ $($extend_ty,)+> Extend<($($ty,)+)> for ($($extend_ty,)+)
620 where
621 $($extend_ty: Extend<$ty>,)+
622 {
623 fn extend<T: IntoIterator<Item = ($($ty,)+)>>(&mut self, iter: T) {
624 default_extend(self, iter)
625 }
626
627 fn extend_one(&mut self, item: ($($ty,)+)) {
628 $(self.$index.extend_one(item.$index);)+
629 }
630
631 fn extend_reserve(&mut self, additional: usize) {
632 $(self.$index.extend_reserve(additional);)+
633 }
634
635 unsafe fn extend_one_unchecked(&mut self, item: ($($ty,)+)) {
636 unsafe {
638 $(self.$index.extend_one_unchecked(item.$index);)+
639 }
640 }
641 }
642
643 #[doc(hidden)]
644 #[stable(feature = "from_iterator_for_tuple", since = "1.79.0")]
645 impl<$($ty,)+ $($extend_ty,)+> FromIterator<($($ty,)+)> for ($($extend_ty,)+)
646 where
647 $($extend_ty: Default + Extend<$ty>,)+
648 {
649 fn from_iter<Iter: IntoIterator<Item = ($($ty,)+)>>(iter: Iter) -> Self {
650 let mut res = Self::default();
651 res.extend(iter);
652 res
653 }
654 }
655 };
656}
657
658#[doc(hidden)]
#[stable(feature = "extend_for_tuple", since = "1.56.0")]
impl<A, B, ExA, ExB> Extend<(A, B)> for (ExA, ExB) where ExA: Extend<A>,
ExB: Extend<B> {
fn extend<T: IntoIterator<Item = (A, B)>>(&mut self, iter: T) {
default_extend(self, iter)
}
fn extend_one(&mut self, item: (A, B)) {
self.0.extend_one(item.0);
self.1.extend_one(item.1);
}
fn extend_reserve(&mut self, additional: usize) {
self.0.extend_reserve(additional);
self.1.extend_reserve(additional);
}
unsafe fn extend_one_unchecked(&mut self, item: (A, B)) {
unsafe {
self.0.extend_one_unchecked(item.0);
self.1.extend_one_unchecked(item.1);
}
}
}
#[doc(hidden)]
#[stable(feature = "from_iterator_for_tuple", since = "1.79.0")]
impl<A, B, ExA, ExB> FromIterator<(A, B)> for (ExA, ExB) where ExA: Default +
Extend<A>, ExB: Default + Extend<B> {
fn from_iter<Iter: IntoIterator<Item = (A, B)>>(iter: Iter) -> Self {
let mut res = Self::default();
res.extend(iter);
res
}
}impl_extend_tuple!((A, ExA, 0), (B, ExB, 1));
659#[doc(hidden)]
#[stable(feature = "extend_for_tuple", since = "1.56.0")]
impl<A, B, C, ExA, ExB, ExC> Extend<(A, B, C)> for (ExA, ExB, ExC) where
ExA: Extend<A>, ExB: Extend<B>, ExC: Extend<C> {
fn extend<T: IntoIterator<Item = (A, B, C)>>(&mut self, iter: T) {
default_extend(self, iter)
}
fn extend_one(&mut self, item: (A, B, C)) {
self.0.extend_one(item.0);
self.1.extend_one(item.1);
self.2.extend_one(item.2);
}
fn extend_reserve(&mut self, additional: usize) {
self.0.extend_reserve(additional);
self.1.extend_reserve(additional);
self.2.extend_reserve(additional);
}
unsafe fn extend_one_unchecked(&mut self, item: (A, B, C)) {
unsafe {
self.0.extend_one_unchecked(item.0);
self.1.extend_one_unchecked(item.1);
self.2.extend_one_unchecked(item.2);
}
}
}
#[doc(hidden)]
#[stable(feature = "from_iterator_for_tuple", since = "1.79.0")]
impl<A, B, C, ExA, ExB, ExC> FromIterator<(A, B, C)> for (ExA, ExB, ExC) where
ExA: Default + Extend<A>, ExB: Default + Extend<B>, ExC: Default +
Extend<C> {
fn from_iter<Iter: IntoIterator<Item = (A, B, C)>>(iter: Iter) -> Self {
let mut res = Self::default();
res.extend(iter);
res
}
}impl_extend_tuple!((A, ExA, 0), (B, ExB, 1), (C, ExC, 2));
660#[doc(hidden)]
#[stable(feature = "extend_for_tuple", since = "1.56.0")]
impl<A, B, C, D, ExA, ExB, ExC, ExD> Extend<(A, B, C, D)> for
(ExA, ExB, ExC, ExD) where ExA: Extend<A>, ExB: Extend<B>, ExC: Extend<C>,
ExD: Extend<D> {
fn extend<T: IntoIterator<Item = (A, B, C, D)>>(&mut self, iter: T) {
default_extend(self, iter)
}
fn extend_one(&mut self, item: (A, B, C, D)) {
self.0.extend_one(item.0);
self.1.extend_one(item.1);
self.2.extend_one(item.2);
self.3.extend_one(item.3);
}
fn extend_reserve(&mut self, additional: usize) {
self.0.extend_reserve(additional);
self.1.extend_reserve(additional);
self.2.extend_reserve(additional);
self.3.extend_reserve(additional);
}
unsafe fn extend_one_unchecked(&mut self, item: (A, B, C, D)) {
unsafe {
self.0.extend_one_unchecked(item.0);
self.1.extend_one_unchecked(item.1);
self.2.extend_one_unchecked(item.2);
self.3.extend_one_unchecked(item.3);
}
}
}
#[doc(hidden)]
#[stable(feature = "from_iterator_for_tuple", since = "1.79.0")]
impl<A, B, C, D, ExA, ExB, ExC, ExD> FromIterator<(A, B, C, D)> for
(ExA, ExB, ExC, ExD) where ExA: Default + Extend<A>, ExB: Default +
Extend<B>, ExC: Default + Extend<C>, ExD: Default + Extend<D> {
fn from_iter<Iter: IntoIterator<Item = (A, B, C, D)>>(iter: Iter)
-> Self {
let mut res = Self::default();
res.extend(iter);
res
}
}impl_extend_tuple!((A, ExA, 0), (B, ExB, 1), (C, ExC, 2), (D, ExD, 3));
661#[doc(hidden)]
#[stable(feature = "extend_for_tuple", since = "1.56.0")]
impl<A, B, C, D, E, ExA, ExB, ExC, ExD, ExE> Extend<(A, B, C, D, E)> for
(ExA, ExB, ExC, ExD, ExE) where ExA: Extend<A>, ExB: Extend<B>,
ExC: Extend<C>, ExD: Extend<D>, ExE: Extend<E> {
fn extend<T: IntoIterator<Item = (A, B, C, D, E)>>(&mut self, iter: T) {
default_extend(self, iter)
}
fn extend_one(&mut self, item: (A, B, C, D, E)) {
self.0.extend_one(item.0);
self.1.extend_one(item.1);
self.2.extend_one(item.2);
self.3.extend_one(item.3);
self.4.extend_one(item.4);
}
fn extend_reserve(&mut self, additional: usize) {
self.0.extend_reserve(additional);
self.1.extend_reserve(additional);
self.2.extend_reserve(additional);
self.3.extend_reserve(additional);
self.4.extend_reserve(additional);
}
unsafe fn extend_one_unchecked(&mut self, item: (A, B, C, D, E)) {
unsafe {
self.0.extend_one_unchecked(item.0);
self.1.extend_one_unchecked(item.1);
self.2.extend_one_unchecked(item.2);
self.3.extend_one_unchecked(item.3);
self.4.extend_one_unchecked(item.4);
}
}
}
#[doc(hidden)]
#[stable(feature = "from_iterator_for_tuple", since = "1.79.0")]
impl<A, B, C, D, E, ExA, ExB, ExC, ExD, ExE> FromIterator<(A, B, C, D, E)> for
(ExA, ExB, ExC, ExD, ExE) where ExA: Default + Extend<A>, ExB: Default +
Extend<B>, ExC: Default + Extend<C>, ExD: Default + Extend<D>,
ExE: Default + Extend<E> {
fn from_iter<Iter: IntoIterator<Item = (A, B, C, D, E)>>(iter: Iter)
-> Self {
let mut res = Self::default();
res.extend(iter);
res
}
}impl_extend_tuple!((A, ExA, 0), (B, ExB, 1), (C, ExC, 2), (D, ExD, 3), (E, ExE, 4));
662#[doc(hidden)]
#[stable(feature = "extend_for_tuple", since = "1.56.0")]
impl<A, B, C, D, E, F, ExA, ExB, ExC, ExD, ExE, ExF>
Extend<(A, B, C, D, E, F)> for (ExA, ExB, ExC, ExD, ExE, ExF) where
ExA: Extend<A>, ExB: Extend<B>, ExC: Extend<C>, ExD: Extend<D>,
ExE: Extend<E>, ExF: Extend<F> {
fn extend<T: IntoIterator<Item =
(A, B, C, D, E, F)>>(&mut self, iter: T) {
default_extend(self, iter)
}
fn extend_one(&mut self, item: (A, B, C, D, E, F)) {
self.0.extend_one(item.0);
self.1.extend_one(item.1);
self.2.extend_one(item.2);
self.3.extend_one(item.3);
self.4.extend_one(item.4);
self.5.extend_one(item.5);
}
fn extend_reserve(&mut self, additional: usize) {
self.0.extend_reserve(additional);
self.1.extend_reserve(additional);
self.2.extend_reserve(additional);
self.3.extend_reserve(additional);
self.4.extend_reserve(additional);
self.5.extend_reserve(additional);
}
unsafe fn extend_one_unchecked(&mut self, item: (A, B, C, D, E, F)) {
unsafe {
self.0.extend_one_unchecked(item.0);
self.1.extend_one_unchecked(item.1);
self.2.extend_one_unchecked(item.2);
self.3.extend_one_unchecked(item.3);
self.4.extend_one_unchecked(item.4);
self.5.extend_one_unchecked(item.5);
}
}
}
#[doc(hidden)]
#[stable(feature = "from_iterator_for_tuple", since = "1.79.0")]
impl<A, B, C, D, E, F, ExA, ExB, ExC, ExD, ExE, ExF>
FromIterator<(A, B, C, D, E, F)> for (ExA, ExB, ExC, ExD, ExE, ExF) where
ExA: Default + Extend<A>, ExB: Default + Extend<B>, ExC: Default +
Extend<C>, ExD: Default + Extend<D>, ExE: Default + Extend<E>,
ExF: Default + Extend<F> {
fn from_iter<Iter: IntoIterator<Item = (A, B, C, D, E, F)>>(iter: Iter)
-> Self {
let mut res = Self::default();
res.extend(iter);
res
}
}impl_extend_tuple!((A, ExA, 0), (B, ExB, 1), (C, ExC, 2), (D, ExD, 3), (E, ExE, 4), (F, ExF, 5));
663#[doc(hidden)]
#[stable(feature = "extend_for_tuple", since = "1.56.0")]
impl<A, B, C, D, E, F, G, ExA, ExB, ExC, ExD, ExE, ExF, ExG>
Extend<(A, B, C, D, E, F, G)> for (ExA, ExB, ExC, ExD, ExE, ExF, ExG)
where ExA: Extend<A>, ExB: Extend<B>, ExC: Extend<C>, ExD: Extend<D>,
ExE: Extend<E>, ExF: Extend<F>, ExG: Extend<G> {
fn extend<T: IntoIterator<Item =
(A, B, C, D, E, F, G)>>(&mut self, iter: T) {
default_extend(self, iter)
}
fn extend_one(&mut self, item: (A, B, C, D, E, F, G)) {
self.0.extend_one(item.0);
self.1.extend_one(item.1);
self.2.extend_one(item.2);
self.3.extend_one(item.3);
self.4.extend_one(item.4);
self.5.extend_one(item.5);
self.6.extend_one(item.6);
}
fn extend_reserve(&mut self, additional: usize) {
self.0.extend_reserve(additional);
self.1.extend_reserve(additional);
self.2.extend_reserve(additional);
self.3.extend_reserve(additional);
self.4.extend_reserve(additional);
self.5.extend_reserve(additional);
self.6.extend_reserve(additional);
}
unsafe fn extend_one_unchecked(&mut self, item: (A, B, C, D, E, F, G)) {
unsafe {
self.0.extend_one_unchecked(item.0);
self.1.extend_one_unchecked(item.1);
self.2.extend_one_unchecked(item.2);
self.3.extend_one_unchecked(item.3);
self.4.extend_one_unchecked(item.4);
self.5.extend_one_unchecked(item.5);
self.6.extend_one_unchecked(item.6);
}
}
}
#[doc(hidden)]
#[stable(feature = "from_iterator_for_tuple", since = "1.79.0")]
impl<A, B, C, D, E, F, G, ExA, ExB, ExC, ExD, ExE, ExF, ExG>
FromIterator<(A, B, C, D, E, F, G)> for
(ExA, ExB, ExC, ExD, ExE, ExF, ExG) where ExA: Default + Extend<A>,
ExB: Default + Extend<B>, ExC: Default + Extend<C>, ExD: Default +
Extend<D>, ExE: Default + Extend<E>, ExF: Default + Extend<F>,
ExG: Default + Extend<G> {
fn from_iter<Iter: IntoIterator<Item = (A, B, C, D, E, F, G)>>(iter: Iter)
-> Self {
let mut res = Self::default();
res.extend(iter);
res
}
}impl_extend_tuple!(
664 (A, ExA, 0),
665 (B, ExB, 1),
666 (C, ExC, 2),
667 (D, ExD, 3),
668 (E, ExE, 4),
669 (F, ExF, 5),
670 (G, ExG, 6)
671);
672#[doc(hidden)]
#[stable(feature = "extend_for_tuple", since = "1.56.0")]
impl<A, B, C, D, E, F, G, H, ExA, ExB, ExC, ExD, ExE, ExF, ExG, ExH>
Extend<(A, B, C, D, E, F, G, H)> for
(ExA, ExB, ExC, ExD, ExE, ExF, ExG, ExH) where ExA: Extend<A>,
ExB: Extend<B>, ExC: Extend<C>, ExD: Extend<D>, ExE: Extend<E>,
ExF: Extend<F>, ExG: Extend<G>, ExH: Extend<H> {
fn extend<T: IntoIterator<Item =
(A, B, C, D, E, F, G, H)>>(&mut self, iter: T) {
default_extend(self, iter)
}
fn extend_one(&mut self, item: (A, B, C, D, E, F, G, H)) {
self.0.extend_one(item.0);
self.1.extend_one(item.1);
self.2.extend_one(item.2);
self.3.extend_one(item.3);
self.4.extend_one(item.4);
self.5.extend_one(item.5);
self.6.extend_one(item.6);
self.7.extend_one(item.7);
}
fn extend_reserve(&mut self, additional: usize) {
self.0.extend_reserve(additional);
self.1.extend_reserve(additional);
self.2.extend_reserve(additional);
self.3.extend_reserve(additional);
self.4.extend_reserve(additional);
self.5.extend_reserve(additional);
self.6.extend_reserve(additional);
self.7.extend_reserve(additional);
}
unsafe fn extend_one_unchecked(&mut self,
item: (A, B, C, D, E, F, G, H)) {
unsafe {
self.0.extend_one_unchecked(item.0);
self.1.extend_one_unchecked(item.1);
self.2.extend_one_unchecked(item.2);
self.3.extend_one_unchecked(item.3);
self.4.extend_one_unchecked(item.4);
self.5.extend_one_unchecked(item.5);
self.6.extend_one_unchecked(item.6);
self.7.extend_one_unchecked(item.7);
}
}
}
#[doc(hidden)]
#[stable(feature = "from_iterator_for_tuple", since = "1.79.0")]
impl<A, B, C, D, E, F, G, H, ExA, ExB, ExC, ExD, ExE, ExF, ExG, ExH>
FromIterator<(A, B, C, D, E, F, G, H)> for
(ExA, ExB, ExC, ExD, ExE, ExF, ExG, ExH) where ExA: Default + Extend<A>,
ExB: Default + Extend<B>, ExC: Default + Extend<C>, ExD: Default +
Extend<D>, ExE: Default + Extend<E>, ExF: Default + Extend<F>,
ExG: Default + Extend<G>, ExH: Default + Extend<H> {
fn from_iter<Iter: IntoIterator<Item =
(A, B, C, D, E, F, G, H)>>(iter: Iter) -> Self {
let mut res = Self::default();
res.extend(iter);
res
}
}impl_extend_tuple!(
673 (A, ExA, 0),
674 (B, ExB, 1),
675 (C, ExC, 2),
676 (D, ExD, 3),
677 (E, ExE, 4),
678 (F, ExF, 5),
679 (G, ExG, 6),
680 (H, ExH, 7)
681);
682#[doc(hidden)]
#[stable(feature = "extend_for_tuple", since = "1.56.0")]
impl<A, B, C, D, E, F, G, H, I, ExA, ExB, ExC, ExD, ExE, ExF, ExG, ExH, ExI>
Extend<(A, B, C, D, E, F, G, H, I)> for
(ExA, ExB, ExC, ExD, ExE, ExF, ExG, ExH, ExI) where ExA: Extend<A>,
ExB: Extend<B>, ExC: Extend<C>, ExD: Extend<D>, ExE: Extend<E>,
ExF: Extend<F>, ExG: Extend<G>, ExH: Extend<H>, ExI: Extend<I> {
fn extend<T: IntoIterator<Item =
(A, B, C, D, E, F, G, H, I)>>(&mut self, iter: T) {
default_extend(self, iter)
}
fn extend_one(&mut self, item: (A, B, C, D, E, F, G, H, I)) {
self.0.extend_one(item.0);
self.1.extend_one(item.1);
self.2.extend_one(item.2);
self.3.extend_one(item.3);
self.4.extend_one(item.4);
self.5.extend_one(item.5);
self.6.extend_one(item.6);
self.7.extend_one(item.7);
self.8.extend_one(item.8);
}
fn extend_reserve(&mut self, additional: usize) {
self.0.extend_reserve(additional);
self.1.extend_reserve(additional);
self.2.extend_reserve(additional);
self.3.extend_reserve(additional);
self.4.extend_reserve(additional);
self.5.extend_reserve(additional);
self.6.extend_reserve(additional);
self.7.extend_reserve(additional);
self.8.extend_reserve(additional);
}
unsafe fn extend_one_unchecked(&mut self,
item: (A, B, C, D, E, F, G, H, I)) {
unsafe {
self.0.extend_one_unchecked(item.0);
self.1.extend_one_unchecked(item.1);
self.2.extend_one_unchecked(item.2);
self.3.extend_one_unchecked(item.3);
self.4.extend_one_unchecked(item.4);
self.5.extend_one_unchecked(item.5);
self.6.extend_one_unchecked(item.6);
self.7.extend_one_unchecked(item.7);
self.8.extend_one_unchecked(item.8);
}
}
}
#[doc(hidden)]
#[stable(feature = "from_iterator_for_tuple", since = "1.79.0")]
impl<A, B, C, D, E, F, G, H, I, ExA, ExB, ExC, ExD, ExE, ExF, ExG, ExH, ExI>
FromIterator<(A, B, C, D, E, F, G, H, I)> for
(ExA, ExB, ExC, ExD, ExE, ExF, ExG, ExH, ExI) where ExA: Default +
Extend<A>, ExB: Default + Extend<B>, ExC: Default + Extend<C>,
ExD: Default + Extend<D>, ExE: Default + Extend<E>, ExF: Default +
Extend<F>, ExG: Default + Extend<G>, ExH: Default + Extend<H>,
ExI: Default + Extend<I> {
fn from_iter<Iter: IntoIterator<Item =
(A, B, C, D, E, F, G, H, I)>>(iter: Iter) -> Self {
let mut res = Self::default();
res.extend(iter);
res
}
}impl_extend_tuple!(
683 (A, ExA, 0),
684 (B, ExB, 1),
685 (C, ExC, 2),
686 (D, ExD, 3),
687 (E, ExE, 4),
688 (F, ExF, 5),
689 (G, ExG, 6),
690 (H, ExH, 7),
691 (I, ExI, 8)
692);
693#[doc(hidden)]
#[stable(feature = "extend_for_tuple", since = "1.56.0")]
impl<A, B, C, D, E, F, G, H, I, J, ExA, ExB, ExC, ExD, ExE, ExF, ExG, ExH,
ExI, ExJ> Extend<(A, B, C, D, E, F, G, H, I, J)> for
(ExA, ExB, ExC, ExD, ExE, ExF, ExG, ExH, ExI, ExJ) where ExA: Extend<A>,
ExB: Extend<B>, ExC: Extend<C>, ExD: Extend<D>, ExE: Extend<E>,
ExF: Extend<F>, ExG: Extend<G>, ExH: Extend<H>, ExI: Extend<I>,
ExJ: Extend<J> {
fn extend<T: IntoIterator<Item =
(A, B, C, D, E, F, G, H, I, J)>>(&mut self, iter: T) {
default_extend(self, iter)
}
fn extend_one(&mut self, item: (A, B, C, D, E, F, G, H, I, J)) {
self.0.extend_one(item.0);
self.1.extend_one(item.1);
self.2.extend_one(item.2);
self.3.extend_one(item.3);
self.4.extend_one(item.4);
self.5.extend_one(item.5);
self.6.extend_one(item.6);
self.7.extend_one(item.7);
self.8.extend_one(item.8);
self.9.extend_one(item.9);
}
fn extend_reserve(&mut self, additional: usize) {
self.0.extend_reserve(additional);
self.1.extend_reserve(additional);
self.2.extend_reserve(additional);
self.3.extend_reserve(additional);
self.4.extend_reserve(additional);
self.5.extend_reserve(additional);
self.6.extend_reserve(additional);
self.7.extend_reserve(additional);
self.8.extend_reserve(additional);
self.9.extend_reserve(additional);
}
unsafe fn extend_one_unchecked(&mut self,
item: (A, B, C, D, E, F, G, H, I, J)) {
unsafe {
self.0.extend_one_unchecked(item.0);
self.1.extend_one_unchecked(item.1);
self.2.extend_one_unchecked(item.2);
self.3.extend_one_unchecked(item.3);
self.4.extend_one_unchecked(item.4);
self.5.extend_one_unchecked(item.5);
self.6.extend_one_unchecked(item.6);
self.7.extend_one_unchecked(item.7);
self.8.extend_one_unchecked(item.8);
self.9.extend_one_unchecked(item.9);
}
}
}
#[doc(hidden)]
#[stable(feature = "from_iterator_for_tuple", since = "1.79.0")]
impl<A, B, C, D, E, F, G, H, I, J, ExA, ExB, ExC, ExD, ExE, ExF, ExG, ExH,
ExI, ExJ> FromIterator<(A, B, C, D, E, F, G, H, I, J)> for
(ExA, ExB, ExC, ExD, ExE, ExF, ExG, ExH, ExI, ExJ) where ExA: Default +
Extend<A>, ExB: Default + Extend<B>, ExC: Default + Extend<C>,
ExD: Default + Extend<D>, ExE: Default + Extend<E>, ExF: Default +
Extend<F>, ExG: Default + Extend<G>, ExH: Default + Extend<H>,
ExI: Default + Extend<I>, ExJ: Default + Extend<J> {
fn from_iter<Iter: IntoIterator<Item =
(A, B, C, D, E, F, G, H, I, J)>>(iter: Iter) -> Self {
let mut res = Self::default();
res.extend(iter);
res
}
}impl_extend_tuple!(
694 (A, ExA, 0),
695 (B, ExB, 1),
696 (C, ExC, 2),
697 (D, ExD, 3),
698 (E, ExE, 4),
699 (F, ExF, 5),
700 (G, ExG, 6),
701 (H, ExH, 7),
702 (I, ExI, 8),
703 (J, ExJ, 9)
704);
705#[doc(hidden)]
#[stable(feature = "extend_for_tuple", since = "1.56.0")]
impl<A, B, C, D, E, F, G, H, I, J, K, ExA, ExB, ExC, ExD, ExE, ExF, ExG, ExH,
ExI, ExJ, ExK> Extend<(A, B, C, D, E, F, G, H, I, J, K)> for
(ExA, ExB, ExC, ExD, ExE, ExF, ExG, ExH, ExI, ExJ, ExK) where
ExA: Extend<A>, ExB: Extend<B>, ExC: Extend<C>, ExD: Extend<D>,
ExE: Extend<E>, ExF: Extend<F>, ExG: Extend<G>, ExH: Extend<H>,
ExI: Extend<I>, ExJ: Extend<J>, ExK: Extend<K> {
fn extend<T: IntoIterator<Item =
(A, B, C, D, E, F, G, H, I, J, K)>>(&mut self, iter: T) {
default_extend(self, iter)
}
fn extend_one(&mut self, item: (A, B, C, D, E, F, G, H, I, J, K)) {
self.0.extend_one(item.0);
self.1.extend_one(item.1);
self.2.extend_one(item.2);
self.3.extend_one(item.3);
self.4.extend_one(item.4);
self.5.extend_one(item.5);
self.6.extend_one(item.6);
self.7.extend_one(item.7);
self.8.extend_one(item.8);
self.9.extend_one(item.9);
self.10.extend_one(item.10);
}
fn extend_reserve(&mut self, additional: usize) {
self.0.extend_reserve(additional);
self.1.extend_reserve(additional);
self.2.extend_reserve(additional);
self.3.extend_reserve(additional);
self.4.extend_reserve(additional);
self.5.extend_reserve(additional);
self.6.extend_reserve(additional);
self.7.extend_reserve(additional);
self.8.extend_reserve(additional);
self.9.extend_reserve(additional);
self.10.extend_reserve(additional);
}
unsafe fn extend_one_unchecked(&mut self,
item: (A, B, C, D, E, F, G, H, I, J, K)) {
unsafe {
self.0.extend_one_unchecked(item.0);
self.1.extend_one_unchecked(item.1);
self.2.extend_one_unchecked(item.2);
self.3.extend_one_unchecked(item.3);
self.4.extend_one_unchecked(item.4);
self.5.extend_one_unchecked(item.5);
self.6.extend_one_unchecked(item.6);
self.7.extend_one_unchecked(item.7);
self.8.extend_one_unchecked(item.8);
self.9.extend_one_unchecked(item.9);
self.10.extend_one_unchecked(item.10);
}
}
}
#[doc(hidden)]
#[stable(feature = "from_iterator_for_tuple", since = "1.79.0")]
impl<A, B, C, D, E, F, G, H, I, J, K, ExA, ExB, ExC, ExD, ExE, ExF, ExG, ExH,
ExI, ExJ, ExK> FromIterator<(A, B, C, D, E, F, G, H, I, J, K)> for
(ExA, ExB, ExC, ExD, ExE, ExF, ExG, ExH, ExI, ExJ, ExK) where
ExA: Default + Extend<A>, ExB: Default + Extend<B>, ExC: Default +
Extend<C>, ExD: Default + Extend<D>, ExE: Default + Extend<E>,
ExF: Default + Extend<F>, ExG: Default + Extend<G>, ExH: Default +
Extend<H>, ExI: Default + Extend<I>, ExJ: Default + Extend<J>,
ExK: Default + Extend<K> {
fn from_iter<Iter: IntoIterator<Item =
(A, B, C, D, E, F, G, H, I, J, K)>>(iter: Iter) -> Self {
let mut res = Self::default();
res.extend(iter);
res
}
}impl_extend_tuple!(
706 (A, ExA, 0),
707 (B, ExB, 1),
708 (C, ExC, 2),
709 (D, ExD, 3),
710 (E, ExE, 4),
711 (F, ExF, 5),
712 (G, ExG, 6),
713 (H, ExH, 7),
714 (I, ExI, 8),
715 (J, ExJ, 9),
716 (K, ExK, 10)
717);
718#[doc(hidden)]
#[stable(feature = "extend_for_tuple", since = "1.56.0")]
impl<A, B, C, D, E, F, G, H, I, J, K, L, ExA, ExB, ExC, ExD, ExE, ExF, ExG,
ExH, ExI, ExJ, ExK, ExL> Extend<(A, B, C, D, E, F, G, H, I, J, K, L)> for
(ExA, ExB, ExC, ExD, ExE, ExF, ExG, ExH, ExI, ExJ, ExK, ExL) where
ExA: Extend<A>, ExB: Extend<B>, ExC: Extend<C>, ExD: Extend<D>,
ExE: Extend<E>, ExF: Extend<F>, ExG: Extend<G>, ExH: Extend<H>,
ExI: Extend<I>, ExJ: Extend<J>, ExK: Extend<K>, ExL: Extend<L> {
fn extend<T: IntoIterator<Item =
(A, B, C, D, E, F, G, H, I, J, K, L)>>(&mut self, iter: T) {
default_extend(self, iter)
}
fn extend_one(&mut self, item: (A, B, C, D, E, F, G, H, I, J, K, L)) {
self.0.extend_one(item.0);
self.1.extend_one(item.1);
self.2.extend_one(item.2);
self.3.extend_one(item.3);
self.4.extend_one(item.4);
self.5.extend_one(item.5);
self.6.extend_one(item.6);
self.7.extend_one(item.7);
self.8.extend_one(item.8);
self.9.extend_one(item.9);
self.10.extend_one(item.10);
self.11.extend_one(item.11);
}
fn extend_reserve(&mut self, additional: usize) {
self.0.extend_reserve(additional);
self.1.extend_reserve(additional);
self.2.extend_reserve(additional);
self.3.extend_reserve(additional);
self.4.extend_reserve(additional);
self.5.extend_reserve(additional);
self.6.extend_reserve(additional);
self.7.extend_reserve(additional);
self.8.extend_reserve(additional);
self.9.extend_reserve(additional);
self.10.extend_reserve(additional);
self.11.extend_reserve(additional);
}
unsafe fn extend_one_unchecked(&mut self,
item: (A, B, C, D, E, F, G, H, I, J, K, L)) {
unsafe {
self.0.extend_one_unchecked(item.0);
self.1.extend_one_unchecked(item.1);
self.2.extend_one_unchecked(item.2);
self.3.extend_one_unchecked(item.3);
self.4.extend_one_unchecked(item.4);
self.5.extend_one_unchecked(item.5);
self.6.extend_one_unchecked(item.6);
self.7.extend_one_unchecked(item.7);
self.8.extend_one_unchecked(item.8);
self.9.extend_one_unchecked(item.9);
self.10.extend_one_unchecked(item.10);
self.11.extend_one_unchecked(item.11);
}
}
}
#[doc(hidden)]
#[stable(feature = "from_iterator_for_tuple", since = "1.79.0")]
impl<A, B, C, D, E, F, G, H, I, J, K, L, ExA, ExB, ExC, ExD, ExE, ExF, ExG,
ExH, ExI, ExJ, ExK, ExL>
FromIterator<(A, B, C, D, E, F, G, H, I, J, K, L)> for
(ExA, ExB, ExC, ExD, ExE, ExF, ExG, ExH, ExI, ExJ, ExK, ExL) where
ExA: Default + Extend<A>, ExB: Default + Extend<B>, ExC: Default +
Extend<C>, ExD: Default + Extend<D>, ExE: Default + Extend<E>,
ExF: Default + Extend<F>, ExG: Default + Extend<G>, ExH: Default +
Extend<H>, ExI: Default + Extend<I>, ExJ: Default + Extend<J>,
ExK: Default + Extend<K>, ExL: Default + Extend<L> {
fn from_iter<Iter: IntoIterator<Item =
(A, B, C, D, E, F, G, H, I, J, K, L)>>(iter: Iter) -> Self {
let mut res = Self::default();
res.extend(iter);
res
}
}impl_extend_tuple!(
719 (A, ExA, 0),
720 (B, ExB, 1),
721 (C, ExC, 2),
722 (D, ExD, 3),
723 (E, ExE, 4),
724 (F, ExF, 5),
725 (G, ExG, 6),
726 (H, ExH, 7),
727 (I, ExI, 8),
728 (J, ExJ, 9),
729 (K, ExK, 10),
730 (L, ExL, 11)
731);