@@ -11,7 +11,6 @@ use crate::intrinsics::{assume, exact_div, unchecked_sub};
11
11
use crate :: iter:: { FusedIterator , TrustedLen , TrustedRandomAccess , TrustedRandomAccessNoCoerce } ;
12
12
use crate :: marker:: { PhantomData , Send , Sized , Sync } ;
13
13
use crate :: mem;
14
- use crate :: num:: NonZeroUsize ;
15
14
use crate :: ptr:: NonNull ;
16
15
17
16
use super :: { from_raw_parts, from_raw_parts_mut} ;
@@ -1193,12 +1192,12 @@ forward_iterator! { RSplitNMut: T, &'a mut [T] }
1193
1192
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
1194
1193
pub struct Windows < ' a , T : ' a > {
1195
1194
v : & ' a [ T ] ,
1196
- size : NonZeroUsize ,
1195
+ size : usize ,
1197
1196
}
1198
1197
1199
1198
impl < ' a , T : ' a > Windows < ' a , T > {
1200
1199
#[ inline]
1201
- pub ( super ) fn new ( slice : & ' a [ T ] , size : NonZeroUsize ) -> Self {
1200
+ pub ( super ) fn new ( slice : & ' a [ T ] , size : usize ) -> Self {
1202
1201
Self { v : slice, size }
1203
1202
}
1204
1203
}
@@ -1217,21 +1216,21 @@ impl<'a, T> Iterator for Windows<'a, T> {
1217
1216
1218
1217
#[ inline]
1219
1218
fn next ( & mut self ) -> Option < & ' a [ T ] > {
1220
- if self . size . get ( ) > self . v . len ( ) {
1219
+ if self . size > self . v . len ( ) {
1221
1220
None
1222
1221
} else {
1223
- let ret = Some ( & self . v [ ..self . size . get ( ) ] ) ;
1222
+ let ret = Some ( & self . v [ ..self . size ] ) ;
1224
1223
self . v = & self . v [ 1 ..] ;
1225
1224
ret
1226
1225
}
1227
1226
}
1228
1227
1229
1228
#[ inline]
1230
1229
fn size_hint ( & self ) -> ( usize , Option < usize > ) {
1231
- if self . size . get ( ) > self . v . len ( ) {
1230
+ if self . size > self . v . len ( ) {
1232
1231
( 0 , Some ( 0 ) )
1233
1232
} else {
1234
- let size = self . v . len ( ) - self . size . get ( ) + 1 ;
1233
+ let size = self . v . len ( ) - self . size + 1 ;
1235
1234
( size, Some ( size) )
1236
1235
}
1237
1236
}
@@ -1243,7 +1242,7 @@ impl<'a, T> Iterator for Windows<'a, T> {
1243
1242
1244
1243
#[ inline]
1245
1244
fn nth ( & mut self , n : usize ) -> Option < Self :: Item > {
1246
- let ( end, overflow) = self . size . get ( ) . overflowing_add ( n) ;
1245
+ let ( end, overflow) = self . size . overflowing_add ( n) ;
1247
1246
if end > self . v . len ( ) || overflow {
1248
1247
self . v = & [ ] ;
1249
1248
None
@@ -1256,10 +1255,10 @@ impl<'a, T> Iterator for Windows<'a, T> {
1256
1255
1257
1256
#[ inline]
1258
1257
fn last ( self ) -> Option < Self :: Item > {
1259
- if self . size . get ( ) > self . v . len ( ) {
1258
+ if self . size > self . v . len ( ) {
1260
1259
None
1261
1260
} else {
1262
- let start = self . v . len ( ) - self . size . get ( ) ;
1261
+ let start = self . v . len ( ) - self . size ;
1263
1262
Some ( & self . v [ start..] )
1264
1263
}
1265
1264
}
@@ -1270,18 +1269,18 @@ impl<'a, T> Iterator for Windows<'a, T> {
1270
1269
// which means that `i` cannot overflow an `isize`, and the
1271
1270
// slice created by `from_raw_parts` is a subslice of `self.v`
1272
1271
// thus is guaranteed to be valid for the lifetime `'a` of `self.v`.
1273
- unsafe { from_raw_parts ( self . v . as_ptr ( ) . add ( idx) , self . size . get ( ) ) }
1272
+ unsafe { from_raw_parts ( self . v . as_ptr ( ) . add ( idx) , self . size ) }
1274
1273
}
1275
1274
}
1276
1275
1277
1276
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
1278
1277
impl < ' a , T > DoubleEndedIterator for Windows < ' a , T > {
1279
1278
#[ inline]
1280
1279
fn next_back ( & mut self ) -> Option < & ' a [ T ] > {
1281
- if self . size . get ( ) > self . v . len ( ) {
1280
+ if self . size > self . v . len ( ) {
1282
1281
None
1283
1282
} else {
1284
- let ret = Some ( & self . v [ self . v . len ( ) - self . size . get ( ) . .] ) ;
1283
+ let ret = Some ( & self . v [ self . v . len ( ) - self . size ..] ) ;
1285
1284
self . v = & self . v [ ..self . v . len ( ) - 1 ] ;
1286
1285
ret
1287
1286
}
@@ -1290,11 +1289,11 @@ impl<'a, T> DoubleEndedIterator for Windows<'a, T> {
1290
1289
#[ inline]
1291
1290
fn nth_back ( & mut self , n : usize ) -> Option < Self :: Item > {
1292
1291
let ( end, overflow) = self . v . len ( ) . overflowing_sub ( n) ;
1293
- if end < self . size . get ( ) || overflow {
1292
+ if end < self . size || overflow {
1294
1293
self . v = & [ ] ;
1295
1294
None
1296
1295
} else {
1297
- let ret = & self . v [ end - self . size . get ( ) . .end] ;
1296
+ let ret = & self . v [ end - self . size ..end] ;
1298
1297
self . v = & self . v [ ..end - 1 ] ;
1299
1298
Some ( ret)
1300
1299
}
@@ -1995,7 +1994,7 @@ pub struct ArrayWindows<'a, T: 'a, const N: usize> {
1995
1994
impl < ' a , T : ' a , const N : usize > ArrayWindows < ' a , T , N > {
1996
1995
#[ inline]
1997
1996
pub ( super ) fn new ( slice : & ' a [ T ] ) -> Self {
1998
- let num_windows = slice. len ( ) . saturating_sub ( N - 1 ) ;
1997
+ let num_windows = ( slice. len ( ) + 1 ) . saturating_sub ( N ) ;
1999
1998
Self { slice_head : slice. as_ptr ( ) , num : num_windows, marker : PhantomData }
2000
1999
}
2001
2000
}
0 commit comments