use vyre_primitives::nfa::subgroup_nfa::MAX_STATES_PER_SUBGROUP;
#[must_use]
pub fn plan_shards<'a>(patterns: &'a [&'a str]) -> Vec<Vec<&'a str>> {
let mut shards: Vec<Vec<&str>> = Vec::new();
let mut current: Vec<&str> = Vec::new();
let mut current_states: usize = 1;
for p in patterns {
let extra = p.len();
if extra >= MAX_STATES_PER_SUBGROUP {
if !current.is_empty() {
shards.push(std::mem::take(&mut current));
current_states = 1;
}
shards.push(vec![*p]);
continue;
}
if current_states + extra > MAX_STATES_PER_SUBGROUP {
shards.push(std::mem::take(&mut current));
current_states = 1;
}
current.push(*p);
current_states += extra;
}
if !current.is_empty() {
shards.push(current);
}
shards
}