@@ -3,28 +3,39 @@ use crate::Array;
33use crate :: SmallVec ;
44use core:: ptr;
55
6+ macro_rules! create_with_parts {
7+ (
8+ <$( $( { $s_impl_ty_prefix: ident} ) ? $s_impl_ty: ident$( : $s_impl_ty_bound: ident) ?) ,* >,
9+ <$s_decl_ty: ident$( , { $s_decl_const_ty: ident} ) ?>,
10+ $array_item: ty
11+ ) => {
12+
613/// An iterator that consumes a `SmallVec` and yields its items by value.
714///
815/// Returned from [`SmallVec::into_iter`][1].
916///
1017/// [1]: struct.SmallVec.html#method.into_iter
11- pub struct IntoIter < A : Array > {
12- pub ( crate ) data : SmallVec < A > ,
18+ pub struct IntoIter <$ ( $ ( $s_impl_ty_prefix ) ? $s_impl_ty$ ( : $s_impl_ty_bound ) ? ) , * > {
19+ pub ( crate ) data: SmallVec <$s_decl_ty$ ( , { $s_decl_const_ty } ) ? >,
1320 pub ( crate ) current: usize ,
1421 pub ( crate ) end: usize ,
1522}
1623
17- impl < A : Array > Drop for IntoIter < A > {
24+ impl <$( $( $s_impl_ty_prefix) ? $s_impl_ty$( : $s_impl_ty_bound) ?) ,* > Drop
25+ for IntoIter <$s_decl_ty$( , { $s_decl_const_ty} ) ?>
26+ {
1827 fn drop( & mut self ) {
1928 for _ in self { }
2029 }
2130}
2231
23- impl < A : Array > Iterator for IntoIter < A > {
24- type Item = A :: Item ;
32+ impl <$( $( $s_impl_ty_prefix) ? $s_impl_ty$( : $s_impl_ty_bound) ?) ,* > Iterator
33+ for IntoIter <$s_decl_ty$( , { $s_decl_const_ty} ) ?>
34+ {
35+ type Item = $array_item;
2536
2637 #[ inline]
27- fn next ( & mut self ) -> Option < A :: Item > {
38+ fn next( & mut self ) -> Option <$array_item > {
2839 if self . current == self . end {
2940 None
3041 } else {
@@ -43,9 +54,11 @@ impl<A: Array> Iterator for IntoIter<A> {
4354 }
4455}
4556
46- impl < A : Array > DoubleEndedIterator for IntoIter < A > {
57+ impl <$( $( $s_impl_ty_prefix) ? $s_impl_ty$( : $s_impl_ty_bound) ?) ,* > DoubleEndedIterator
58+ for IntoIter <$s_decl_ty$( , { $s_decl_const_ty} ) ?>
59+ {
4760 #[ inline]
48- fn next_back ( & mut self ) -> Option < A :: Item > {
61+ fn next_back( & mut self ) -> Option <$array_item > {
4962 if self . current == self . end {
5063 None
5164 } else {
@@ -57,4 +70,13 @@ impl<A: Array> DoubleEndedIterator for IntoIter<A> {
5770 }
5871}
5972
60- impl < A : Array > ExactSizeIterator for IntoIter < A > { }
73+ impl <$( $( $s_impl_ty_prefix) ? $s_impl_ty$( : $s_impl_ty_bound) ?) ,* > ExactSizeIterator
74+ for IntoIter <$s_decl_ty$( , { $s_decl_const_ty} ) ?> { }
75+
76+ }
77+ }
78+
79+ #[ cfg( feature = "const_generics" ) ]
80+ create_with_parts ! ( <T , { const } N : usize >, <T , { N } >, T ) ;
81+ #[ cfg( not( feature = "const_generics" ) ) ]
82+ create_with_parts ! ( <A : Array >, <A >, A :: Item ) ;
0 commit comments