use super::{super::PatternItem, Pattern};
use zerovec::ule::AsULE;
pub fn maybe_replace_first(pattern: &mut Pattern, f: impl Fn(&PatternItem) -> Option<PatternItem>) {
let result = pattern
.items
.iter()
.enumerate()
.find_map(|(i, item)| f(&item).map(|result| (i, result)));
#[allow(clippy::indexing_slicing)] if let Some((i, result)) = result {
pattern.items.to_mut_slice()[i] = result.to_unaligned();
}
}
#[cfg(any(feature = "datagen", feature = "experimental"))] pub fn maybe_replace(pattern: &mut Pattern, f: impl Fn(&PatternItem) -> Option<PatternItem>) {
let result = pattern
.items
.iter()
.enumerate()
.find_map(|(i, item)| f(&item).map(|result| (i, result)));
#[allow(clippy::indexing_slicing)] if let Some((i, result)) = result {
let owned = pattern.items.to_mut_slice();
owned[i] = result.to_unaligned();
owned.iter_mut().skip(i).for_each(|item| {
if let Some(new_item) = f(&PatternItem::from_unaligned(*item)) {
*item = new_item.to_unaligned();
}
});
}
}