1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
pub mod dfa;
pub mod dot;
pub mod nfa;
pub mod regex;
use std::fmt::Debug;
use std::hash::Hash;
pub trait Alphabet: Hash + Eq + Debug + Clone + Copy + Ord { }
impl<T> Alphabet for T where T: Hash + Eq + Debug + Clone + Copy + Ord { }
trait Ensure<T: Clone> {
fn ensure(&mut self, n: usize, item: T);
fn ensure_default(&mut self, n: usize) where T: Default {
self.ensure(n, T::default());
}
}
impl<T: Clone> Ensure<T> for Vec<T> {
fn ensure(&mut self, n: usize, item: T) {
let new_len = self.len().max(n);
self.resize(new_len, item);
}
}