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

shorten reachable and useful states computation code

parent b1c90ae3
No related branches found
No related tags found
1 merge request!87Merge jt
......@@ -161,21 +161,19 @@ ext::set<StateType> ReachableStates::reachableStates( const automaton::DFTA < Sy
ext::deque<ext::set<StateType>> Qi;
Qi.push_back( ext::set<StateType>( ) );
 
int i = 1;
int i = 0;
 
// 1bc
while( true ) {
Qi.push_back( Qi.at( i - 1 ) );
do {
i = i + 1;
Qi.push_back( Qi.at( i - 1) );
 
for( const auto & transition : fta.getTransitions ( ) )
if ( std::all_of ( transition.first.second.begin ( ), transition.first.second.end ( ), [ & ] ( const StateType & state ) { return Qi.at ( i - 1 ).count ( state ); } ) )
Qi.at( i ).insert ( transition.second );
 
if( Qi.at( i ) == Qi.at( i - 1 ) )
break;
i = i + 1;
}
} while ( Qi.at( i ) != Qi.at( i - 1 ) );
 
return Qi.at( i );
}
......@@ -186,21 +184,19 @@ ext::set<StateType> ReachableStates::reachableStates( const automaton::NFTA < Sy
ext::deque<ext::set<StateType>> Qi;
Qi.push_back( ext::set<StateType>( ) );
 
int i = 1;
int i = 0;
 
// 1bc
while( true ) {
Qi.push_back( Qi.at( i - 1 ) );
do {
i = i + 1;
Qi.push_back( Qi.at( i - 1) );
 
for( const auto & transition : fta.getTransitions ( ) )
if ( std::all_of ( transition.first.second.begin ( ), transition.first.second.end ( ), [ & ] ( const StateType & state ) { return Qi.at ( i - 1 ).count ( state ); } ) )
Qi.at( i ).insert ( transition.second );
 
if( Qi.at( i ) == Qi.at( i - 1 ) )
break;
i = i + 1;
}
} while ( Qi.at( i ) != Qi.at( i - 1 ) );
 
return Qi.at( i );
}
......
......@@ -122,20 +122,19 @@ ext::set<StateType> UsefulStates::usefulStates( const automaton::DFTA < SymbolTy
Qi.push_back( ext::set<StateType>( ) );
Qi.at( 0 ) = fta.getFinalStates( );
 
int i = 1;
int i = 0;
 
// 1bc
while( true ) {
do {
i = i + 1;
Qi.push_back( Qi.at( i - 1 ) ); // copy Qi-1 into Qi
for( const auto & p : Qi.at( i - 1 ) )
for( const auto & t : fta.getTransitionsToState ( p ) )
Qi.at( i ).insert( t.first.second.begin ( ), t.first.second.end ( ) );
 
if( Qi.at( i ) == Qi.at( i - 1 ) )
break;
} while ( Qi.at( i ) != Qi.at( i - 1 ) );
 
i = i + 1;
}
return Qi.at( i );
}
 
......@@ -146,20 +145,19 @@ ext::set<StateType> UsefulStates::usefulStates( const automaton::NFTA < SymbolTy
Qi.push_back( ext::set<StateType>( ) );
Qi.at( 0 ) = fta.getFinalStates( );
 
int i = 1;
int i = 0;
 
// 1bc
while( true ) {
do {
i = i + 1;
Qi.push_back( Qi.at( i - 1 ) ); // copy Qi-1 into Qi
for( const auto & p : Qi.at( i - 1 ) )
for( const auto & t : fta.getTransitionsToState ( p ) )
Qi.at( i ).insert( t.first.second.begin ( ), t.first.second.end ( ) );
 
if( Qi.at( i ) == Qi.at( i - 1 ) )
break;
} while ( Qi.at( i ) != Qi.at( i - 1 ) );
 
i = i + 1;
}
return Qi.at( i );
}
 
......
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