diff --git a/alib2algo/src/automaton/determinize/DeterminizeIDPDAPart.cxx b/alib2algo/src/automaton/determinize/DeterminizeIDPDAPart.cxx index fe71cc91bb231c9e7283f5d6a563f52cbdbd7d96..6f62792f55aead46dd88f33eb059e8cbe8b6baa8 100644 --- a/alib2algo/src/automaton/determinize/DeterminizeIDPDAPart.cxx +++ b/alib2algo/src/automaton/determinize/DeterminizeIDPDAPart.cxx @@ -17,56 +17,61 @@ namespace automaton { namespace determinize { -automaton::InputDrivenDPDA Determinize::determinize(const automaton::InputDrivenNPDA& nfa) { - // 1, 4 - automaton::State initialState(createDFAState({nfa.getInitialState()})); - automaton::InputDrivenDPDA res(initialState, nfa.getInitialSymbol()); - res.setInputAlphabet(nfa.getInputAlphabet()); - res.setStackAlphabet(nfa.getStackAlphabet()); - res.setPushdownStoreOperations(nfa.getPushdownStoreOperations()); - - // 2 - std::deque<automaton::State> todo; - todo.push_back(std::move(initialState)); +automaton::InputDrivenDPDA Determinize::determinize ( const automaton::InputDrivenNPDA & nfa ) { + // 1, 4 + automaton::State initialState ( createDFAState ( { nfa.getInitialState ( ) } ) ); + automaton::InputDrivenDPDA res ( initialState, nfa.getInitialSymbol ( ) ); + + res.setInputAlphabet ( nfa.getInputAlphabet ( ) ); + res.setStackAlphabet ( nfa.getStackAlphabet ( ) ); + res.setPushdownStoreOperations ( nfa.getPushdownStoreOperations ( ) ); + + // 2 + std::deque < automaton::State > todo; + todo.push_back ( std::move ( initialState ) ); do { - // 3a, c - automaton::State state = std::move(todo.front()); - todo.pop_front(); - - // 3b - for (const alphabet::Symbol& input : nfa.getInputAlphabet()) { - std::set<automaton::State> targetIDPDAStates; - for(automaton::State nfaState : std::make_moveable_set(recreateNFAStates(state))) { - auto iter = nfa.getTransitions().find(std::make_pair(std::move(nfaState), input)); - if(iter != nfa.getTransitions().end()) { - targetIDPDAStates.insert(iter->second.begin(), iter->second.end()); - } + // 3a, c + automaton::State state = std::move ( todo.front ( ) ); + todo.pop_front ( ); + + // 3b + for ( const alphabet::Symbol & input : nfa.getInputAlphabet ( ) ) { + std::set < automaton::State > targetIDPDAStates; + + for ( automaton::State nfaState : std::make_moveable_set ( recreateNFAStates ( state ) ) ) { + auto iter = nfa.getTransitions ( ).find ( std::make_pair ( std::move ( nfaState ), input ) ); + + if ( iter != nfa.getTransitions ( ).end ( ) ) + targetIDPDAStates.insert ( iter->second.begin ( ), iter->second.end ( ) ); } - automaton::State dfaState = createDFAState(std::move(targetIDPDAStates)); - // 4 - bool existed = !res.addState(dfaState); + automaton::State dfaState = createDFAState ( std::move ( targetIDPDAStates ) ); - if(!existed) todo.push_back(dfaState); + // 4 + bool existed = !res.addState ( dfaState ); - // 3b - res.addTransition(std::move(state), input, std::move(dfaState)); - } - } while(!todo.empty()); + if ( !existed ) todo.push_back ( dfaState ); - // 5 - for (const automaton::State & dfaState : res.getStates()) { - std::set<automaton::State> nfaStates = recreateNFAStates(dfaState); - if(std::any_of(nfaStates.begin(), nfaStates.end(), [&](const automaton::State& nfaState) { return nfa.getFinalStates().count(nfaState); })) { - res.addFinalState(dfaState); + // 3b + res.addTransition ( std::move ( state ), input, std::move ( dfaState ) ); } + } while ( !todo.empty ( ) ); + + // 5 + for ( const automaton::State & dfaState : res.getStates ( ) ) { + std::set < automaton::State > nfaStates = recreateNFAStates ( dfaState ); + + if ( std::any_of ( nfaStates.begin ( ), nfaStates.end ( ), [&] ( const automaton::State & nfaState ) { + return nfa.getFinalStates ( ).count ( nfaState ); + } ) ) + res.addFinalState ( dfaState ); } return res; } -auto DeterminizeInputDrivenNPDA = Determinize::RegistratorWrapper<automaton::InputDrivenDPDA, automaton::InputDrivenNPDA>(Determinize::getInstance(), Determinize::determinize); +auto DeterminizeInputDrivenNPDA = Determinize::RegistratorWrapper < automaton::InputDrivenDPDA, automaton::InputDrivenNPDA > ( Determinize::getInstance ( ), Determinize::determinize ); } /* namespace determinize */ diff --git a/alib2algo/src/automaton/determinize/DeterminizeNFAPart.cxx b/alib2algo/src/automaton/determinize/DeterminizeNFAPart.cxx index fb04dad3430451b8325393d2db4407383b452242..b44b8c1025170fc6163874ebf0062f5dc3423ba2 100644 --- a/alib2algo/src/automaton/determinize/DeterminizeNFAPart.cxx +++ b/alib2algo/src/automaton/determinize/DeterminizeNFAPart.cxx @@ -16,103 +16,113 @@ namespace automaton { namespace determinize { -automaton::DFA Determinize::determinize(const automaton::MultiInitialStateNFA& nfa) { - // 1, 4 - automaton::State initialState(createDFAState(nfa.getInitialStates())); - automaton::DFA res(initialState); - res.setInputAlphabet(nfa.getInputAlphabet()); +automaton::DFA Determinize::determinize ( const automaton::MultiInitialStateNFA & nfa ) { + // 1, 4 + automaton::State initialState ( createDFAState ( nfa.getInitialStates ( ) ) ); + automaton::DFA res ( initialState ); - // 2 - std::deque<automaton::State> todo; - todo.push_back(std::move(initialState)); + res.setInputAlphabet ( nfa.getInputAlphabet ( ) ); + + // 2 + std::deque < automaton::State > todo; + todo.push_back ( std::move ( initialState ) ); do { - // 3a, c - automaton::State state = std::move(todo.front()); - todo.pop_front(); - - // 3b - for (const alphabet::Symbol& input : nfa.getInputAlphabet()) { - std::set<automaton::State> targetNFAStates; - for(automaton::State nfaState : std::make_moveable_set(recreateNFAStates(state))) { - auto iter = nfa.getTransitions().find(std::make_pair(std::move(nfaState), input)); - if(iter != nfa.getTransitions().end()) { - targetNFAStates.insert(iter->second.begin(), iter->second.end()); - } + // 3a, c + automaton::State state = std::move ( todo.front ( ) ); + todo.pop_front ( ); + + // 3b + for ( const alphabet::Symbol & input : nfa.getInputAlphabet ( ) ) { + std::set < automaton::State > targetNFAStates; + + for ( automaton::State nfaState : std::make_moveable_set ( recreateNFAStates ( state ) ) ) { + auto iter = nfa.getTransitions ( ).find ( std::make_pair ( std::move ( nfaState ), input ) ); + + if ( iter != nfa.getTransitions ( ).end ( ) ) + targetNFAStates.insert ( iter->second.begin ( ), iter->second.end ( ) ); } - automaton::State dfaState = createDFAState(std::move(targetNFAStates)); - // 4 - bool existed = !res.addState(dfaState); + automaton::State dfaState = createDFAState ( std::move ( targetNFAStates ) ); - if(!existed) todo.push_back(std::move(dfaState)); + // 4 + bool existed = !res.addState ( dfaState ); - // 3b - res.addTransition(std::move(state), input, std::move(dfaState)); - } - } while(!todo.empty()); + if ( !existed ) todo.push_back ( std::move ( dfaState ) ); - // 5 - for (const automaton::State& dfaState : res.getStates()) { - std::set<automaton::State> nfaStates = recreateNFAStates(dfaState); - if(std::any_of(nfaStates.begin(), nfaStates.end(), [&](const automaton::State& nfaState) { return nfa.getFinalStates().count(nfaState); })) { - res.addFinalState(dfaState); + // 3b + res.addTransition ( std::move ( state ), input, std::move ( dfaState ) ); } + } while ( !todo.empty ( ) ); + + // 5 + for ( const automaton::State & dfaState : res.getStates ( ) ) { + std::set < automaton::State > nfaStates = recreateNFAStates ( dfaState ); + + if ( std::any_of ( nfaStates.begin ( ), nfaStates.end ( ), [&] ( const automaton::State & nfaState ) { + return nfa.getFinalStates ( ).count ( nfaState ); + } ) ) + res.addFinalState ( dfaState ); } return res; } -auto DeterminizeMultiInitialStateNFA = Determinize::RegistratorWrapper<automaton::DFA, automaton::MultiInitialStateNFA>(Determinize::getInstance(), Determinize::determinize); +auto DeterminizeMultiInitialStateNFA = Determinize::RegistratorWrapper < automaton::DFA, automaton::MultiInitialStateNFA > ( Determinize::getInstance ( ), Determinize::determinize ); -automaton::DFA Determinize::determinize(const automaton::NFA& nfa) { - // 1, 4 - automaton::State initialState(createDFAState({nfa.getInitialState()})); - automaton::DFA res(initialState); - res.setInputAlphabet(nfa.getInputAlphabet()); +automaton::DFA Determinize::determinize ( const automaton::NFA & nfa ) { + // 1, 4 + automaton::State initialState ( createDFAState ( { nfa.getInitialState ( ) } ) ); + automaton::DFA res ( initialState ); - // 2 - std::deque<automaton::State> todo; - todo.push_back(std::move(initialState)); + res.setInputAlphabet ( nfa.getInputAlphabet ( ) ); + + // 2 + std::deque < automaton::State > todo; + todo.push_back ( std::move ( initialState ) ); do { - // 3a, c - automaton::State state = std::move(todo.front()); - todo.pop_front(); - - // 3b - for (const alphabet::Symbol& input : nfa.getInputAlphabet()) { - std::set<automaton::State> targetNFAStates; - for(automaton::State nfaState : std::make_moveable_set(recreateNFAStates(state))) { - auto iter = nfa.getTransitions().find(std::make_pair(std::move(nfaState), input)); - if(iter != nfa.getTransitions().end()) { - targetNFAStates.insert(iter->second.begin(), iter->second.end()); - } + // 3a, c + automaton::State state = std::move ( todo.front ( ) ); + todo.pop_front ( ); + + // 3b + for ( const alphabet::Symbol & input : nfa.getInputAlphabet ( ) ) { + std::set < automaton::State > targetNFAStates; + + for ( automaton::State nfaState : std::make_moveable_set ( recreateNFAStates ( state ) ) ) { + auto iter = nfa.getTransitions ( ).find ( std::make_pair ( std::move ( nfaState ), input ) ); + + if ( iter != nfa.getTransitions ( ).end ( ) ) + targetNFAStates.insert ( iter->second.begin ( ), iter->second.end ( ) ); } - automaton::State dfaState = createDFAState(std::move(targetNFAStates)); - // 4 - bool existed = !res.addState(dfaState); + automaton::State dfaState = createDFAState ( std::move ( targetNFAStates ) ); - if(!existed) todo.push_back(dfaState); + // 4 + bool existed = !res.addState ( dfaState ); - // 3b - res.addTransition(std::move(state), input, std::move(dfaState)); - } - } while(!todo.empty()); + if ( !existed ) todo.push_back ( dfaState ); - // 5 - for (const automaton::State& dfaState : res.getStates()) { - std::set<automaton::State> nfaStates = recreateNFAStates(dfaState); - if(std::any_of(nfaStates.begin(), nfaStates.end(), [&](const automaton::State& nfaState) { return nfa.getFinalStates().count(nfaState); })) { - res.addFinalState(dfaState); + // 3b + res.addTransition ( std::move ( state ), input, std::move ( dfaState ) ); } + } while ( !todo.empty ( ) ); + + // 5 + for ( const automaton::State & dfaState : res.getStates ( ) ) { + std::set < automaton::State > nfaStates = recreateNFAStates ( dfaState ); + + if ( std::any_of ( nfaStates.begin ( ), nfaStates.end ( ), [&] ( const automaton::State & nfaState ) { + return nfa.getFinalStates ( ).count ( nfaState ); + } ) ) + res.addFinalState ( dfaState ); } return res; } -auto DeterminizeNFA = Determinize::RegistratorWrapper<automaton::DFA, automaton::NFA>(Determinize::getInstance(), Determinize::determinize); +auto DeterminizeNFA = Determinize::RegistratorWrapper < automaton::DFA, automaton::NFA > ( Determinize::getInstance ( ), Determinize::determinize ); } /* namespace determinize */