Hi, I've stumbled upon a problem I cannot seem to solve and I was wondering if any of you guys could help me with it. I have a structure which looks like:
#[derive(PartialEq, Eq)]
pub struct DFAState<'a> {
pub name: Vec<&'a State>,
pub link: HashMap<String, char>,
pub end_state: bool,
}
and another one, which packs a vector of DFAState's.
pub struct DFAList<'a> {
pub states: Vec<DFAState<'a>>,
pub terminals: Vec<char>,
}
impl<'a> DFAList<'a> {
pub fn check_connections(&mut self, state_list: &'a StateList) {
for stmnt in self.states.iter() {
let mut vec: Vec<&'a State> = Vec::new();
for i in &state_list.values {
let mut string = String::new();
let ch = i;
for st in stmnt.name.iter() {
for (key, val) in &st.directions {
if *val == *ch {
string.push_str(&key);
let str_val: Vec<char> = key.chars().collect();
let node: &State = &state_list.list[state_list.get_state_by_name(str_val[0]).unwrap()];
if !vec.contains(&node) {
vec.push(&node);
}
}
}
}
if string != "".to_string() {
stmnt.link.insert(string, *ch);
}
}
println!("q{} {:?} {}", stmnt, stmnt.link, vec.len());
dfa_states_vec.push(DFAState::new_dfa_state(vec));
}
}
}
To my understanding, I'm trying to mutate a list which I'm already referencing and I don't know how to solve this. My whole project, if anyone needs it: