From 9c5bd1ce5fb8b97e72fa29968afb98a05e53bf1f Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Sun, 4 Dec 2016 19:53:23 +0100
Subject: [PATCH] template auxiliary regexp convert algorithms

---
 alib2algo/src/regexp/convert/ToAutomaton.cpp | 10 ----------
 alib2algo/src/regexp/convert/ToAutomaton.h   | 18 ++++++++++++++++--
 alib2algo/src/regexp/convert/ToGrammar.cpp   | 10 ----------
 alib2algo/src/regexp/convert/ToGrammar.h     | 18 ++++++++++++++++--
 4 files changed, 32 insertions(+), 24 deletions(-)

diff --git a/alib2algo/src/regexp/convert/ToAutomaton.cpp b/alib2algo/src/regexp/convert/ToAutomaton.cpp
index 3ae1558fe0..e943f5b298 100644
--- a/alib2algo/src/regexp/convert/ToAutomaton.cpp
+++ b/alib2algo/src/regexp/convert/ToAutomaton.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "ToAutomaton.h"
-#include "ToAutomatonGlushkov.h"
 
 namespace regexp {
 
@@ -16,16 +15,7 @@ automaton::Automaton ToAutomaton::convert(const regexp::RegExp& regexp) {
 	return dispatch(regexp.getData());
 }
 
-automaton::Automaton ToAutomaton::convert(const regexp::FormalRegExp < > & regexp) {
-	return automaton::Automaton(ToAutomatonGlushkov::convert(regexp));
-}
-
 auto ToAutomatonFormalRegExp = ToAutomaton::RegistratorWrapper<automaton::Automaton, regexp::FormalRegExp < > >(ToAutomaton::convert);
-
-automaton::Automaton ToAutomaton::convert(const regexp::UnboundedRegExp < > & regexp) {
-	return automaton::Automaton(ToAutomatonGlushkov::convert(regexp));
-}
-
 auto ToAutomatonUnboundedRegExp = ToAutomaton::RegistratorWrapper<automaton::Automaton, regexp::UnboundedRegExp < > >( ToAutomaton::convert);
 
 } /* namespace convert */
diff --git a/alib2algo/src/regexp/convert/ToAutomaton.h b/alib2algo/src/regexp/convert/ToAutomaton.h
index bcbb8b9e9f..389da3e8fd 100644
--- a/alib2algo/src/regexp/convert/ToAutomaton.h
+++ b/alib2algo/src/regexp/convert/ToAutomaton.h
@@ -16,6 +16,8 @@
 
 #include <automaton/Automaton.h>
 
+#include "ToAutomatonGlushkov.h"
+
 namespace regexp {
 
 namespace convert {
@@ -28,11 +30,23 @@ public:
 	 */
 	static automaton::Automaton convert(const regexp::RegExp& regexp);
 
-	static automaton::Automaton convert(const regexp::FormalRegExp < > & regexp);
-	static automaton::Automaton convert(const regexp::UnboundedRegExp < > & regexp);
+	template < class SymbolType >
+	static automaton::Automaton convert(const regexp::FormalRegExp < SymbolType > & regexp);
+	template < class SymbolType >
+	static automaton::Automaton convert(const regexp::UnboundedRegExp < SymbolType > & regexp);
 
 };
 
+template < class SymbolType >
+automaton::Automaton ToAutomaton::convert(const regexp::FormalRegExp < SymbolType > & regexp) {
+	return automaton::Automaton(ToAutomatonGlushkov::convert(regexp));
+}
+
+template < class SymbolType >
+automaton::Automaton ToAutomaton::convert(const regexp::UnboundedRegExp < SymbolType > & regexp) {
+	return automaton::Automaton(ToAutomatonGlushkov::convert(regexp));
+}
+
 } /* namespace convert */
 
 } /* namespace regexp */
diff --git a/alib2algo/src/regexp/convert/ToGrammar.cpp b/alib2algo/src/regexp/convert/ToGrammar.cpp
index d02b338ab0..0b51d8f6eb 100644
--- a/alib2algo/src/regexp/convert/ToGrammar.cpp
+++ b/alib2algo/src/regexp/convert/ToGrammar.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "ToGrammar.h"
-#include "ToGrammarRightRGGlushkov.h"
 
 namespace regexp {
 
@@ -16,16 +15,7 @@ grammar::Grammar ToGrammar::convert(const regexp::RegExp& regexp) {
 	return dispatch(regexp.getData());
 }
 
-grammar::Grammar ToGrammar::convert(const regexp::FormalRegExp < > & regexp) {
-	return grammar::Grammar(ToGrammarRightRGGlushkov::convert(regexp));
-}
-
 auto ToGrammarFormalRegExp = ToGrammar::RegistratorWrapper<grammar::Grammar, regexp::FormalRegExp < > >(ToGrammar::convert);
-
-grammar::Grammar ToGrammar::convert(const regexp::UnboundedRegExp < > & regexp) {
-	return grammar::Grammar(ToGrammarRightRGGlushkov::convert(regexp));
-}
-
 auto ToGrammarUnboundedRegExp = ToGrammar::RegistratorWrapper<grammar::Grammar, regexp::UnboundedRegExp < > >(ToGrammar::convert);
 
 } /* namespace convert */
diff --git a/alib2algo/src/regexp/convert/ToGrammar.h b/alib2algo/src/regexp/convert/ToGrammar.h
index f302528b67..4af1274e84 100644
--- a/alib2algo/src/regexp/convert/ToGrammar.h
+++ b/alib2algo/src/regexp/convert/ToGrammar.h
@@ -14,6 +14,8 @@
 #include <regexp/RegExp.h>
 #include <regexp/RegExpFeatures.h>
 
+#include "ToGrammarRightRGGlushkov.h"
+
 namespace regexp {
 
 namespace convert {
@@ -26,11 +28,23 @@ public:
 	 */
 	static grammar::Grammar convert(const regexp::RegExp& regexp);
 
-	static grammar::Grammar convert(const regexp::FormalRegExp < > & regexp);
-	static grammar::Grammar convert(const regexp::UnboundedRegExp < > & regexp);
+	template < class SymbolType >
+	static grammar::Grammar convert(const regexp::FormalRegExp < SymbolType > & regexp);
+	template < class SymbolType >
+	static grammar::Grammar convert(const regexp::UnboundedRegExp < SymbolType > & regexp);
 
 };
 
+template < class SymbolType >
+grammar::Grammar ToGrammar::convert(const regexp::FormalRegExp < SymbolType > & regexp) {
+	return grammar::Grammar(ToGrammarRightRGGlushkov::convert(regexp));
+}
+
+template < class SymbolType >
+grammar::Grammar ToGrammar::convert(const regexp::UnboundedRegExp < SymbolType > & regexp) {
+	return grammar::Grammar(ToGrammarRightRGGlushkov::convert(regexp));
+}
+
 } /* namespace convert */
 
 } /* namespace regexp */
-- 
GitLab