From fd867cb38572744fda72d9c3ecffa3e5dfada440 Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Mon, 14 Nov 2016 09:25:39 +0100
Subject: [PATCH] template ToGrammar algorithm

---
 alib2algo/src/automaton/convert/ToGrammar.cpp | 11 +----------
 alib2algo/src/automaton/convert/ToGrammar.h   | 19 +++++++++++++++++--
 2 files changed, 18 insertions(+), 12 deletions(-)

diff --git a/alib2algo/src/automaton/convert/ToGrammar.cpp b/alib2algo/src/automaton/convert/ToGrammar.cpp
index d494233250..469033cba8 100644
--- a/alib2algo/src/automaton/convert/ToGrammar.cpp
+++ b/alib2algo/src/automaton/convert/ToGrammar.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "ToGrammar.h"
-#include "ToGrammarRightRG.h"
 
 namespace automaton {
 
@@ -16,17 +15,9 @@ grammar::Grammar ToGrammar::convert(const automaton::Automaton& automaton) {
 	return dispatch(automaton.getData());
 }
 
-grammar::Grammar ToGrammar::convert(const automaton::NFA < > & automaton) {
-	return grammar::Grammar(ToGrammarRightRG::convert(automaton));
-}
-
 auto ToGrammarNFA = ToGrammar::RegistratorWrapper<grammar::Grammar, automaton::NFA < > >(ToGrammar::convert);
 
-grammar::Grammar ToGrammar::convert(const automaton::DFA<>& automaton) {
-	return grammar::Grammar(ToGrammarRightRG::convert(automaton));
-}
-
-auto ToGrammarDFA = ToGrammar::RegistratorWrapper<grammar::Grammar, automaton::DFA<>>(ToGrammar::convert);
+auto ToGrammarDFA = ToGrammar::RegistratorWrapper<grammar::Grammar, automaton::DFA < > >(ToGrammar::convert);
 
 } /* namespace convert */
 
diff --git a/alib2algo/src/automaton/convert/ToGrammar.h b/alib2algo/src/automaton/convert/ToGrammar.h
index e348383319..449377349d 100644
--- a/alib2algo/src/automaton/convert/ToGrammar.h
+++ b/alib2algo/src/automaton/convert/ToGrammar.h
@@ -17,6 +17,8 @@
 #include <grammar/Grammar.h>
 #include <automaton/Automaton.h>
 
+#include "ToGrammarRightRG.h"
+
 namespace automaton {
 
 namespace convert {
@@ -29,10 +31,23 @@ public:
 	 */
 	static grammar::Grammar convert(const automaton::Automaton& automaton);
 
-	static grammar::Grammar convert(const automaton::NFA<>& automaton);
-	static grammar::Grammar convert(const automaton::DFA<>& automaton);
+	template < class SymbolType, class StateType >
+	static grammar::Grammar convert(const automaton::NFA < SymbolType, StateType > & automaton);
+	template < class SymbolType, class StateType >
+	static grammar::Grammar convert(const automaton::DFA < SymbolType, StateType > & automaton);
 };
 
+template < class SymbolType, class StateType >
+grammar::Grammar ToGrammar::convert(const automaton::NFA < SymbolType, StateType > & automaton) {
+	return grammar::Grammar(ToGrammarRightRG::convert(automaton));
+}
+
+template < class SymbolType, class StateType >
+grammar::Grammar ToGrammar::convert(const automaton::DFA < SymbolType, StateType > & automaton) {
+	return grammar::Grammar(ToGrammarRightRG::convert(automaton));
+}
+
+
 } /* namespace convert */
 
 } /* namespace automaton */
-- 
GitLab