From 2125665a296c08ce2796734d2191598481db45f9 Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Sun, 20 Nov 2016 20:12:17 +0100 Subject: [PATCH] template ToRegExp algo wrapper --- alib2algo/src/automaton/convert/ToRegExp.cpp | 30 ------------ alib2algo/src/automaton/convert/ToRegExp.h | 50 +++++++++++++++++--- 2 files changed, 44 insertions(+), 36 deletions(-) diff --git a/alib2algo/src/automaton/convert/ToRegExp.cpp b/alib2algo/src/automaton/convert/ToRegExp.cpp index 81515b68fc..cd9f595146 100644 --- a/alib2algo/src/automaton/convert/ToRegExp.cpp +++ b/alib2algo/src/automaton/convert/ToRegExp.cpp @@ -6,7 +6,6 @@ */ #include "ToRegExp.h" -#include "ToRegExpStateElimination.h" namespace automaton { @@ -16,40 +15,11 @@ regexp::RegExp ToRegExp::convert(const automaton::Automaton& automaton) { return dispatch(automaton.getData()); } -regexp::RegExp ToRegExp::convert(const automaton::EpsilonNFA < > & automaton) { - return regexp::RegExp(ToRegExpStateElimination::convert(automaton)); -} - auto ToRegExpEpsilonNFA = ToRegExp::RegistratorWrapper<regexp::RegExp, automaton::EpsilonNFA < > >(ToRegExp::convert); - -regexp::RegExp ToRegExp::convert(const automaton::MultiInitialStateNFA < > & automaton) { - return regexp::RegExp(ToRegExpStateElimination::convert(automaton)); -} - auto ToRegExpMultiInitialStateNFA = ToRegExp::RegistratorWrapper<regexp::RegExp, automaton::MultiInitialStateNFA < > >(ToRegExp::convert); - -regexp::RegExp ToRegExp::convert(const automaton::NFA < > & automaton) { - return regexp::RegExp(ToRegExpStateElimination::convert(automaton)); -} - auto ToRegExpNFA = ToRegExp::RegistratorWrapper<regexp::RegExp, automaton::NFA < > >(ToRegExp::convert); - -regexp::RegExp ToRegExp::convert(const automaton::DFA<>& automaton) { - return regexp::RegExp(ToRegExpStateElimination::convert(automaton)); -} - auto ToRegExpDFA = ToRegExp::RegistratorWrapper<regexp::RegExp, automaton::DFA<>>(ToRegExp::convert); - -regexp::RegExp ToRegExp::convert(const automaton::ExtendedNFA < > & automaton) { - return regexp::RegExp(ToRegExpStateElimination::convert(automaton)); -} - auto ToRegExpExtendedNFA = ToRegExp::RegistratorWrapper<regexp::RegExp, automaton::ExtendedNFA < > >(ToRegExp::convert); - -regexp::RegExp ToRegExp::convert(const automaton::CompactNFA < > & automaton) { - return regexp::RegExp(ToRegExpStateElimination::convert(automaton)); -} - auto ToRegExpCompactNFA = ToRegExp::RegistratorWrapper<regexp::RegExp, automaton::CompactNFA < > >(ToRegExp::convert); } /* namespace convert */ diff --git a/alib2algo/src/automaton/convert/ToRegExp.h b/alib2algo/src/automaton/convert/ToRegExp.h index e433bc8029..b0b0e85dc8 100644 --- a/alib2algo/src/automaton/convert/ToRegExp.h +++ b/alib2algo/src/automaton/convert/ToRegExp.h @@ -19,6 +19,8 @@ #include <automaton/Automaton.h> #include <regexp/RegExp.h> +#include "ToRegExpStateElimination.h" + namespace automaton { namespace convert { @@ -31,14 +33,50 @@ public: */ static regexp::RegExp convert(const automaton::Automaton& automaton); - static regexp::RegExp convert(const automaton::EpsilonNFA < > & automaton); - static regexp::RegExp convert(const automaton::MultiInitialStateNFA < > & automaton); - static regexp::RegExp convert(const automaton::NFA<>& automaton); - static regexp::RegExp convert(const automaton::DFA<>& automaton); - static regexp::RegExp convert(const automaton::ExtendedNFA < > & automaton); - static regexp::RegExp convert(const automaton::CompactNFA < > & automaton); + template < class SymbolType, class EpsilonType, class StateType > + static regexp::RegExp convert(const automaton::EpsilonNFA < SymbolType, EpsilonType, StateType > & automaton); + template < class SymbolType, class StateType > + static regexp::RegExp convert(const automaton::MultiInitialStateNFA < SymbolType, StateType > & automaton); + template < class SymbolType, class StateType > + static regexp::RegExp convert(const automaton::NFA < SymbolType, StateType > & automaton); + template < class SymbolType, class StateType > + static regexp::RegExp convert(const automaton::DFA < SymbolType, StateType > & automaton); + template < class SymbolType, class StateType > + static regexp::RegExp convert(const automaton::ExtendedNFA < SymbolType, StateType > & automaton); + template < class SymbolType, class StateType > + static regexp::RegExp convert(const automaton::CompactNFA < SymbolType, StateType > & automaton); }; +template < class SymbolType, class EpsilonType, class StateType > +regexp::RegExp ToRegExp::convert(const automaton::EpsilonNFA < SymbolType, EpsilonType, StateType > & automaton) { + return regexp::RegExp(ToRegExpStateElimination::convert(automaton)); +} + +template < class SymbolType, class StateType > +regexp::RegExp ToRegExp::convert(const automaton::MultiInitialStateNFA < SymbolType, StateType > & automaton) { + return regexp::RegExp(ToRegExpStateElimination::convert(automaton)); +} + +template < class SymbolType, class StateType > +regexp::RegExp ToRegExp::convert(const automaton::NFA < SymbolType, StateType > & automaton) { + return regexp::RegExp(ToRegExpStateElimination::convert(automaton)); +} + +template < class SymbolType, class StateType > +regexp::RegExp ToRegExp::convert(const automaton::DFA < SymbolType, StateType > & automaton) { + return regexp::RegExp(ToRegExpStateElimination::convert(automaton)); +} + +template < class SymbolType, class StateType > +regexp::RegExp ToRegExp::convert(const automaton::ExtendedNFA < SymbolType, StateType > & automaton) { + return regexp::RegExp(ToRegExpStateElimination::convert(automaton)); +} + +template < class SymbolType, class StateType > +regexp::RegExp ToRegExp::convert(const automaton::CompactNFA < SymbolType, StateType > & automaton) { + return regexp::RegExp(ToRegExpStateElimination::convert(automaton)); +} + } /* namespace convert */ } /* namespace automaton */ -- GitLab