summaryrefslogtreecommitdiff
path: root/nfa
diff options
context:
space:
mode:
Diffstat (limited to 'nfa')
-rw-r--r--nfa/src/default/nfa.rs32
1 files changed, 11 insertions, 21 deletions
diff --git a/nfa/src/default/nfa.rs b/nfa/src/default/nfa.rs
index d2fe88e..e38a1a9 100644
--- a/nfa/src/default/nfa.rs
+++ b/nfa/src/default/nfa.rs
@@ -20,7 +20,7 @@ pub struct DefaultNFA<T: GraphLabel> {
graph: DLGraph<T>,
}
-impl<T: GraphLabel + Display> Default for DefaultNFA<T> {
+impl<T: GraphLabel> Default for DefaultNFA<T> {
fn default() -> Self {
Self {
graph: Default::default(),
@@ -85,10 +85,9 @@ impl<T: GraphLabel> LabelExtGraph<T> for DefaultNFA<T> {
}
impl<T: GraphLabel> Nfa<T> for DefaultNFA<T> {
- type FromRegex<S: GraphLabel + Display + Default> = DefaultNFA<S>;
+ type FromRegex<S: GraphLabel + Default> = DefaultNFA<S>;
- // Reminder: This is an adopted version of Thompson's
- // construction.
+ // NOTE: This is an adopted version of Thompson's construction.
fn to_nfa(
regexps: &[impl Regex<RegexType<T>>],
sub_pred: impl Fn(T) -> Result<SoC<T>, Error>,
@@ -107,10 +106,6 @@ impl<T: GraphLabel> Nfa<T> for DefaultNFA<T> {
builder.add_vertices(nfa_len);
- // for _ in 0..nfa_len {
- // builder.add_vertex();
- // }
-
let default = LabelType::new(DOption(default), total_regexps_len, false);
// add a default edge
@@ -122,7 +117,7 @@ impl<T: GraphLabel> Nfa<T> for DefaultNFA<T> {
result.push(0);
for regexp in regexps.iter().take(regexps.len() - 1) {
- result.push(result.last().unwrap() + regexp.nodes_len() * 2);
+ result.push(*result.last().unwrap() + regexp.nodes_len() * 2);
}
result
@@ -137,14 +132,14 @@ impl<T: GraphLabel> Nfa<T> for DefaultNFA<T> {
}
);
- /// Get offset from `accumulators` without checking bounds.
- macro_rules! get_offset_unsafe (
- ($num:expr) => {
- { unsafe { *accumulators.get_unchecked($num) } }
- }
- );
+ // /// Get offset from `accumulators` without checking bounds.
+ // macro_rules! get_offset_unsafe (
+ // ($num:expr) => {
+ // { unsafe { *accumulators.get_unchecked($num) } }
+ // }
+ // );
- for (index, regex) in regexps.iter().enumerate() {
+ for (regex, offset) in regexps.iter().zip(accumulators.iter().copied()) {
let root = if let Some(root) = regex.root() {
root
} else {
@@ -155,11 +150,6 @@ impl<T: GraphLabel> Nfa<T> for DefaultNFA<T> {
let regex_len = regex.nodes_len();
- // It is safe here to call `get_offset_unsafe`, as `index`
- // is guaranteed to be strictly less than the length of
- // `accumulators` by an assertion above.
- let offset = get_offset_unsafe!(index);
-
let mut stack: Vec<usize> = Vec::with_capacity(regex_len);
stack.push(root);