Skip to content
Snippets Groups Projects
Commit ac246bfb authored by Jan Trávníček's avatar Jan Trávníček
Browse files

replace empty_intersection with excludes algorithm

parent 069b2df9
No related branches found
No related tags found
No related merge requests found
......@@ -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 );
}
 
......
......@@ -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 );
}
 
......
......@@ -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);
}
}
......
......@@ -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);
}
}
......
......@@ -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;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment