From d83aad679e19464f149367e0d4f7734cff23cf42 Mon Sep 17 00:00:00 2001
From: Jan Travnicek <jan.travnicek@.fit.cvut.cz>
Date: Wed, 3 Apr 2019 11:13:56 +0200
Subject: [PATCH] use move semantics in compaction

---
 alib2algo/src/automaton/transform/Compaction.h | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/alib2algo/src/automaton/transform/Compaction.h b/alib2algo/src/automaton/transform/Compaction.h
index a8b8726862..af619d8cfb 100644
--- a/alib2algo/src/automaton/transform/Compaction.h
+++ b/alib2algo/src/automaton/transform/Compaction.h
@@ -82,7 +82,7 @@ ext::require < isDFA < T > || isNFA < T >, Compaction::CompactAutomaton < T > >
 	for(const auto& transition: automaton.getTransitionsFromState(automaton.getInitialState()))
 		stack.push(ext::make_tuple(transition.second, automaton.getInitialState(), transition.first.second));
 
-	if(automaton.getFinalStates().count(automaton.getInitialState()) > 0)
+	if(automaton.getFinalStates().count(automaton.getInitialState()))
 		res.addFinalState(automaton.getInitialState());
 
 	while(!stack.empty()) {
@@ -91,7 +91,7 @@ ext::require < isDFA < T > || isNFA < T >, Compaction::CompactAutomaton < T > >
 		SymbolType symbol = std::move(std::get<2>(stack.top()));
 		stack.pop();
 
-		ext::vector < SymbolType > path { symbol };
+		ext::vector < SymbolType > path { std::move ( symbol ) };
 
 		decltype ( automaton.getTransitionsFromState ( q ) ) transitions;
 		// only 1 child and nonfinal
@@ -101,17 +101,17 @@ ext::require < isDFA < T > || isNFA < T >, Compaction::CompactAutomaton < T > >
 			q = transition.second;
 		}
 
+		for(const std::pair<const ext::pair<StateType, SymbolType>, StateType>& transition : transitions )
+			if(visited.insert(ext::make_tuple(transition.second, q, transition.first.second)).second)
+				stack.push(ext::make_tuple(transition.second, q, transition.first.second));
+
 		// fork or final state
 		res.addState(q);
 
 		if(automaton.getFinalStates().count(q))
 			res.addFinalState(q);
 
-		res.addTransition(lastFork, path, q);
-
-		for(const std::pair<const ext::pair<StateType, SymbolType>, StateType>& transition : transitions )
-			if(visited.insert(ext::make_tuple(transition.second, q, transition.first.second)).second)
-				stack.push(ext::make_tuple(transition.second, q, transition.first.second));
+		res.addTransition ( std::move ( lastFork ), std::move ( path ), std::move ( q ) );
 
 	}
 
-- 
GitLab