Skip to content

Commit 5f8c219

Browse files
committed
use from_reflect for DynamicMap and simplify implementation
1 parent 088a8b9 commit 5f8c219

File tree

2 files changed

+10
-9
lines changed

2 files changed

+10
-9
lines changed

crates/bevy_reflect/src/impls/std.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,12 @@ impl<K: FromReflect + Eq + Hash, V: FromReflect> Map for HashMap<K, V> {
396396
}
397397

398398
fn remove(&mut self, key: &dyn Reflect) -> Option<Box<dyn Reflect>> {
399+
let mut from_reflect = None;
399400
key.downcast_ref::<K>()
401+
.or_else(|| {
402+
from_reflect = K::from_reflect(key);
403+
from_reflect.as_ref()
404+
})
400405
.and_then(|key| self.remove(key))
401406
.map(|value| Box::new(value) as Box<dyn Reflect>)
402407
}

crates/bevy_reflect/src/map.rs

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -253,15 +253,11 @@ impl Map for DynamicMap {
253253
}
254254

255255
fn remove(&mut self, key: &dyn Reflect) -> Option<Box<dyn Reflect>> {
256-
match self.indices.entry(key.reflect_hash().expect(HASH_ERROR)) {
257-
Entry::Occupied(entry) => {
258-
let index = *entry.get();
259-
entry.remove();
260-
let (_key, value) = self.values.remove(index);
261-
Some(value)
262-
}
263-
Entry::Vacant(_) => None,
264-
}
256+
let index = self
257+
.indices
258+
.remove(&key.reflect_hash().expect(HASH_ERROR))?;
259+
let (_key, value) = self.values.remove(index);
260+
Some(value)
265261
}
266262

267263
fn drain(self: Box<Self>) -> Vec<(Box<dyn Reflect>, Box<dyn Reflect>)> {

0 commit comments

Comments
 (0)