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