diff options
author | HampusM <hampus@hampusmat.com> | 2025-10-13 18:50:30 +0200 |
---|---|---|
committer | HampusM <hampus@hampusmat.com> | 2025-10-13 18:50:30 +0200 |
commit | cb1197a132f87cd5034bb8927fdbd09878d9239a (patch) | |
tree | ac234c3d659f06f99e0945a88b73cae28fc4bf59 /ecs/src/uid.rs | |
parent | d1cf80806c3be68d4a96faefbad4e4cdc0a7832e (diff) |
Diffstat (limited to 'ecs/src/uid.rs')
-rw-r--r-- | ecs/src/uid.rs | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/ecs/src/uid.rs b/ecs/src/uid.rs index a361882..bb393a1 100644 --- a/ecs/src/uid.rs +++ b/ecs/src/uid.rs @@ -2,8 +2,10 @@ use std::fmt::{Debug, Display, Formatter}; use std::mem::transmute; use std::sync::atomic::{AtomicU32, Ordering}; +use seq_macro::seq; + use crate::component::Component; -use crate::util::{gen_mask_64, BitMask, NumberExt}; +use crate::util::{gen_mask_64, Array, BitMask, NumberExt}; static NEXT: AtomicU32 = AtomicU32::new(Uid::FIRST_UNIQUE_ID); @@ -230,3 +232,30 @@ impl<ComponentT: Component> With for ComponentT Self::id() } } + +pub trait WithUidTuple +{ + type UidsArray: Array<Uid>; + + fn uids() -> Self::UidsArray; +} + +macro_rules! impl_with_uid_tuple { + ($c: tt) => { + seq!(I in 0..=$c { + impl<#(WithUid~I: With,)*> WithUidTuple for (#(WithUid~I,)*) + { + type UidsArray = [Uid; $c + 1]; + + fn uids() -> Self::UidsArray + { + [#(WithUid~I::uid(),)*] + } + } + }); + }; +} + +seq!(C in 0..=16 { + impl_with_uid_tuple!(C); +}); |