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