/// Itère sur chaque zone simple (un bit) contenu dans ce bitflag.
/// Pour LogZone::ALL, ne retourne que les 8 zones prédéfinies (pas les 24 bits vides).
pub fn iter_single(self) -> impl Iterator<Item = LogZone> {
// Zones prédéfinies : bits 0..7
// Zones custom : bits 8..31, mais seulement si explicitement dans le bitflag
// (on ignore les bits custom qui sont 1 uniquement parce que ALL = u32::MAX)
const PREDEFINED: u32 = 0xFF; // bits 0..7
let predefined_bits = self.0 & PREDEFINED;
let custom_bits = if self.0 == u32::MAX { 0 } else { self.0 & !PREDEFINED };
let bits = predefined_bits | custom_bits;
(0..32u8)
.filter(move |&bit| bits & (1u32 << bit) != 0)
.map(|bit| LogZone(1u32 << bit))
}