use crate::regular_expressions::*;
#[derive(Debug, PartialEq, Eq)]
pub enum SearchResult {
Found(usize, usize),
NotFound,
}
pub fn naive_search(pattern: &[u32], string: &[u32], k: usize) -> SearchResult {
let p_len = pattern.len();
let s_len = string.len();
let mut i = k;
while i + p_len <= s_len {
let mut j = 0;
while j < p_len && pattern[j] == string[i + j] {
j += 1;
}
if j == p_len {
return SearchResult::Found(i, i + p_len);
}
i += 1;
}
SearchResult::NotFound
}
pub fn naive_re_search(
manager: &mut ReManager,
pattern: RegLan,
string: &[u32],
k: usize,
allow_empty: bool,
) -> SearchResult {
if allow_empty && pattern.nullable {
return SearchResult::Found(k, k);
}
let s_len = string.len();
let mut i = k;
while i < s_len {
let mut j = i;
let mut p = pattern;
while j < s_len {
p = manager.char_derivative(p, string[j]);
if p.nullable {
return SearchResult::Found(i, j + 1);
}
if p.is_empty() {
break;
}
j += 1;
}
i += 1;
}
SearchResult::NotFound
}