Skip to content

Commit d79e603

Browse files
committed
Switch DenseVecStorage::data_id to Vec<MaybeUninit<Index>>
This vector contains uninitialized data, so it should use MaybeUninit.
1 parent 2010379 commit d79e603

File tree

1 file changed

+6
-6
lines changed

1 file changed

+6
-6
lines changed

src/storage/storages.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ unsafe impl<T> DistinctStorage for HashMapStorage<T> {}
107107
pub struct DenseVecStorage<T> {
108108
data: Vec<T>,
109109
entity_id: Vec<Index>,
110-
data_id: Vec<Index>,
110+
data_id: Vec<MaybeUninit<Index>>,
111111
}
112112

113113
impl<T> SliceAccess<T> for DenseVecStorage<T> {
@@ -141,12 +141,12 @@ impl<T> UnprotectedStorage<T> for DenseVecStorage<T> {
141141
}
142142

143143
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();
145145
self.data.get_unchecked(did as usize)
146146
}
147147

148148
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();
150150
self.data.get_unchecked_mut(did as usize)
151151
}
152152

@@ -157,15 +157,15 @@ impl<T> UnprotectedStorage<T> for DenseVecStorage<T> {
157157
self.data_id.reserve(delta);
158158
self.data_id.set_len(id + 1);
159159
}
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);
161161
self.entity_id.push(id as Index);
162162
self.data.push(v);
163163
}
164164

165165
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();
167167
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);
169169
self.entity_id.swap_remove(did as usize);
170170
self.data.swap_remove(did as usize)
171171
}

0 commit comments

Comments
 (0)