diff --git a/alib2algo/src/automaton/determinize/Determinize.cpp b/alib2algo/src/automaton/determinize/Determinize.cpp index 1d6adcc57a992040af4abf9e79b3acff8c77a9ac..22cf405f669cce8f018892cf83fa43c9c3a0c9f1 100644 --- a/alib2algo/src/automaton/determinize/Determinize.cpp +++ b/alib2algo/src/automaton/determinize/Determinize.cpp @@ -26,53 +26,41 @@ namespace automaton { namespace determinize { -automaton::Automaton Determinize::determinize(const automaton::Automaton& automaton) { - automaton::Automaton res = dispatch(automaton.getData()); - res.normalize ( ); - return res; -} - DFA<> Determinize::determinize(const automaton::DFA<>& automaton) { return automaton; } -auto DeterminizeDFA = registration::OverloadRegister < Determinize, automaton::DFA<>, automaton::DFA<> >(Determinize::determinize); -auto DeterminizeDFA2 = registration::AbstractRegister < Determinize, automaton::DFA < >, const automaton::DFA < > & > ( Determinize::determinize ); +auto DeterminizeDFA = registration::AbstractRegister < Determinize, automaton::DFA < >, const automaton::DFA < > & > ( Determinize::determinize ); DPDA < > Determinize::determinize(const automaton::DPDA < > & automaton) { return automaton; } -auto DeterminizeDPDA = registration::OverloadRegister < Determinize, automaton::DPDA < >, automaton::DPDA < > >(Determinize::determinize); -auto DeterminizeDPDA2 = registration::AbstractRegister < Determinize, automaton::DPDA < >, const automaton::DPDA < > & > ( Determinize::determinize ); +auto DeterminizeDPDA = registration::AbstractRegister < Determinize, automaton::DPDA < >, const automaton::DPDA < > & > ( Determinize::determinize ); SinglePopDPDA < > Determinize::determinize(const automaton::SinglePopDPDA < > & automaton) { return automaton; } -auto DeterminizeSinglePopDPDA = registration::OverloadRegister < Determinize, automaton::SinglePopDPDA < >, automaton::SinglePopDPDA < > >(Determinize::determinize); -auto DeterminizeSinglePopDPDA2 = registration::AbstractRegister < Determinize, automaton::SinglePopDPDA < >, const automaton::SinglePopDPDA < > & > ( Determinize::determinize ); +auto DeterminizeSinglePopDPDA = registration::AbstractRegister < Determinize, automaton::SinglePopDPDA < >, const automaton::SinglePopDPDA < > & > ( Determinize::determinize ); InputDrivenDPDA < > Determinize::determinize(const automaton::InputDrivenDPDA < > & automaton) { return automaton; } -auto DeterminizeInputDrivenDPDA = registration::OverloadRegister < Determinize, automaton::InputDrivenDPDA < >, automaton::InputDrivenDPDA < > >(Determinize::determinize); -auto DeterminizeInputDrivenDPDA2 = registration::AbstractRegister < Determinize, automaton::InputDrivenDPDA < >, const automaton::InputDrivenDPDA < > & > ( Determinize::determinize ); +auto DeterminizeInputDrivenDPDA = registration::AbstractRegister < Determinize, automaton::InputDrivenDPDA < >, const automaton::InputDrivenDPDA < > & > ( Determinize::determinize ); VisiblyPushdownDPDA < > Determinize::determinize(const automaton::VisiblyPushdownDPDA < > & automaton) { return automaton; } -auto DeterminizeVisiblyPushdownDPDA = registration::OverloadRegister < Determinize, automaton::VisiblyPushdownDPDA < >, automaton::VisiblyPushdownDPDA < > >(Determinize::determinize); -auto DeterminizeVisiblyPushdownDPDA2 = registration::AbstractRegister < Determinize, automaton::VisiblyPushdownDPDA < >, const automaton::VisiblyPushdownDPDA < > & > ( Determinize::determinize ); +auto DeterminizeVisiblyPushdownDPDA = registration::AbstractRegister < Determinize, automaton::VisiblyPushdownDPDA < >, const automaton::VisiblyPushdownDPDA < > & > ( Determinize::determinize ); RealTimeHeightDeterministicDPDA < > Determinize::determinize(const automaton::RealTimeHeightDeterministicDPDA < > & automaton) { return automaton; } -auto DeterminizeRealTimeHeightDeterministicDPDA = registration::OverloadRegister < Determinize, automaton::RealTimeHeightDeterministicDPDA < >, automaton::RealTimeHeightDeterministicDPDA < > >(Determinize::determinize); -auto DeterminizeRealTimeHeightDeterministicDPDA2 = registration::AbstractRegister < Determinize, automaton::RealTimeHeightDeterministicDPDA < >, const automaton::RealTimeHeightDeterministicDPDA < > & > ( Determinize::determinize ); +auto DeterminizeRealTimeHeightDeterministicDPDA = registration::AbstractRegister < Determinize, automaton::RealTimeHeightDeterministicDPDA < >, const automaton::RealTimeHeightDeterministicDPDA < > & > ( Determinize::determinize ); DPDA < > Determinize::determinize(const automaton::NPDA < > & automaton) { automaton::RealTimeHeightDeterministicNPDA < > rhpda = automaton::PDAToRHPDA::convert(automaton); @@ -80,29 +68,24 @@ DPDA < > Determinize::determinize(const automaton::NPDA < > & automaton) { return automaton::RHPDAToPDA::convert(dpda); } -auto DeterminizeNPDA = registration::OverloadRegister < Determinize, automaton::DPDA < >, automaton::NPDA < > >(Determinize::determinize); -auto DeterminizeNPDA2 = registration::AbstractRegister < Determinize, automaton::DPDA < >, const automaton::NPDA < > & > ( Determinize::determinize ); +auto DeterminizeNPDA = registration::AbstractRegister < Determinize, automaton::DPDA < >, const automaton::NPDA < > & > ( Determinize::determinize ); OneTapeDTM<> Determinize::determinize(const automaton::OneTapeDTM<>& automaton) { return automaton; } -auto DeterminizeOneTapeDTM = registration::OverloadRegister < Determinize, automaton::OneTapeDTM<>, automaton::OneTapeDTM < > >(Determinize::determinize); -auto DeterminizeOneTapeDTM2 = registration::AbstractRegister < Determinize, automaton::OneTapeDTM < >, const automaton::OneTapeDTM < > & > ( Determinize::determinize ); +auto DeterminizeOneTapeDTM = registration::AbstractRegister < Determinize, automaton::OneTapeDTM < >, const automaton::OneTapeDTM < > & > ( Determinize::determinize ); DFTA < > Determinize::determinize(const automaton::DFTA < > & automaton) { return automaton; } -auto DeterminizeDFTA = registration::OverloadRegister < Determinize, automaton::DFTA < >, automaton::DFTA < > >(Determinize::determinize); -auto DeterminizeDFTA2 = registration::AbstractRegister < Determinize, automaton::DFTA < >, const automaton::DFTA < > & > ( Determinize::determinize ); +auto DeterminizeDFTA = registration::AbstractRegister < Determinize, automaton::DFTA < >, const automaton::DFTA < > & > ( Determinize::determinize ); -auto DeterminizeMultiInitialStateNFA = registration::OverloadRegister < Determinize, automaton::DFA < DefaultSymbolType, ext::set < DefaultStateType > >, automaton::MultiInitialStateNFA < > > ( Determinize::determinize ); -auto DeterminizeMultiInitialStateNFA2 = registration::AbstractRegister < Determinize, automaton::DFA < DefaultSymbolType, ext::set < DefaultStateType > >, const automaton::MultiInitialStateNFA < > & > ( Determinize::determinize ); -auto DeterminizeNFA = registration::OverloadRegister < Determinize, automaton::DFA < DefaultSymbolType, ext::set < DefaultStateType > >, automaton::NFA < > > ( Determinize::determinize ); -auto DeterminizeNFA2 = registration::AbstractRegister < Determinize, automaton::DFA < DefaultSymbolType, ext::set < DefaultStateType > >, const automaton::NFA < > & > ( Determinize::determinize ); +auto DeterminizeMultiInitialStateNFA = registration::AbstractRegister < Determinize, automaton::DFA < DefaultSymbolType, ext::set < DefaultStateType > >, const automaton::MultiInitialStateNFA < > & > ( Determinize::determinize ); +auto DeterminizeNFA = registration::AbstractRegister < Determinize, automaton::DFA < DefaultSymbolType, ext::set < DefaultStateType > >, const automaton::NFA < > & > ( Determinize::determinize ); } /* namespace determinize */ diff --git a/alib2algo/src/automaton/determinize/Determinize.h b/alib2algo/src/automaton/determinize/Determinize.h index 8e1b3517d46baae2b4978a8888c06d626e1f93e1..b3e40db0458735a87eccedc14d89befc7529a80e 100644 --- a/alib2algo/src/automaton/determinize/Determinize.h +++ b/alib2algo/src/automaton/determinize/Determinize.h @@ -8,7 +8,6 @@ #ifndef DETERMINIZE_H_ #define DETERMINIZE_H_ -#include <core/multipleDispatch.hpp> #include <set> #include <automaton/Automaton.h> @@ -21,18 +20,16 @@ namespace determinize { /** * Class for running determinization algorithm on fsm. */ -class Determinize : public alib::SingleDispatch<Determinize, automaton::Automaton, const automaton::AutomatonBase &> { +class Determinize { public: + static automaton::DFA<> determinize(const automaton::DFA<>& nfa); + /** * @param nfsm nondeterministic final-state machine given for determinization * @return DFA * Runs determinization algorithm on nondeterministic fsm given in constructor. */ - static automaton::Automaton determinize(const automaton::Automaton& nfa); - - static automaton::DFA<> determinize(const automaton::DFA<>& nfa); - template < class SymbolType, class StateType > static automaton::DFA < SymbolType, ext::set < StateType > > determinize(const automaton::NFA < SymbolType, StateType > & nfa); diff --git a/alib2algo/src/automaton/determinize/DeterminizeIDPDAPart.cxx b/alib2algo/src/automaton/determinize/DeterminizeIDPDAPart.cxx index 22b62aadc0af313e49d57988ce7f1697537722ca..2f6ca8e5e5850d1ea7fcdb58f0f7c5eea352ab2f 100644 --- a/alib2algo/src/automaton/determinize/DeterminizeIDPDAPart.cxx +++ b/alib2algo/src/automaton/determinize/DeterminizeIDPDAPart.cxx @@ -70,8 +70,7 @@ automaton::InputDrivenDPDA < > Determinize::determinize ( const automaton::Input return res; } -auto DeterminizeInputDrivenNPDA = registration::OverloadRegister < Determinize, automaton::InputDrivenDPDA < >, automaton::InputDrivenNPDA < > > ( Determinize::determinize ); -auto DeterminizeInputDrivenNPDA2 = registration::AbstractRegister < Determinize, automaton::InputDrivenDPDA < >, const automaton::InputDrivenNPDA < > & > ( Determinize::determinize ); +auto DeterminizeInputDrivenNPDA = registration::AbstractRegister < Determinize, automaton::InputDrivenDPDA < >, const automaton::InputDrivenNPDA < > & > ( Determinize::determinize ); } /* namespace determinize */ diff --git a/alib2algo/src/automaton/determinize/DeterminizeNFTAPart.cxx b/alib2algo/src/automaton/determinize/DeterminizeNFTAPart.cxx index 3283ce647b7dac21e556cc2f44a8c6c3cfad7869..481a04502e75ea647daa7ed6f8d5dd7461a47d59 100644 --- a/alib2algo/src/automaton/determinize/DeterminizeNFTAPart.cxx +++ b/alib2algo/src/automaton/determinize/DeterminizeNFTAPart.cxx @@ -94,8 +94,7 @@ DFTA < > Determinize::determinize(const NFTA < > & nfta) { return res; } -auto DeterminizeNFTA = registration::OverloadRegister < Determinize, automaton::DFTA < >, automaton::NFTA < > > ( Determinize::determinize ); -auto DeterminizeNFTA2 = registration::AbstractRegister < Determinize, automaton::DFTA < >, const automaton::NFTA < > & > ( Determinize::determinize ); +auto DeterminizeNFTA = registration::AbstractRegister < Determinize, automaton::DFTA < >, const automaton::NFTA < > & > ( Determinize::determinize ); } /* namespace determinize */ diff --git a/alib2algo/src/automaton/determinize/DeterminizeRHDPDAPart.cxx b/alib2algo/src/automaton/determinize/DeterminizeRHDPDAPart.cxx index 61d6ed13d0f3bd7e3fb1885f36361e8d1f1d4dba..5a3de3026431567f6cb9f29471d36b1587aa173b 100644 --- a/alib2algo/src/automaton/determinize/DeterminizeRHDPDAPart.cxx +++ b/alib2algo/src/automaton/determinize/DeterminizeRHDPDAPart.cxx @@ -277,8 +277,7 @@ automaton::RealTimeHeightDeterministicDPDA < > Determinize::determinize(const au return d; } -auto DeterminizeRealTimeHeightDeterministicNPDA = registration::OverloadRegister < Determinize, automaton::RealTimeHeightDeterministicDPDA < >, automaton::RealTimeHeightDeterministicNPDA < > > ( Determinize::determinize ); -auto DeterminizeRealTimeHeightDeterministicNPDA2 = registration::AbstractRegister < Determinize, automaton::RealTimeHeightDeterministicDPDA < >, const automaton::RealTimeHeightDeterministicNPDA < > & > ( Determinize::determinize ); +auto DeterminizeRealTimeHeightDeterministicNPDA = registration::AbstractRegister < Determinize, automaton::RealTimeHeightDeterministicDPDA < >, const automaton::RealTimeHeightDeterministicNPDA < > & > ( Determinize::determinize ); } /* namespace determinize */ diff --git a/alib2algo/src/automaton/determinize/DeterminizeVPAPart.cxx b/alib2algo/src/automaton/determinize/DeterminizeVPAPart.cxx index c7f2579ec8a670fabae838551040c1053657c1f3..700995357e264a1d2c5e15127f12ad7d431499a5 100644 --- a/alib2algo/src/automaton/determinize/DeterminizeVPAPart.cxx +++ b/alib2algo/src/automaton/determinize/DeterminizeVPAPart.cxx @@ -205,8 +205,7 @@ automaton::VisiblyPushdownDPDA < > Determinize::determinize(const automaton::Vis return d; } -auto DeterminizeVisiblyPushdownNPDA = registration::OverloadRegister < Determinize, automaton::VisiblyPushdownDPDA < >, automaton::VisiblyPushdownNPDA < > > ( Determinize::determinize ); -auto DeterminizeVisiblyPushdownNPDA2 = registration::AbstractRegister < Determinize, automaton::VisiblyPushdownDPDA < >, const automaton::VisiblyPushdownNPDA < > & > ( Determinize::determinize ); +auto DeterminizeVisiblyPushdownNPDA = registration::AbstractRegister < Determinize, automaton::VisiblyPushdownDPDA < >, const automaton::VisiblyPushdownNPDA < > & > ( Determinize::determinize ); } /* namespace determinize */ diff --git a/alib2algo/test-src/regexp/toAutomaton/re2faTest.cpp b/alib2algo/test-src/regexp/toAutomaton/re2faTest.cpp index b1b2190744342064a0f83d49425f7a99701bf5fc..0a26602fa84350bd9f533c5863d807daffa0878c 100644 --- a/alib2algo/test-src/regexp/toAutomaton/re2faTest.cpp +++ b/alib2algo/test-src/regexp/toAutomaton/re2faTest.cpp @@ -34,14 +34,14 @@ void re2faTest::testThompson() { automaton::EpsilonNFA < > enfa2 = regexp::convert::ToAutomatonThompson::convert(regexp2); - automaton::Automaton nfa1 = automaton::simplify::EpsilonRemoverOutgoing::remove(automaton::Automaton(enfa1)); - automaton::Automaton nfa2 = automaton::simplify::EpsilonRemoverOutgoing::remove(automaton::Automaton(enfa2)); + automaton::MultiInitialStateNFA < > nfa1 = automaton::simplify::EpsilonRemoverOutgoing::remove(enfa1); + automaton::MultiInitialStateNFA < > nfa2 = automaton::simplify::EpsilonRemoverOutgoing::remove(enfa2); - automaton::Automaton dfa1 = automaton::determinize::Determinize::determinize(nfa1); - automaton::Automaton dfa2 = automaton::determinize::Determinize::determinize(nfa2); + automaton::DFA < DefaultSymbolType, ext::set < DefaultStateType > > dfa1 = automaton::determinize::Determinize::determinize(nfa1); + automaton::DFA < DefaultSymbolType, ext::set < DefaultStateType > > dfa2 = automaton::determinize::Determinize::determinize(nfa2); - automaton::Automaton mdfa1 = automaton::simplify::Normalize::normalize(automaton::simplify::Minimize::minimize(dfa1)); - automaton::Automaton mdfa2 = automaton::simplify::Normalize::normalize(automaton::simplify::Minimize::minimize(dfa2)); + automaton::DFA< DefaultSymbolType, unsigned > mdfa1 = automaton::simplify::Normalize::normalize(automaton::simplify::Minimize::minimize(dfa1)); + automaton::DFA< DefaultSymbolType, unsigned > mdfa2 = automaton::simplify::Normalize::normalize(automaton::simplify::Minimize::minimize(dfa2)); CPPUNIT_ASSERT( mdfa1 == mdfa2); }