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