@@ -252,23 +252,22 @@ where
252
252
253
253
impl < T , U , const N : usize > AsRef < [ T ; N ] > for Array < T , U >
254
254
where
255
- Self : ArrayOps < T , N > ,
256
- U : ArraySize ,
255
+ U : ArraySize < ArrayType < T > = [ T ; N ] > ,
257
256
{
258
257
#[ inline]
259
258
fn as_ref ( & self ) -> & [ T ; N ] {
260
- self . as_core_array ( )
259
+ & self . 0
261
260
}
262
261
}
263
262
264
263
impl < T , U , const N : usize > AsRef < Array < T , U > > for [ T ; N ]
265
264
where
266
- Array < T , U > : ArrayOps < T , N > ,
267
- U : ArraySize ,
265
+ U : ArraySize < ArrayType < T > = [ T ; N ] > ,
268
266
{
269
267
#[ inline]
270
268
fn as_ref ( & self ) -> & Array < T , U > {
271
- Array :: ref_from_core_array ( self )
269
+ // SAFETY: `Self` is a `repr(transparent)` newtype for `[T; $len]`
270
+ unsafe { & * self . as_ptr ( ) . cast ( ) }
272
271
}
273
272
}
274
273
@@ -284,23 +283,22 @@ where
284
283
285
284
impl < T , U , const N : usize > AsMut < [ T ; N ] > for Array < T , U >
286
285
where
287
- Self : ArrayOps < T , N > ,
288
- U : ArraySize ,
286
+ U : ArraySize < ArrayType < T > = [ T ; N ] > ,
289
287
{
290
288
#[ inline]
291
289
fn as_mut ( & mut self ) -> & mut [ T ; N ] {
292
- self . as_mut_core_array ( )
290
+ & mut self . 0
293
291
}
294
292
}
295
293
296
294
impl < T , U , const N : usize > AsMut < Array < T , U > > for [ T ; N ]
297
295
where
298
- Array < T , U > : ArrayOps < T , N > ,
299
- U : ArraySize ,
296
+ U : ArraySize < ArrayType < T > = [ T ; N ] > ,
300
297
{
301
298
#[ inline]
302
299
fn as_mut ( & mut self ) -> & mut Array < T , U > {
303
- Array :: ref_mut_from_core_array ( self )
300
+ // SAFETY: `Self` is a `repr(transparent)` newtype for `[T; $len]`
301
+ unsafe { & mut * self . as_mut_ptr ( ) . cast ( ) }
304
302
}
305
303
}
306
304
@@ -316,12 +314,11 @@ where
316
314
317
315
impl < T , U , const N : usize > Borrow < [ T ; N ] > for Array < T , U >
318
316
where
319
- Self : ArrayOps < T , N > ,
320
- U : ArraySize ,
317
+ U : ArraySize < ArrayType < T > = [ T ; N ] > ,
321
318
{
322
319
#[ inline]
323
320
fn borrow ( & self ) -> & [ T ; N ] {
324
- self . as_core_array ( )
321
+ & self . 0
325
322
}
326
323
}
327
324
@@ -337,12 +334,11 @@ where
337
334
338
335
impl < T , U , const N : usize > BorrowMut < [ T ; N ] > for Array < T , U >
339
336
where
340
- Self : ArrayOps < T , N > ,
341
- U : ArraySize ,
337
+ U : ArraySize < ArrayType < T > = [ T ; N ] > ,
342
338
{
343
339
#[ inline]
344
340
fn borrow_mut ( & mut self ) -> & mut [ T ; N ] {
345
- self . as_mut_core_array ( )
341
+ & mut self . 0
346
342
}
347
343
}
348
344
@@ -437,45 +433,41 @@ where
437
433
438
434
impl < ' a , T , U , const N : usize > From < & ' a [ T ; N ] > for & ' a Array < T , U >
439
435
where
440
- Array < T , U > : ArrayOps < T , N > ,
441
- U : ArraySize ,
436
+ U : ArraySize < ArrayType < T > = [ T ; N ] > ,
442
437
{
443
438
#[ inline]
444
439
fn from ( array_ref : & ' a [ T ; N ] ) -> & ' a Array < T , U > {
445
- < Array < T , U > > :: ref_from_core_array ( array_ref)
440
+ array_ref. as_ref ( )
446
441
}
447
442
}
448
443
449
444
impl < ' a , T , U , const N : usize > From < & ' a Array < T , U > > for & ' a [ T ; N ]
450
445
where
451
- Array < T , U > : ArrayOps < T , N > ,
452
- U : ArraySize ,
446
+ U : ArraySize < ArrayType < T > = [ T ; N ] > ,
453
447
{
454
448
#[ inline]
455
449
fn from ( array_ref : & ' a Array < T , U > ) -> & ' a [ T ; N ] {
456
- array_ref. as_core_array ( )
450
+ array_ref. as_ref ( )
457
451
}
458
452
}
459
453
460
454
impl < ' a , T , U , const N : usize > From < & ' a mut [ T ; N ] > for & ' a mut Array < T , U >
461
455
where
462
- Array < T , U > : ArrayOps < T , N > ,
463
- U : ArraySize ,
456
+ U : ArraySize < ArrayType < T > = [ T ; N ] > ,
464
457
{
465
458
#[ inline]
466
459
fn from ( array_ref : & ' a mut [ T ; N ] ) -> & ' a mut Array < T , U > {
467
- < Array < T , U > > :: ref_mut_from_core_array ( array_ref)
460
+ array_ref. as_mut ( )
468
461
}
469
462
}
470
463
471
464
impl < ' a , T , U , const N : usize > From < & ' a mut Array < T , U > > for & ' a mut [ T ; N ]
472
465
where
473
- Array < T , U > : ArrayOps < T , N > ,
474
- U : ArraySize ,
466
+ U : ArraySize < ArrayType < T > = [ T ; N ] > ,
475
467
{
476
468
#[ inline]
477
469
fn from ( array_ref : & ' a mut Array < T , U > ) -> & ' a mut [ T ; N ] {
478
- array_ref. as_mut_core_array ( )
470
+ array_ref. as_mut ( )
479
471
}
480
472
}
481
473
0 commit comments