From c262c48514324573696fe5e424a7be034c934587 Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Tue, 16 Sep 2014 14:00:34 +0200 Subject: [PATCH] Speedup epsilon transitions from state --- alib2data/src/automaton/FSM/EpsilonNFA.cpp | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/alib2data/src/automaton/FSM/EpsilonNFA.cpp b/alib2data/src/automaton/FSM/EpsilonNFA.cpp index 4678063669..456d1de406 100644 --- a/alib2data/src/automaton/FSM/EpsilonNFA.cpp +++ b/alib2data/src/automaton/FSM/EpsilonNFA.cpp @@ -132,15 +132,12 @@ std::map<State, std::set<State> > EpsilonNFA::getEpsilonTransitionsFromState(con if( states.find(from) == states.end()) throw AutomatonException("State \"" + (std::string) from.getName() + "\" doesn't exist"); - std::map<State, std::set<State> > transitionsFromState; - for (std::map<std::pair<State, std::variant<string::Epsilon, alphabet::Symbol> >, std::set<State> >::const_iterator transition = transitions.begin(); transition != transitions.end(); - transition++) { - if (transition->first.first == from && transition->first.second.is<string::Epsilon>()) { - transitionsFromState[transition->first.first].insert(transition->second.begin(), transition->second.end()); - } - } - - return transitionsFromState; + std::pair<State, std::variant<string::Epsilon, alphabet::Symbol> > key(from, std::variant<string::Epsilon, alphabet::Symbol>(string::Epsilon::EPSILON)); + std::map<State, std::set<State>> res; + auto transition = transitions.find(key); + if(transition != transitions.end()) + res.insert(std::make_pair(from, transition->second)); + return res; } std::map<std::pair<State, alphabet::Symbol>, std::set<State> > EpsilonNFA::getSymbolTransitionsFromState(const State& from) const { -- GitLab