summaryrefslogtreecommitdiff
path: root/ecs/src/component/storage.rs
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2024-11-16 18:35:08 +0100
committerHampusM <hampus@hampusmat.com>2024-11-16 18:35:08 +0100
commit3e33964aa800376e4c60e71c735b8eef7788c4e5 (patch)
tree587c2bd8a6e041449cd1514434db9ce0814c9f46 /ecs/src/component/storage.rs
parentc9a07ff61b607478e264fc0581076643c750fe98 (diff)
feat(ecs): check comp metadata list before creating archetype ID
Diffstat (limited to 'ecs/src/component/storage.rs')
-rw-r--r--ecs/src/component/storage.rs16
1 files changed, 7 insertions, 9 deletions
diff --git a/ecs/src/component/storage.rs b/ecs/src/component/storage.rs
index 5c32e1e..c407192 100644
--- a/ecs/src/component/storage.rs
+++ b/ecs/src/component/storage.rs
@@ -32,20 +32,18 @@ impl Storage
) -> ArchetypeRefIter<'_>
where
CompMetadataList: Sortable<Item = ComponentMetadata>,
- CompMetadataList: Borrow<[ComponentMetadata]>,
+ CompMetadataList: AsRef<[ComponentMetadata]>,
{
components_metadata.sort_by_key_b(|component_metadata| component_metadata.id);
- let archetype_id = ArchetypeId::from_components_metadata(
- components_metadata.borrow().iter().cloned(),
- );
+ let archetype_id = ArchetypeId::from_components_metadata(&components_metadata);
// This looks stupid but the borrow checker complains otherwise
if self.archetype_lookup.borrow().contains_key(&archetype_id) {
return self.iter_archetypes_by_lookup(archetype_id);
}
- let comp_ids_set = create_non_opt_component_id_set(components_metadata.borrow());
+ let comp_ids_set = create_non_opt_component_id_set(components_metadata.as_ref());
let matching_archetype_indices = self
.archetypes
@@ -105,9 +103,10 @@ impl Storage
);
let archetype_id = ArchetypeId::from_components_metadata(
- components
+ &components
.iter()
- .map(|component| ComponentMetadata::of(&**component)),
+ .map(|component| ComponentMetadata::of(&**component))
+ .collect::<Vec<_>>(),
);
let comp_ids_set = create_non_opt_component_id_set(
@@ -529,7 +528,6 @@ mod tests
Metadata as ComponentMetadata,
};
use crate::uid::{Kind as UidKind, Uid};
- use crate::{self as ecs};
#[derive(Debug, Component)]
struct HealthPotion
@@ -610,7 +608,7 @@ mod tests
let archetype_lookup = component_storage.archetype_lookup.borrow();
let lookup_entry = archetype_lookup
- .get(&ArchetypeId::from_components_metadata(components_metadata))
+ .get(&ArchetypeId::from_components_metadata(&components_metadata))
.expect("Expected entry in archetype lookup map");
let first_archetype_index = lookup_entry