@@ -268,6 +268,31 @@ impl<A: Step> Iterator for ops::Range<A> {
268
268
}
269
269
}
270
270
271
+ macro_rules! impl_range_count {
272
+ ( $t: ty) => {
273
+ #[ unstable( feature = "inclusive_range" , reason = "recently added, follows RFC" , issue = "28237" ) ]
274
+ impl Iterator for ops:: Range <$t> {
275
+ #[ inline]
276
+ fn count( self ) -> usize {
277
+ self . end. wrapping_sub( self . start) as usize
278
+ }
279
+ }
280
+ } ;
281
+ }
282
+
283
+ impl_range_count ! ( u8 ) ;
284
+ impl_range_count ! ( u16 ) ;
285
+ impl_range_count ! ( u32 ) ;
286
+ impl_range_count ! ( u64 ) ;
287
+ impl_range_count ! ( usize ) ;
288
+
289
+ impl_range_count ! ( i8 ) ;
290
+ impl_range_count ! ( i16 ) ;
291
+ impl_range_count ! ( i32 ) ;
292
+ impl_range_count ! ( i64 ) ;
293
+ impl_range_count ! ( isize ) ;
294
+
295
+
271
296
// These macros generate `ExactSizeIterator` impls for various range types.
272
297
// Range<{u,i}64> and RangeInclusive<{u,i}{32,64,size}> are excluded
273
298
// because they cannot guarantee having a length <= usize::MAX, which is
@@ -421,6 +446,30 @@ impl<A: Step> Iterator for ops::RangeInclusive<A> {
421
446
}
422
447
}
423
448
449
+ macro_rules! impl_inclusive_range_count {
450
+ ( $t: ty) => {
451
+ #[ unstable( feature = "inclusive_range" , reason = "recently added, follows RFC" , issue = "28237" ) ]
452
+ impl Iterator for ops:: RangeInclusive <$t> {
453
+ #[ inline]
454
+ fn count( self ) -> usize {
455
+ ( self . end. wrapping_sub( self . start) as usize ) . wrapping_add( 1 )
456
+ }
457
+ }
458
+ } ;
459
+ }
460
+
461
+ impl_inclusive_range_count ! ( u8 ) ;
462
+ impl_inclusive_range_count ! ( u16 ) ;
463
+ impl_inclusive_range_count ! ( u32 ) ;
464
+ impl_inclusive_range_count ! ( u64 ) ;
465
+ impl_inclusive_range_count ! ( usize ) ;
466
+
467
+ impl_inclusive_range_count ! ( i8 ) ;
468
+ impl_inclusive_range_count ! ( i16 ) ;
469
+ impl_inclusive_range_count ! ( i32 ) ;
470
+ impl_inclusive_range_count ! ( i64 ) ;
471
+ impl_inclusive_range_count ! ( isize ) ;
472
+
424
473
#[ unstable( feature = "inclusive_range" , reason = "recently added, follows RFC" , issue = "28237" ) ]
425
474
impl < A : Step > DoubleEndedIterator for ops:: RangeInclusive < A > {
426
475
#[ inline]
0 commit comments