@@ -67,7 +67,7 @@ use std::mem;
67
67
use std:: mem:: MaybeUninit ;
68
68
use std:: ops;
69
69
use std:: ptr;
70
- use std:: slice;
70
+ use std:: slice:: { self , SliceIndex } ;
71
71
72
72
/// Creates a [`SmallVec`] containing the arguments.
73
73
///
@@ -1275,30 +1275,19 @@ impl<A: Array> From<A> for SmallVec<A> {
1275
1275
}
1276
1276
}
1277
1277
1278
- macro_rules! impl_index {
1279
- ( $index_type: ty, $output_type: ty) => {
1280
- impl <A : Array > ops:: Index <$index_type> for SmallVec <A > {
1281
- type Output = $output_type;
1282
- #[ inline]
1283
- fn index( & self , index: $index_type) -> & $output_type {
1284
- & ( & * * self ) [ index]
1285
- }
1286
- }
1278
+ impl < A : Array , I : SliceIndex < [ A :: Item ] > > ops:: Index < I > for SmallVec < A > {
1279
+ type Output = I :: Output ;
1287
1280
1288
- impl <A : Array > ops:: IndexMut <$index_type> for SmallVec <A > {
1289
- #[ inline]
1290
- fn index_mut( & mut self , index: $index_type) -> & mut $output_type {
1291
- & mut ( & mut * * self ) [ index]
1292
- }
1293
- }
1294
- } ;
1281
+ fn index ( & self , index : I ) -> & I :: Output {
1282
+ & ( * * self ) [ index]
1283
+ }
1295
1284
}
1296
1285
1297
- impl_index ! ( usize , A :: Item ) ;
1298
- impl_index ! ( ops :: Range < usize > , [ A :: Item ] ) ;
1299
- impl_index ! ( ops :: RangeFrom < usize > , [ A :: Item ] ) ;
1300
- impl_index ! ( ops :: RangeTo < usize > , [ A :: Item ] ) ;
1301
- impl_index ! ( ops :: RangeFull , [ A :: Item ] ) ;
1286
+ impl < A : Array , I : SliceIndex < [ A :: Item ] > > ops :: IndexMut < I > for SmallVec < A > {
1287
+ fn index_mut ( & mut self , index : I ) -> & mut I :: Output {
1288
+ & mut ( & mut * * self ) [ index ]
1289
+ }
1290
+ }
1302
1291
1303
1292
impl < A : Array > ExtendFromSlice < A :: Item > for SmallVec < A >
1304
1293
where
0 commit comments