From c92dbd657db1342558e02c8758f30cdf6501ec3e Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Mon, 1 Feb 2016 19:30:58 +0100
Subject: [PATCH] refactor iterators to foreach

---
 alib2algo/src/automaton/simplify/Minimize.cpp | 93 ++++++++-----------
 alib2algo/src/automaton/simplify/Minimize.h   |  2 +-
 2 files changed, 38 insertions(+), 57 deletions(-)

diff --git a/alib2algo/src/automaton/simplify/Minimize.cpp b/alib2algo/src/automaton/simplify/Minimize.cpp
index 3ae99c5fdd..d0ff210364 100644
--- a/alib2algo/src/automaton/simplify/Minimize.cpp
+++ b/alib2algo/src/automaton/simplify/Minimize.cpp
@@ -37,53 +37,46 @@ automaton::DFA Minimize::minimize(const automaton::DFA& dfa) {
 
 	std::map<automaton::State, std::map<alphabet::Symbol, automaton::State > > refactor;
 
-	for(std::set<automaton::State>::const_iterator iter = dfa.getStates().begin(); iter != dfa.getStates().end(); iter++) {
-		refactor.insert(std::pair<automaton::State, std::map<alphabet::Symbol, automaton::State> >(*iter, std::map<alphabet::Symbol, automaton::State>()));
+	for(const automaton::State& state : dfa.getStates()) {
+		refactor.insert(std::make_pair(state, std::map<alphabet::Symbol, automaton::State>()));
 	}
 
-	for(std::map<std::pair<automaton::State, alphabet::Symbol>, automaton::State>::const_iterator iter = dfa.getTransitions().begin(); iter != dfa.getTransitions().end(); iter++) {
-		refactor[iter->first.first].insert(std::pair<alphabet::Symbol, automaton::State>(iter->first.second, iter->second));
+	for(const std::pair<const std::pair<automaton::State, alphabet::Symbol>, automaton::State>& transition : dfa.getTransitions()) {
+		refactor[transition.first.first].insert(std::make_pair(transition.first.second, transition.second));
 	}
 
-	std::map<automaton::State, automaton::State> toEquvivalentStates1;//original state to equivalent state
+	std::map<automaton::State, automaton::State> toEquvivalentStates1; //original state to equivalent state
 	std::map<std::pair<automaton::State, std::set<std::pair<alphabet::Symbol, automaton::State> > >, std::set<automaton::State> > minimizedTransitionFunction1; //mapped to the original state
 
 	std::map<automaton::State, automaton::State> toEquvivalentStates2;
 	std::map<std::pair<automaton::State, std::set<std::pair<alphabet::Symbol, automaton::State> > >, std::set<automaton::State> > minimizedTransitionFunction2;
 
 	const automaton::State *firstFinal = NULL, *firstNonfinal = NULL;
-	for(auto iter = dfa.getStates().begin(); iter != dfa.getStates().end(); iter++) {
-		if(dfa.getFinalStates().count(*iter) == 0) { // not a final state
-			if(!firstNonfinal) firstNonfinal = &(*iter);
-			toEquvivalentStates2.insert(std::pair<automaton::State, automaton::State>(*iter, *firstNonfinal));
+	for(const automaton::State& state : dfa.getStates()) {
+		if(dfa.getFinalStates().count(state) == 0) { // not a final state
+			if(!firstNonfinal) firstNonfinal = &state;
+			toEquvivalentStates2.insert(std::pair<automaton::State, automaton::State>(state, *firstNonfinal));
 		} else {
-			if(!firstFinal) firstFinal = &(*iter);
-			toEquvivalentStates2.insert(std::pair<automaton::State, automaton::State>(*iter, *firstFinal));
+			if(!firstFinal) firstFinal = &state;
+			toEquvivalentStates2.insert(std::pair<automaton::State, automaton::State>(state, *firstFinal));
 		}
 	}
 
-	for(auto iter = refactor.begin(); iter != refactor.end(); iter++) {
-		automaton::State from = toEquvivalentStates2.find(iter->first)->second;
+	for(const std::pair<const automaton::State, std::map<alphabet::Symbol, automaton::State> >& transition : refactor) {
+		const automaton::State& from = toEquvivalentStates2.find(transition.first)->second;
 		std::set<std::pair<alphabet::Symbol, automaton::State> > transitionFunction;
 
-		for(auto iter2 = iter->second.begin(); iter2 != iter->second.end(); iter2++) {
-			transitionFunction.insert(std::pair<alphabet::Symbol, automaton::State>(iter2->first, toEquvivalentStates2.find(iter2->second)->second));
+		for(const std::pair<const alphabet::Symbol, automaton::State> & transitionFromState : transition.second) {
+			transitionFunction.insert(std::make_pair(transitionFromState.first, toEquvivalentStates2.find(transitionFromState.second)->second));
 		}
 
-		std::pair<automaton::State, std::set<std::pair<alphabet::Symbol, automaton::State> > > key(from, transitionFunction);
-
-		if(minimizedTransitionFunction2.find(key) == minimizedTransitionFunction2.end()) {
-			minimizedTransitionFunction2.insert(std::pair<std::pair<automaton::State, std::set<std::pair<alphabet::Symbol, automaton::State> > >, std::set<automaton::State> >(key, std::set<automaton::State>()));
-		}
-		minimizedTransitionFunction2[key].insert(iter->first);
+		minimizedTransitionFunction2[std::make_pair(from, transitionFunction)].insert(transition.first);
 	}
 
 	size_t delta_iter = 0;
-
 	if(common::GlobalData::verbose) {
-		print_progress(dfa, minimizedTransitionFunction2, delta_iter);
+		print_progress(dfa, minimizedTransitionFunction2, delta_iter++);
 	}
-	delta_iter += 1;
 
 	do {
 		toEquvivalentStates1 = toEquvivalentStates2;
@@ -92,43 +85,33 @@ automaton::DFA Minimize::minimize(const automaton::DFA& dfa) {
 		toEquvivalentStates2.clear();
 		minimizedTransitionFunction2.clear();
 
-		int number = 0;
-		for(auto iter = minimizedTransitionFunction1.begin(); iter != minimizedTransitionFunction1.end(); iter++) {
-			for(auto iter2 = iter->second.begin(); iter2 != iter->second.end(); iter2++) {
-				//toEquvivalentStates2.insert(std::pair<automaton::State, automaton::State>(*iter2, automaton::State(number)));
-				toEquvivalentStates2.insert(std::pair<automaton::State, automaton::State>(*iter2, *(iter->second.begin())));
+		for(const std::pair<const std::pair<automaton::State, std::set<std::pair<alphabet::Symbol, automaton::State> > >, std::set<automaton::State> >& transition : minimizedTransitionFunction1) {
+			for(const automaton::State& target : transition.second) {
+				toEquvivalentStates2.insert(std::make_pair(target, *(transition.second.begin())));
 			}
-			number++;
 		}
 
-		for(auto iter = refactor.begin(); iter != refactor.end(); iter++) {
-			automaton::State from = toEquvivalentStates2.find(iter->first)->second;
+		for(const std::pair<const automaton::State, std::map<alphabet::Symbol, automaton::State> >& transition : refactor) {
+			const automaton::State& from = toEquvivalentStates2.find(transition.first)->second;
 			std::set<std::pair<alphabet::Symbol, automaton::State> > transitionFunction;
 
-			for(auto iter2 = iter->second.begin(); iter2 != iter->second.end(); iter2++) {
-				transitionFunction.insert(std::pair<alphabet::Symbol, automaton::State>(iter2->first, toEquvivalentStates2.find(iter2->second)->second));
-			}
-
-			std::pair<automaton::State, std::set<std::pair<alphabet::Symbol, automaton::State> > > key(from, transitionFunction);
-
-			if(minimizedTransitionFunction2.find(key) == minimizedTransitionFunction2.end()) {
-				minimizedTransitionFunction2.insert(std::pair<std::pair<automaton::State, std::set<std::pair<alphabet::Symbol, automaton::State> > >, std::set<automaton::State> >(key, std::set<automaton::State>()));
+			for(const std::pair<const alphabet::Symbol, automaton::State> & transitionFromState : transition.second) {
+				transitionFunction.insert(std::make_pair(transitionFromState.first, toEquvivalentStates2.find(transitionFromState.second)->second));
 			}
 
-			minimizedTransitionFunction2[key].insert(iter->first);
+			minimizedTransitionFunction2[std::make_pair(from, transitionFunction)].insert(transition.first);
 		}
 
 		if(common::GlobalData::verbose) {
-			print_progress(dfa, minimizedTransitionFunction2, delta_iter);
+			print_progress(dfa, minimizedTransitionFunction2, delta_iter++);
 		}
-		delta_iter += 1;
 
 	} while(minimizedTransitionFunction1.size() != minimizedTransitionFunction2.size());
 
 	const automaton::State* initialState = NULL;
-	for(auto iter = minimizedTransitionFunction2.begin(); iter != minimizedTransitionFunction2.end(); iter++) {
-		if(iter->second.find(dfa.getInitialState()) != iter->second.end()) {
-			initialState = &(iter->first.first);
+	for(const std::pair<const std::pair<automaton::State, std::set<std::pair<alphabet::Symbol, automaton::State> > >, std::set<automaton::State> >& transition : minimizedTransitionFunction2) {
+		if(transition.second.count(dfa.getInitialState())) {
+			initialState = &(transition.first.first);
 			break;
 		}
 	}
@@ -137,16 +120,16 @@ automaton::DFA Minimize::minimize(const automaton::DFA& dfa) {
 
 	result.setInputAlphabet(dfa.getInputAlphabet());
 
-	for(auto iter = minimizedTransitionFunction2.begin(); iter != minimizedTransitionFunction2.end(); iter++) {
-		result.addState(iter->first.first);
-		if(dfa.getFinalStates().find(*(iter->second.begin())) != dfa.getFinalStates().end()) {
-			result.addFinalState(iter->first.first);
+	for(const std::pair<const std::pair<automaton::State, std::set<std::pair<alphabet::Symbol, automaton::State> > >, std::set<automaton::State> >& transition : minimizedTransitionFunction2) {
+		result.addState(transition.first.first);
+		if(dfa.getFinalStates().count(*(transition.second.begin()))) {
+			result.addFinalState(transition.first.first);
 		}
 	}
 
-	for(auto iter = minimizedTransitionFunction2.begin(); iter != minimizedTransitionFunction2.end(); iter++) {
-		for(auto iter2 = iter->first.second.begin(); iter2 != iter->first.second.end(); iter2++) {
-			result.addTransition(iter->first.first, iter2->first, iter2->second);
+	for(const std::pair<const std::pair<automaton::State, std::set<std::pair<alphabet::Symbol, automaton::State> > >, std::set<automaton::State> >& transition : minimizedTransitionFunction2) {
+		for(const std::pair<alphabet::Symbol, automaton::State>& transitionFromState : transition.first.second) {
+			result.addTransition(transition.first.first, transitionFromState.first, transitionFromState.second);
 		}
 	}
 
@@ -155,7 +138,7 @@ automaton::DFA Minimize::minimize(const automaton::DFA& dfa) {
 
 #define RESETSS(x) {(x).clear(); (x).str("");}
 
-void Minimize::print_progress(const automaton::DFA& dfa, const std::map<std::pair<automaton::State, std::set<std::pair<alphabet::Symbol, automaton::State> > >, std::set<automaton::State> > minimizedTransitionFunction, size_t iter) {
+void Minimize::print_progress(const automaton::DFA& dfa, const std::map<std::pair<automaton::State, std::set<std::pair<alphabet::Symbol, automaton::State> > >, std::set<automaton::State> >& minimizedTransitionFunction, size_t iter) {
 	std::clog << "delta " << iter << std::endl;
 
 	//std::map<std::pair<automaton::State, std::set<std::pair<alphabet::Symbol, automaton::State> > >, std::set<automaton::State> > minimizedTransitionFunction1; //mapped to the original state
@@ -240,8 +223,6 @@ void Minimize::print_progress(const automaton::DFA& dfa, const std::map<std::pai
 	std::clog << std::endl;
 }
 
-
-
 auto MinimizeNFA = Minimize::RegistratorWrapper<automaton::DFA, automaton::DFA>(Minimize::getInstance(), Minimize::minimize);
 
 } /* namespace simplify */
diff --git a/alib2algo/src/automaton/simplify/Minimize.h b/alib2algo/src/automaton/simplify/Minimize.h
index 455dcf61ca..245a20c4c8 100644
--- a/alib2algo/src/automaton/simplify/Minimize.h
+++ b/alib2algo/src/automaton/simplify/Minimize.h
@@ -31,7 +31,7 @@ public:
 	}
 
 private:
-	static void print_progress(const automaton::DFA& dfa, const std::map<std::pair<automaton::State, std::set<std::pair<alphabet::Symbol, automaton::State> > >, std::set<automaton::State> > minimizedTransitionFunction, size_t iter);
+	static void print_progress(const automaton::DFA& dfa, const std::map<std::pair<automaton::State, std::set<std::pair<alphabet::Symbol, automaton::State> > >, std::set<automaton::State> >& minimizedTransitionFunction, size_t iter);
 };
 
 } /* namespace simplify */
-- 
GitLab