summaryrefslogtreecommitdiff
path: root/ecs/src/archetype.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/archetype.rs
parentc9a07ff61b607478e264fc0581076643c750fe98 (diff)
feat(ecs): check comp metadata list before creating archetype ID
Diffstat (limited to 'ecs/src/archetype.rs')
-rw-r--r--ecs/src/archetype.rs17
1 files changed, 15 insertions, 2 deletions
diff --git a/ecs/src/archetype.rs b/ecs/src/archetype.rs
index 5c104b7..d2ee36a 100644
--- a/ecs/src/archetype.rs
+++ b/ecs/src/archetype.rs
@@ -16,12 +16,25 @@ pub struct Id
impl Id
{
pub fn from_components_metadata(
- components_metadata: impl IntoIterator<Item = ComponentMetadata>,
+ components_metadata: &impl AsRef<[ComponentMetadata]>,
) -> Self
{
+ debug_assert!(
+ components_metadata.as_ref().len() > 0,
+ "Cannot create a archetype ID from a empty component metadata list"
+ );
+
+ debug_assert!(
+ components_metadata
+ .as_ref()
+ .is_sorted_by_key(|comp_metadata| comp_metadata.id),
+ "Cannot create archetype ID from a unsorted component metadata list"
+ );
+
Self::new(
components_metadata
- .into_iter()
+ .as_ref()
+ .iter()
.filter_map(|component_metadata| {
if component_metadata.is_optional == ComponentIsOptional::Yes {
return None;