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