wowlab_engine_combat/state/program/effects/
families.rs1use super::EFFECT_FAMILY_COUNT;
2use crate::state::EffectFamily;
3
4pub(super) fn family_indexes(families: EffectFamily) -> impl Iterator<Item = usize> {
5 let mut bits = families.bits();
6
7 std::iter::from_fn(move || {
8 if bits == 0 {
9 return None;
10 }
11
12 let index = bits.trailing_zeros() as usize;
13
14 bits &= bits - 1;
15
16 Some(index)
17 })
18}
19
20pub(super) fn single_family_index(family: EffectFamily) -> Option<usize> {
21 let bits = family.bits();
22
23 bits.is_power_of_two()
24 .then(|| bits.trailing_zeros() as usize)
25 .filter(|index| *index < EFFECT_FAMILY_COUNT)
26}