diff --git a/alib2algo/src/automaton/determinize/DeterminizeIDPDAPart.cxx b/alib2algo/src/automaton/determinize/DeterminizeIDPDAPart.cxx index e671026d11f2a989f79275f12cfe4a25f728541c..6bd860bf017e821ed701a2b0d6b128a4a07773da 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 76809e0ed5eea059a02902f114b45a950711f25f..3cd91e9658ba327056edd109a1e503d0582d5e3b 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 08d9208f674156f04325d60a1d6c1635ca28abc6..40bbcc04ef02de1c44ca8e6e3d4a6b2e359fd99a 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 2be0234c93fbdde07648ea6417ce94355a583c63..8bb8b005915e1f2b21be53ad9330f22b877ececc 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 751eaf4694d421e566f1717f4b1de3d64f9ec3fe..06c908ac663cb91c07b8f4c80019c597ea40e795 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;