@@ -107,7 +107,7 @@ unsafe impl<T> DistinctStorage for HashMapStorage<T> {}
107
107
pub struct DenseVecStorage < T > {
108
108
data : Vec < T > ,
109
109
entity_id : Vec < Index > ,
110
- data_id : Vec < Index > ,
110
+ data_id : Vec < MaybeUninit < Index > > ,
111
111
}
112
112
113
113
impl < T > SliceAccess < T > for DenseVecStorage < T > {
@@ -141,12 +141,12 @@ impl<T> UnprotectedStorage<T> for DenseVecStorage<T> {
141
141
}
142
142
143
143
unsafe fn get ( & self , id : Index ) -> & T {
144
- let did = * self . data_id . get_unchecked ( id as usize ) ;
144
+ let did = self . data_id . get_unchecked ( id as usize ) . assume_init ( ) ;
145
145
self . data . get_unchecked ( did as usize )
146
146
}
147
147
148
148
unsafe fn get_mut ( & mut self , id : Index ) -> & mut T {
149
- let did = * self . data_id . get_unchecked ( id as usize ) ;
149
+ let did = self . data_id . get_unchecked ( id as usize ) . assume_init ( ) ;
150
150
self . data . get_unchecked_mut ( did as usize )
151
151
}
152
152
@@ -157,15 +157,15 @@ impl<T> UnprotectedStorage<T> for DenseVecStorage<T> {
157
157
self . data_id . reserve ( delta) ;
158
158
self . data_id . set_len ( id + 1 ) ;
159
159
}
160
- * self . data_id . get_unchecked_mut ( id) = self . data . len ( ) as Index ;
160
+ self . data_id . get_unchecked_mut ( id) . as_mut_ptr ( ) . write ( self . data . len ( ) as Index ) ;
161
161
self . entity_id . push ( id as Index ) ;
162
162
self . data . push ( v) ;
163
163
}
164
164
165
165
unsafe fn remove ( & mut self , id : Index ) -> T {
166
- let did = * self . data_id . get_unchecked ( id as usize ) ;
166
+ let did = self . data_id . get_unchecked ( id as usize ) . assume_init ( ) ;
167
167
let last = * self . entity_id . last ( ) . unwrap ( ) ;
168
- * self . data_id . get_unchecked_mut ( last as usize ) = did;
168
+ self . data_id . get_unchecked_mut ( last as usize ) . as_mut_ptr ( ) . write ( did) ;
169
169
self . entity_id . swap_remove ( did as usize ) ;
170
170
self . data . swap_remove ( did as usize )
171
171
}
0 commit comments