From a05c220a07af72c5d3b06e935a1d5a0391354245 Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Thu, 14 Jun 2018 15:06:35 +0200
Subject: [PATCH] template nondeterminstic exact suffix automaton construction
 algorithm

---
 .../NondeterministicExactSuffixAutomaton.cpp  | 17 ---------------
 .../NondeterministicExactSuffixAutomaton.h    | 21 ++++++++++++++++++-
 2 files changed, 20 insertions(+), 18 deletions(-)

diff --git a/alib2algo/src/stringology/indexing/NondeterministicExactSuffixAutomaton.cpp b/alib2algo/src/stringology/indexing/NondeterministicExactSuffixAutomaton.cpp
index 51103a5951..c752358765 100644
--- a/alib2algo/src/stringology/indexing/NondeterministicExactSuffixAutomaton.cpp
+++ b/alib2algo/src/stringology/indexing/NondeterministicExactSuffixAutomaton.cpp
@@ -9,23 +9,6 @@ namespace stringology {
 
 namespace indexing {
 
-automaton::EpsilonNFA < DefaultSymbolType, DefaultEpsilonType, unsigned > NondeterministicExactSuffixAutomaton::construct ( const string::LinearString < > & pattern ) {
-	automaton::EpsilonNFA < DefaultSymbolType, DefaultEpsilonType, unsigned > nfaSuffixAutomaton ( 0 );
-
-	nfaSuffixAutomaton.setInputAlphabet ( pattern.getAlphabet ( ) );
-
-	unsigned i = 0;
-	for ( const DefaultSymbolType & symbol : pattern.getContent ( ) ) {
-		nfaSuffixAutomaton.addState ( i++ );
-		nfaSuffixAutomaton.addTransition ( i - 1, symbol, i );
-		nfaSuffixAutomaton.addTransition ( 0, i );
-	}
-
-	nfaSuffixAutomaton.addFinalState ( i );
-
-	return nfaSuffixAutomaton;
-}
-
 auto SuffixAutomatonNondeterministicLinearString = registration::AbstractRegister < NondeterministicExactSuffixAutomaton, automaton::EpsilonNFA < DefaultSymbolType, DefaultEpsilonType, unsigned >, const string::LinearString < > & > ( NondeterministicExactSuffixAutomaton::construct );
 
 } /* namespace indexing */
diff --git a/alib2algo/src/stringology/indexing/NondeterministicExactSuffixAutomaton.h b/alib2algo/src/stringology/indexing/NondeterministicExactSuffixAutomaton.h
index 1ea645c973..93c27283bf 100644
--- a/alib2algo/src/stringology/indexing/NondeterministicExactSuffixAutomaton.h
+++ b/alib2algo/src/stringology/indexing/NondeterministicExactSuffixAutomaton.h
@@ -18,10 +18,29 @@ public:
 	 * Nondeterministic construction of nondeterministic suffix automaton for given pattern.
 	 * @return nondeterministic suffix automaton for given pattern.
 	 */
-	static automaton::EpsilonNFA < DefaultSymbolType, DefaultEpsilonType, unsigned > construct ( const string::LinearString < > & pattern );
+	template < class SymbolType >
+	static automaton::EpsilonNFA < SymbolType, DefaultEpsilonType, unsigned > construct ( const string::LinearString < SymbolType > & pattern );
 
 };
 
+template < class SymbolType >
+automaton::EpsilonNFA < SymbolType, DefaultEpsilonType, unsigned > NondeterministicExactSuffixAutomaton::construct ( const string::LinearString < SymbolType > & pattern ) {
+	automaton::EpsilonNFA < SymbolType, DefaultEpsilonType, unsigned > nfaSuffixAutomaton ( 0 );
+
+	nfaSuffixAutomaton.setInputAlphabet ( pattern.getAlphabet ( ) );
+
+	unsigned i = 0;
+	for ( const SymbolType & symbol : pattern.getContent ( ) ) {
+		nfaSuffixAutomaton.addState ( i++ );
+		nfaSuffixAutomaton.addTransition ( i - 1, symbol, i );
+		nfaSuffixAutomaton.addTransition ( 0, i );
+	}
+
+	nfaSuffixAutomaton.addFinalState ( i );
+
+	return nfaSuffixAutomaton;
+}
+
 } /* namespace indexing */
 
 } /* namespace stringology */
-- 
GitLab