Skip to main content

wowlab_engine_combat/state/program/effects/
families.rs

1use 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}