From ac246bfb69a179fdee83bf947b80d20445993cb1 Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Thu, 7 Apr 2016 19:11:37 +0200 Subject: [PATCH] replace empty_intersection with excludes algorithm --- .../determinize/DeterminizeIDPDAPart.cxx | 5 ++--- .../automaton/determinize/DeterminizeNFAPart.cxx | 10 ++++------ .../determinize/DeterminizeRHDPDAPart.cxx | 2 +- .../automaton/determinize/DeterminizeVPAPart.cxx | 2 +- alib2std/src/extensions/set.hpp | 15 --------------- 5 files changed, 8 insertions(+), 26 deletions(-) diff --git a/alib2algo/src/automaton/determinize/DeterminizeIDPDAPart.cxx b/alib2algo/src/automaton/determinize/DeterminizeIDPDAPart.cxx index e671026d11..6bd860bf01 100644 --- a/alib2algo/src/automaton/determinize/DeterminizeIDPDAPart.cxx +++ b/alib2algo/src/automaton/determinize/DeterminizeIDPDAPart.cxx @@ -59,12 +59,11 @@ automaton::InputDrivenDPDA Determinize::determinize ( const automaton::InputDriv } while ( !todo.empty ( ) ); // 5 + const std::set<automaton::State>& finalLabels = nfa.getFinalStates(); for ( const automaton::State & dfaState : res.getStates ( ) ) { auto nfaStates = make_dsubset_iterator ( dfaState ); - if ( std::any_of ( nfaStates.begin ( ), nfaStates.end ( ), [&] ( const automaton::State & nfaState ) { - return nfa.getFinalStates ( ).count ( nfaState ); - } ) ) + if(!std::excludes(finalLabels.begin(), finalLabels.end(), nfaStates.begin(), nfaStates.end())) res.addFinalState ( dfaState ); } diff --git a/alib2algo/src/automaton/determinize/DeterminizeNFAPart.cxx b/alib2algo/src/automaton/determinize/DeterminizeNFAPart.cxx index 76809e0ed5..3cd91e9658 100644 --- a/alib2algo/src/automaton/determinize/DeterminizeNFAPart.cxx +++ b/alib2algo/src/automaton/determinize/DeterminizeNFAPart.cxx @@ -56,12 +56,11 @@ automaton::DFA Determinize::determinize ( const automaton::MultiInitialStateNFA } while ( !todo.empty ( ) ); // 5 + const std::set<automaton::State>& finalLabels = nfa.getFinalStates(); for ( const automaton::State & dfaState : res.getStates ( ) ) { auto nfaStates = make_dsubset_iterator ( dfaState ); - if ( std::any_of ( nfaStates.begin ( ), nfaStates.end ( ), [&] ( const automaton::State & nfaState ) { - return nfa.getFinalStates ( ).count ( nfaState ); - } ) ) + if(!std::excludes(finalLabels.begin(), finalLabels.end(), nfaStates.begin(), nfaStates.end())) res.addFinalState ( dfaState ); } @@ -110,12 +109,11 @@ automaton::DFA Determinize::determinize ( const automaton::NFA & nfa ) { } while ( !todo.empty ( ) ); // 5 + const std::set<automaton::State>& finalLabels = nfa.getFinalStates(); for ( const automaton::State & dfaState : res.getStates ( ) ) { auto nfaStates = make_dsubset_iterator ( dfaState ); - if ( std::any_of ( nfaStates.begin ( ), nfaStates.end ( ), [&] ( const automaton::State & nfaState ) { - return nfa.getFinalStates ( ).count ( nfaState ); - } ) ) + if(!std::excludes(finalLabels.begin(), finalLabels.end(), nfaStates.begin(), nfaStates.end())) res.addFinalState ( dfaState ); } diff --git a/alib2algo/src/automaton/determinize/DeterminizeRHDPDAPart.cxx b/alib2algo/src/automaton/determinize/DeterminizeRHDPDAPart.cxx index 08d9208f67..40bbcc04ef 100644 --- a/alib2algo/src/automaton/determinize/DeterminizeRHDPDAPart.cxx +++ b/alib2algo/src/automaton/determinize/DeterminizeRHDPDAPart.cxx @@ -263,7 +263,7 @@ automaton::RealTimeHeightDeterministicDPDA Determinize::determinize(const automa for(const automaton::State& state : d.getStates()) { const std::set<label::Label> labels = retrieveDSubSet(unpackFromStateLabel(state.getName())); - if(!std::empty_intersection(finalLabels, labels)) { + if(!std::excludes(finalLabels.begin(), finalLabels.end(), labels.begin(), labels.end())) { d.addFinalState(state); } } diff --git a/alib2algo/src/automaton/determinize/DeterminizeVPAPart.cxx b/alib2algo/src/automaton/determinize/DeterminizeVPAPart.cxx index 2be0234c93..8bb8b00591 100644 --- a/alib2algo/src/automaton/determinize/DeterminizeVPAPart.cxx +++ b/alib2algo/src/automaton/determinize/DeterminizeVPAPart.cxx @@ -201,7 +201,7 @@ automaton::VisiblyPushdownDPDA Determinize::determinize(const automaton::Visibly for(const automaton::State& state : d.getStates()) { const std::set<label::Label> labels = retrieveDSubSet(unpackFromStateLabel(state.getName())); - if(!std::empty_intersection(finalLabels, labels)) { + if(!std::excludes(finalLabels.begin(), finalLabels.end(), labels.begin(), labels.end())) { d.addFinalState(state); } } diff --git a/alib2std/src/extensions/set.hpp b/alib2std/src/extensions/set.hpp index 751eaf4694..06c908ac66 100644 --- a/alib2std/src/extensions/set.hpp +++ b/alib2std/src/extensions/set.hpp @@ -40,21 +40,6 @@ struct compare<set<T>> { } }; -template<class T> -bool empty_intersection(const set<T>& x, const set<T>& y) { - auto i = x.begin(); - auto j = y.begin(); - while (i != x.end() && j != y.end()) { - if (*i == *j) - return false; - else if (*i < *j) - ++i; - else - ++j; - } - return true; -} - template <class Iterator> class set_move_iterator { Iterator current; -- GitLab