1
1
use rustc_index:: vec:: { Idx , IndexVec } ;
2
2
use std:: mem;
3
- use std:: ptr;
4
3
5
4
pub trait IdFunctor : Sized {
6
5
type Inner ;
@@ -29,12 +28,12 @@ impl<T> IdFunctor for Box<T> {
29
28
let raw = Box :: into_raw ( self ) ;
30
29
Ok ( unsafe {
31
30
// SAFETY: The raw pointer points to a valid value of type `T`.
32
- let value = ptr :: read ( raw ) ;
31
+ let value = raw . read ( ) ;
33
32
// SAFETY: Converts `Box<T>` to `Box<MaybeUninit<T>>` which is the
34
33
// inverse of `Box::assume_init()` and should be safe.
35
34
let mut raw: Box < mem:: MaybeUninit < T > > = Box :: from_raw ( raw. cast ( ) ) ;
36
35
// SAFETY: Write the mapped value back into the `Box`.
37
- ptr :: write ( raw. as_mut_ptr ( ) , f ( value) ?) ;
36
+ raw. write ( f ( value) ?) ;
38
37
// SAFETY: We just initialized `raw`.
39
38
raw. assume_init ( )
40
39
} )
@@ -57,14 +56,13 @@ impl<T> IdFunctor for Vec<T> {
57
56
let start = self . as_mut_ptr ( ) ;
58
57
for i in 0 ..len {
59
58
let p = start. add ( i) ;
60
- match f ( ptr :: read ( p ) ) {
61
- Ok ( value ) => ptr :: write ( p , value ) ,
59
+ match f ( p . read ( ) ) {
60
+ Ok ( val ) => p . write ( val ) ,
62
61
Err ( err) => {
63
62
// drop all other elements in self
64
63
// (current element was "moved" into the call to f)
65
64
for j in ( 0 ..i) . chain ( i + 1 ..len) {
66
- let p = start. add ( j) ;
67
- ptr:: drop_in_place ( p) ;
65
+ start. add ( j) . drop_in_place ( ) ;
68
66
}
69
67
70
68
// returning will drop self, releasing the allocation
0 commit comments