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