From 38b41985dc0edc370b68d234c1988f70dba42730 Mon Sep 17 00:00:00 2001 From: lisk77 Date: Wed, 5 Mar 2025 07:16:42 +0100 Subject: [PATCH] fix: removed the garbage github copilot code out of `flat_map` and making `iter_mut` irrelevant --- crates/comet_ecs/src/world.rs | 4 +- crates/comet_structs/src/component_storage.rs | 11 +-- crates/comet_structs/src/flat_map.rs | 75 ++++++------------- crates/comet_structs/src/iter_mut.rs | 15 ---- crates/comet_structs/src/lib.rs | 4 +- 5 files changed, 27 insertions(+), 82 deletions(-) delete mode 100644 crates/comet_structs/src/iter_mut.rs diff --git a/crates/comet_ecs/src/world.rs b/crates/comet_ecs/src/world.rs index 35c0a0c..1483cb2 100644 --- a/crates/comet_ecs/src/world.rs +++ b/crates/comet_ecs/src/world.rs @@ -83,7 +83,7 @@ impl World { /// Deletes an entity by its ID. pub fn delete_entity(&mut self, entity_id: usize) { self.entities[entity_id] = None; - for (key, value) in self.components.iter_mut() { + for (_, value) in self.components.iter_mut() { value.remove::(entity_id); } self.id_queue.sorted_enqueue(entity_id as u32); @@ -164,7 +164,7 @@ impl World { pub fn add_component(&mut self, entity_id: usize, component: C) { assert_ne!(self.entities.get(entity_id), None, "There is no entity with this ID ({}) in the world!", entity_id); self.components.set_component(entity_id, component); - let component_index = self.components.keys().iter_mut().position(|x| *x == *C::type_id()).unwrap(); + let component_index = self.components.keys().iter_mut().position(|x| *x == C::type_id()).unwrap(); self.get_entity_mut(entity_id).unwrap().add_component(component_index); diff --git a/crates/comet_structs/src/component_storage.rs b/crates/comet_structs/src/component_storage.rs index bf08d9a..12ab22d 100644 --- a/crates/comet_structs/src/component_storage.rs +++ b/crates/comet_structs/src/component_storage.rs @@ -1,6 +1,6 @@ use std::any::{Any, TypeId}; use comet_log::*; -use crate::{FlatMap, IterMut, SparseSet}; +use crate::{FlatMap, SparseSet}; pub type ComponentStorage = FlatMap; @@ -9,7 +9,6 @@ impl ComponentStorage { pub fn register_component(&mut self, capacity: usize) { if !self.contains(&TypeId::of::()) { self.insert(TypeId::of::(), SparseSet::new::(capacity)); - info!("Component {:?} has been registered", TypeId::of::()); } else { error!("Component {:?} already exists", TypeId::of::()); @@ -19,7 +18,6 @@ impl ComponentStorage { pub fn deregister_component(&mut self) { if self.contains(&TypeId::of::()) { self.remove(&TypeId::of::()); - info!("Component {:?} has been deregistered", TypeId::of::()); } else { error!("Component {:?} does not exist", TypeId::of::()); @@ -64,11 +62,4 @@ impl ComponentStorage { None } } - - pub fn iter_mut(&mut self) -> IterMut<'_, &TypeId, &SparseSet> { - IterMut { - keys_iter: self.keys_mut(), - values_iter: self.values_mut(), - } - } } \ No newline at end of file diff --git a/crates/comet_structs/src/flat_map.rs b/crates/comet_structs/src/flat_map.rs index ff0ab00..1b0edef 100644 --- a/crates/comet_structs/src/flat_map.rs +++ b/crates/comet_structs/src/flat_map.rs @@ -1,83 +1,54 @@ -#[derive(Clone)] -pub struct MapNode { - key: K, - value: V -} - -impl MapNode { - pub fn new(key: K, value: V) -> Self { - Self { - key, - value - } - } - - pub fn key(&self) -> &K { - &self.key - } - - pub fn value(&self) -> &V { - &self.value - } -} - #[derive(Clone)] pub struct FlatMap { - map: Vec> + map: Vec<(K,V)> } -impl FlatMap { +impl FlatMap { pub fn new() -> Self { Self { map: Vec::new() } } - pub fn keys(&self) -> Vec<&K> { - self.map.iter().map(|node| node.key()).collect::>() + pub fn keys(&self) -> Vec { + self.map.iter().map(|node| node.0.clone()).collect::>() } - pub fn values(&self) -> Vec<&V> { - self.map.iter().map(|node| node.value()).collect::>() - } - - pub fn keys_mut(&mut self) -> impl Iterator { - self.map.iter_mut().map(|node| &mut node.key) - } - - pub fn values_mut(&mut self) -> impl Iterator { - self.map.iter_mut().map(|node| &mut node.value) + pub fn values(&self) -> Vec { + self.map.iter().map(|node| node.1.clone()).collect::>() } pub fn insert(&mut self, key: K, value: V) { - let node = MapNode::new(key, value); - self.map.push(node); + self.map.push((key,value)); } pub fn remove(&mut self, key: &K) { - self.map.retain(|node| node.key() != key); + self.map.retain(|node| node.0 != *key); } pub fn get(&self, key: &K) -> Option<&V> { - self.map.iter() - .find(|node| node.key() == key) - .map(|node| node.value()) + if let Some(node) = self.map.iter().find(|node| node.0 == *key) { + Some(&node.1) + } + else { + None + } } pub fn get_mut(&mut self, key: &K) -> Option<&mut V> { - self.map.iter_mut() - .find(|node| node.key() == key) - .map(|node| node.value_mut()) + if let Some(node) = self.map.iter_mut().find(|node| node.0 == *key) { + Some(&mut node.1) + } + else { + None + } } pub fn contains(&self, key: &K) -> bool { - self.map.iter().any(|node| node.key() == key) + self.map.iter().any(|node| node.0 == *key) } -} -// Add this method to MapNode to allow mutable access to value -impl MapNode { - fn value_mut(&mut self) -> &mut V { - &mut self.value + pub fn iter_mut(&mut self) -> impl Iterator { + self.map.iter_mut() } } \ No newline at end of file diff --git a/crates/comet_structs/src/iter_mut.rs b/crates/comet_structs/src/iter_mut.rs deleted file mode 100644 index 59e2d5f..0000000 --- a/crates/comet_structs/src/iter_mut.rs +++ /dev/null @@ -1,15 +0,0 @@ -pub struct IterMut<'a, K, V> { - pub(crate) keys_iter: std::slice::IterMut<'a, K>, - pub(crate) values_iter: std::slice::IterMut<'a, V>, -} - -impl<'a, K, V> Iterator for IterMut<'a, K, V> { - type Item = (&'a mut K, &'a mut V); - - fn next(&mut self) -> Option { - match (self.keys_iter.next(), self.values_iter.next()) { - (Some(key), Some(value)) => Some((key, value)), - _ => None, - } - } -} \ No newline at end of file diff --git a/crates/comet_structs/src/lib.rs b/crates/comet_structs/src/lib.rs index d96a1bd..63e6646 100644 --- a/crates/comet_structs/src/lib.rs +++ b/crates/comet_structs/src/lib.rs @@ -2,10 +2,8 @@ pub use column::Column; pub use sparse_set::SparseSet; pub use flat_map::FlatMap; pub use component_storage::ComponentStorage; -pub use iter_mut::IterMut; mod column; mod sparse_set; mod flat_map; -mod component_storage; -mod iter_mut; \ No newline at end of file +mod component_storage; \ No newline at end of file