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