From eaa87ff5cf6198578f25b7be62068c70fc12c19a Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Fri, 12 May 2017 12:30:22 +0200
Subject: [PATCH] organise stringology algorithms

---
 .../string/properties/GoodSuffixShiftTable.h  |  4 +--
 .../exact/ExactFactorAutomaton.cpp            | 26 -------------------
 ...tiNondeterministicSubsequenceAutomaton.cpp |  4 +--
 ...ultiNondeterministicSubsequenceAutomaton.h |  4 +--
 ...ctNondeterministicSubsequenceAutomaton.cpp |  4 +--
 ...xactNondeterministicSubsequenceAutomaton.h |  4 +--
 .../ExactSubsequenceAutomaton.cpp             |  4 +--
 .../ExactSubsequenceAutomaton.h               |  4 +--
 .../NondeterministicExactFactorAutomaton.cpp  | 26 +++++++++++++++++++
 .../NondeterministicExactFactorAutomaton.h}   | 16 ++++++------
 .../ExactMatchingAutomaton.cpp                |  4 +--
 .../ExactMatchingAutomaton.h                  |  4 +--
 astringology2/src/astringology.cpp            | 24 ++++++++---------
 13 files changed, 64 insertions(+), 64 deletions(-)
 delete mode 100644 alib2algo/src/stringology/exact/ExactFactorAutomaton.cpp
 rename alib2algo/src/stringology/{exact => indexing}/ExactMultiNondeterministicSubsequenceAutomaton.cpp (93%)
 rename alib2algo/src/stringology/{exact => indexing}/ExactMultiNondeterministicSubsequenceAutomaton.h (97%)
 rename alib2algo/src/stringology/{exact => indexing}/ExactNondeterministicSubsequenceAutomaton.cpp (93%)
 rename alib2algo/src/stringology/{exact => indexing}/ExactNondeterministicSubsequenceAutomaton.h (97%)
 rename alib2algo/src/stringology/{exact => indexing}/ExactSubsequenceAutomaton.cpp (91%)
 rename alib2algo/src/stringology/{exact => indexing}/ExactSubsequenceAutomaton.h (97%)
 create mode 100644 alib2algo/src/stringology/indexing/NondeterministicExactFactorAutomaton.cpp
 rename alib2algo/src/stringology/{exact/ExactFactorAutomaton.h => indexing/NondeterministicExactFactorAutomaton.h} (68%)
 rename alib2algo/src/stringology/{exact => matching}/ExactMatchingAutomaton.cpp (92%)
 rename alib2algo/src/stringology/{exact => matching}/ExactMatchingAutomaton.h (96%)

diff --git a/alib2algo/src/string/properties/GoodSuffixShiftTable.h b/alib2algo/src/string/properties/GoodSuffixShiftTable.h
index 90fb04c9b6..d190142467 100644
--- a/alib2algo/src/string/properties/GoodSuffixShiftTable.h
+++ b/alib2algo/src/string/properties/GoodSuffixShiftTable.h
@@ -19,7 +19,7 @@
 #include <string/properties/BorderArray.h>
 #include <automaton/determinize/Determinize.h>
 #include <automaton/simplify/EpsilonRemoverIncoming.h>
-#include <stringology/exact/ExactFactorAutomaton.h>
+#include <stringology/indexing/NondeterministicExactFactorAutomaton.h>
 
 namespace string {
 
@@ -50,7 +50,7 @@ std::vector < size_t > GoodSuffixShiftTable::gss ( const string::LinearString <
 	std::vector < unsigned > borderArray = string::properties::BorderArray::construct ( reversed );
 	size_t max = reversed.getContent ( ).size ( ) - borderArray.back ( );
 
-	automaton::DFA < DefaultSymbolType, std::set < unsigned > > factorAutomaton = automaton::determinize::Determinize::determinize ( automaton::simplify::EpsilonRemoverIncoming::remove ( stringology::exact::ExactFactorAutomaton::construct ( reversed ) ) );
+	automaton::DFA < DefaultSymbolType, std::set < unsigned > > factorAutomaton = automaton::determinize::Determinize::determinize ( automaton::simplify::EpsilonRemoverIncoming::remove ( stringology::indexing::NondeterministicExactFactorAutomaton::construct ( reversed ) ) );
 
 	std::vector < size_t > result;
 
diff --git a/alib2algo/src/stringology/exact/ExactFactorAutomaton.cpp b/alib2algo/src/stringology/exact/ExactFactorAutomaton.cpp
deleted file mode 100644
index 0193777efc..0000000000
--- a/alib2algo/src/stringology/exact/ExactFactorAutomaton.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * ExactFactorAutomaton.cpp
- *
- *  Created on: 7. 4. 2015
- *      Author: Jan Travnicek
- */
-
-#include "ExactFactorAutomaton.h"
-#include <string/LinearString.h>
-#include <string/Epsilon.h>
-
-#include <deque>
-
-namespace stringology {
-
-namespace exact {
-
-automaton::Automaton ExactFactorAutomaton::construct(const string::String& text) {
-	return dispatch(text.getData());
-}
-
-auto ExactFactorAutomatonLinearString = ExactFactorAutomaton::RegistratorWrapper<automaton::EpsilonNFA < DefaultSymbolType, DefaultEpsilonType, unsigned >, string::LinearString < > >(ExactFactorAutomaton::construct);
-
-} /* namespace exact */
-
-} /* namespace stringology */
diff --git a/alib2algo/src/stringology/exact/ExactMultiNondeterministicSubsequenceAutomaton.cpp b/alib2algo/src/stringology/indexing/ExactMultiNondeterministicSubsequenceAutomaton.cpp
similarity index 93%
rename from alib2algo/src/stringology/exact/ExactMultiNondeterministicSubsequenceAutomaton.cpp
rename to alib2algo/src/stringology/indexing/ExactMultiNondeterministicSubsequenceAutomaton.cpp
index 4ef32e4c67..6fbfed0d69 100644
--- a/alib2algo/src/stringology/exact/ExactMultiNondeterministicSubsequenceAutomaton.cpp
+++ b/alib2algo/src/stringology/indexing/ExactMultiNondeterministicSubsequenceAutomaton.cpp
@@ -10,12 +10,12 @@
 
 namespace stringology {
 
-namespace exact {
+namespace indexing {
 
 automaton::Automaton ExactMultiNondeterministicSubsequenceAutomaton::construct ( const std::set < string::String > & texts ) {
 	return automaton::Automaton ( ExactMultiNondeterministicSubsequenceAutomaton::construct ( common::ContainerConverter < std::set < string::LinearString < > >, std::set < string::String >, string::LinearString < > >::convert ( texts ) ) );
 }
 
-} /* namespace exact */
+} /* namespace indexing */
 
 } /* namespace stringology */
diff --git a/alib2algo/src/stringology/exact/ExactMultiNondeterministicSubsequenceAutomaton.h b/alib2algo/src/stringology/indexing/ExactMultiNondeterministicSubsequenceAutomaton.h
similarity index 97%
rename from alib2algo/src/stringology/exact/ExactMultiNondeterministicSubsequenceAutomaton.h
rename to alib2algo/src/stringology/indexing/ExactMultiNondeterministicSubsequenceAutomaton.h
index cd61e16f2a..e8adc807f2 100644
--- a/alib2algo/src/stringology/exact/ExactMultiNondeterministicSubsequenceAutomaton.h
+++ b/alib2algo/src/stringology/indexing/ExactMultiNondeterministicSubsequenceAutomaton.h
@@ -17,7 +17,7 @@
 
 namespace stringology {
 
-namespace exact {
+namespace indexing {
 
 class ExactMultiNondeterministicSubsequenceAutomaton {
 public:
@@ -59,7 +59,7 @@ automaton::EpsilonNFA < SymbolType, DefaultEpsilonType, std::pair < unsigned, un
 	return res;
 }
 
-} /* namespace exact */
+} /* namespace indexing */
 
 } /* namespace stringology */
 
diff --git a/alib2algo/src/stringology/exact/ExactNondeterministicSubsequenceAutomaton.cpp b/alib2algo/src/stringology/indexing/ExactNondeterministicSubsequenceAutomaton.cpp
similarity index 93%
rename from alib2algo/src/stringology/exact/ExactNondeterministicSubsequenceAutomaton.cpp
rename to alib2algo/src/stringology/indexing/ExactNondeterministicSubsequenceAutomaton.cpp
index d479520957..feb46bf22c 100644
--- a/alib2algo/src/stringology/exact/ExactNondeterministicSubsequenceAutomaton.cpp
+++ b/alib2algo/src/stringology/indexing/ExactNondeterministicSubsequenceAutomaton.cpp
@@ -9,7 +9,7 @@
 
 namespace stringology {
 
-namespace exact {
+namespace indexing {
 
 automaton::Automaton ExactNondeterministicSubsequenceAutomaton::construct(const string::String& text) {
 	return dispatch(text.getData());
@@ -17,6 +17,6 @@ automaton::Automaton ExactNondeterministicSubsequenceAutomaton::construct(const
 
 auto ExactNondeterministicSubsequenceAutomatonLinearString = ExactNondeterministicSubsequenceAutomaton::RegistratorWrapper < automaton::EpsilonNFA < DefaultSymbolType, DefaultEpsilonType, unsigned >, string::LinearString < > > ( ExactNondeterministicSubsequenceAutomaton::construct );
 
-} /* namespace exact */
+} /* namespace indexing */
 
 } /* namespace stringology */
diff --git a/alib2algo/src/stringology/exact/ExactNondeterministicSubsequenceAutomaton.h b/alib2algo/src/stringology/indexing/ExactNondeterministicSubsequenceAutomaton.h
similarity index 97%
rename from alib2algo/src/stringology/exact/ExactNondeterministicSubsequenceAutomaton.h
rename to alib2algo/src/stringology/indexing/ExactNondeterministicSubsequenceAutomaton.h
index 952da5cae8..8419b76375 100644
--- a/alib2algo/src/stringology/exact/ExactNondeterministicSubsequenceAutomaton.h
+++ b/alib2algo/src/stringology/indexing/ExactNondeterministicSubsequenceAutomaton.h
@@ -16,7 +16,7 @@
 
 namespace stringology {
 
-namespace exact {
+namespace indexing {
 
 class ExactNondeterministicSubsequenceAutomaton : public std::SingleDispatch<ExactNondeterministicSubsequenceAutomaton, automaton::Automaton, const string::StringBase & > {
 public:
@@ -48,7 +48,7 @@ automaton::EpsilonNFA < SymbolType, DefaultEpsilonType, unsigned > ExactNondeter
 	return res;
 }
 
-} /* namespace exact */
+} /* namespace indexing */
 
 } /* namespace stringology */
 
diff --git a/alib2algo/src/stringology/exact/ExactSubsequenceAutomaton.cpp b/alib2algo/src/stringology/indexing/ExactSubsequenceAutomaton.cpp
similarity index 91%
rename from alib2algo/src/stringology/exact/ExactSubsequenceAutomaton.cpp
rename to alib2algo/src/stringology/indexing/ExactSubsequenceAutomaton.cpp
index 46cb28c63c..3da7a3dcd3 100644
--- a/alib2algo/src/stringology/exact/ExactSubsequenceAutomaton.cpp
+++ b/alib2algo/src/stringology/indexing/ExactSubsequenceAutomaton.cpp
@@ -9,7 +9,7 @@
 
 namespace stringology {
 
-namespace exact {
+namespace indexing {
 
 automaton::Automaton ExactSubsequenceAutomaton::construct(const string::String& text) {
 	return dispatch(text.getData());
@@ -17,6 +17,6 @@ automaton::Automaton ExactSubsequenceAutomaton::construct(const string::String&
 
 auto ExactSubsequenceAutomatonLinearString = ExactSubsequenceAutomaton::RegistratorWrapper < automaton::DFA < DefaultSymbolType, unsigned >, string::LinearString < > > ( ExactSubsequenceAutomaton::construct );
 
-} /* namespace exact */
+} /* namespace indexing */
 
 } /* namespace stringology */
diff --git a/alib2algo/src/stringology/exact/ExactSubsequenceAutomaton.h b/alib2algo/src/stringology/indexing/ExactSubsequenceAutomaton.h
similarity index 97%
rename from alib2algo/src/stringology/exact/ExactSubsequenceAutomaton.h
rename to alib2algo/src/stringology/indexing/ExactSubsequenceAutomaton.h
index c7cd07cb05..9e52895cdf 100644
--- a/alib2algo/src/stringology/exact/ExactSubsequenceAutomaton.h
+++ b/alib2algo/src/stringology/indexing/ExactSubsequenceAutomaton.h
@@ -16,7 +16,7 @@
 
 namespace stringology {
 
-namespace exact {
+namespace indexing {
 
 class ExactSubsequenceAutomaton : public std::SingleDispatch<ExactSubsequenceAutomaton, automaton::Automaton, const string::StringBase & > {
 public:
@@ -56,7 +56,7 @@ automaton::DFA < SymbolType, unsigned > ExactSubsequenceAutomaton::construct ( c
 	return res;
 }
 
-} /* namespace exact */
+} /* namespace indexing */
 
 } /* namespace stringology */
 
diff --git a/alib2algo/src/stringology/indexing/NondeterministicExactFactorAutomaton.cpp b/alib2algo/src/stringology/indexing/NondeterministicExactFactorAutomaton.cpp
new file mode 100644
index 0000000000..0fa8a91dc2
--- /dev/null
+++ b/alib2algo/src/stringology/indexing/NondeterministicExactFactorAutomaton.cpp
@@ -0,0 +1,26 @@
+/*
+ * NondeterministicExactFactorAutomaton.cpp
+ *
+ *  Created on: 7. 4. 2015
+ *      Author: Jan Travnicek
+ */
+
+#include "NondeterministicExactFactorAutomaton.h"
+#include <string/LinearString.h>
+#include <string/Epsilon.h>
+
+#include <deque>
+
+namespace stringology {
+
+namespace indexing {
+
+automaton::Automaton NondeterministicExactFactorAutomaton::construct(const string::String& text) {
+	return dispatch(text.getData());
+}
+
+auto ExactFactorAutomatonLinearString = NondeterministicExactFactorAutomaton::RegistratorWrapper<automaton::EpsilonNFA < DefaultSymbolType, DefaultEpsilonType, unsigned >, string::LinearString < > >(NondeterministicExactFactorAutomaton::construct);
+
+} /* namespace indexing */
+
+} /* namespace stringology */
diff --git a/alib2algo/src/stringology/exact/ExactFactorAutomaton.h b/alib2algo/src/stringology/indexing/NondeterministicExactFactorAutomaton.h
similarity index 68%
rename from alib2algo/src/stringology/exact/ExactFactorAutomaton.h
rename to alib2algo/src/stringology/indexing/NondeterministicExactFactorAutomaton.h
index db5c71caef..84930fefb1 100644
--- a/alib2algo/src/stringology/exact/ExactFactorAutomaton.h
+++ b/alib2algo/src/stringology/indexing/NondeterministicExactFactorAutomaton.h
@@ -1,12 +1,12 @@
 /*
- * ExactFactorAutomaton.h
+ * NondeterministicExactFactorAutomaton.h
  *
  *  Created on: 7. 4. 2015
  *      Author: Jan Travnicek
  */
 
-#ifndef _EXACT_FACTOR_AUTOMATON__H_
-#define _EXACT_FACTOR_AUTOMATON__H_
+#ifndef NONDETERMINISTIC_EXACT_FACTOR_AUTOMATON_H_
+#define NONDETERMINISTIC_EXACT_FACTOR_AUTOMATON_H_
 
 #include <automaton/Automaton.h>
 #include <automaton/FSM/EpsilonNFA.h>
@@ -17,9 +17,9 @@
 
 namespace stringology {
 
-namespace exact {
+namespace indexing {
 
-class ExactFactorAutomaton : public std::SingleDispatch<ExactFactorAutomaton, automaton::Automaton, const string::StringBase & > {
+class NondeterministicExactFactorAutomaton : public std::SingleDispatch<NondeterministicExactFactorAutomaton, automaton::Automaton, const string::StringBase & > {
 public:
 	/**
 	 * Performs conversion.
@@ -32,7 +32,7 @@ public:
 };
 
 template < class SymbolType >
-automaton::EpsilonNFA < SymbolType, DefaultEpsilonType, unsigned > ExactFactorAutomaton::construct(const string::LinearString < SymbolType > & text) {
+automaton::EpsilonNFA < SymbolType, DefaultEpsilonType, unsigned > NondeterministicExactFactorAutomaton::construct(const string::LinearString < SymbolType > & text) {
 	automaton::EpsilonNFA < SymbolType, DefaultEpsilonType, unsigned > res ( 0 );
 	res.addFinalState ( 0 );
 	res.setInputAlphabet(text.getAlphabet());
@@ -47,8 +47,8 @@ automaton::EpsilonNFA < SymbolType, DefaultEpsilonType, unsigned > ExactFactorAu
 	return res;
 }
 
-} /* namespace exact */
+} /* namespace indexing */
 
 } /* namespace stringology */
 
-#endif /* _EXACT_FACTOR_AUTOMATON__H_ */
+#endif /* NONDETERMINISTIC_EXACT_FACTOR_AUTOMATON_H_ */
diff --git a/alib2algo/src/stringology/exact/ExactMatchingAutomaton.cpp b/alib2algo/src/stringology/matching/ExactMatchingAutomaton.cpp
similarity index 92%
rename from alib2algo/src/stringology/exact/ExactMatchingAutomaton.cpp
rename to alib2algo/src/stringology/matching/ExactMatchingAutomaton.cpp
index ab84e7dac5..f7114e25c5 100644
--- a/alib2algo/src/stringology/exact/ExactMatchingAutomaton.cpp
+++ b/alib2algo/src/stringology/matching/ExactMatchingAutomaton.cpp
@@ -13,7 +13,7 @@
 
 namespace stringology {
 
-namespace exact {
+namespace matching {
 
 automaton::Automaton ExactMatchingAutomaton::construct(const string::String& pattern) {
 	return dispatch(pattern.getData());
@@ -21,6 +21,6 @@ automaton::Automaton ExactMatchingAutomaton::construct(const string::String& pat
 
 auto ExactMatchingAutomatonLinearString = ExactMatchingAutomaton::RegistratorWrapper<automaton::NFA < DefaultSymbolType, unsigned > , string::LinearString < > >(ExactMatchingAutomaton::construct);
 
-} /* namespace exact */
+} /* namespace matching */
 
 } /* namespace stringology */
diff --git a/alib2algo/src/stringology/exact/ExactMatchingAutomaton.h b/alib2algo/src/stringology/matching/ExactMatchingAutomaton.h
similarity index 96%
rename from alib2algo/src/stringology/exact/ExactMatchingAutomaton.h
rename to alib2algo/src/stringology/matching/ExactMatchingAutomaton.h
index 3df4f87bc0..da23f3913a 100644
--- a/alib2algo/src/stringology/exact/ExactMatchingAutomaton.h
+++ b/alib2algo/src/stringology/matching/ExactMatchingAutomaton.h
@@ -16,7 +16,7 @@
 
 namespace stringology {
 
-namespace exact {
+namespace matching {
 
 class ExactMatchingAutomaton : public std::SingleDispatch<ExactMatchingAutomaton, automaton::Automaton, const string::StringBase & > {
 public:
@@ -47,7 +47,7 @@ automaton::NFA < SymbolType, unsigned > ExactMatchingAutomaton::construct(const
 	return res;
 }
 
-} /* namespace exact */
+} /* namespace matching */
 
 } /* namespace stringology */
 
diff --git a/astringology2/src/astringology.cpp b/astringology2/src/astringology.cpp
index 4c770213af..9100d2acfb 100644
--- a/astringology2/src/astringology.cpp
+++ b/astringology2/src/astringology.cpp
@@ -27,11 +27,11 @@
 #include <stringology/query/BNDMOccurrences.h>
 #include <stringology/exact/BackwardOracleMatching.h>
 #include <stringology/exact/BackwardDAWGMatching.h>
-#include <stringology/exact/ExactMatchingAutomaton.h>
-#include <stringology/exact/ExactFactorAutomaton.h>
-#include <stringology/exact/ExactSubsequenceAutomaton.h>
-#include <stringology/exact/ExactNondeterministicSubsequenceAutomaton.h>
-#include <stringology/exact/ExactMultiNondeterministicSubsequenceAutomaton.h>
+#include <stringology/matching/ExactMatchingAutomaton.h>
+#include <stringology/indexing/NondeterministicExactFactorAutomaton.h>
+#include <stringology/indexing/ExactSubsequenceAutomaton.h>
+#include <stringology/indexing/ExactNondeterministicSubsequenceAutomaton.h>
+#include <stringology/indexing/ExactMultiNondeterministicSubsequenceAutomaton.h>
 #include <stringology/exact/FactorOracleAutomaton.h>
 #include <stringology/exact/SuffixAutomaton.h>
 #include <string/properties/BorderArray.h>
@@ -51,7 +51,7 @@ int main ( int argc, char * argv[] ) {
 
 		std::vector < std::string > allowed;
 		allowed.push_back ( "exactMatchingAutomaton" );
-		allowed.push_back ( "exactFactorAutomaton" );
+		allowed.push_back ( "exactNondeterministicFactorAutomaton" );
 		allowed.push_back ( "exactSubsequenceAutomaton" );
 		allowed.push_back ( "exactNondeterministicSubsequenceAutomaton" );
 		allowed.push_back ( "exactMultiNondeterministicSubsequenceAutomaton" );
@@ -212,19 +212,19 @@ int main ( int argc, char * argv[] ) {
 			measurements::end ( );
 			measurements::start ( "Algorithm", measurements::Type::MAIN );
 
-			automaton::Automaton automaton = stringology::exact::ExactMatchingAutomaton::construct ( pattern );
+			automaton::Automaton automaton = stringology::matching::ExactMatchingAutomaton::construct ( pattern );
 
 			measurements::end ( );
 			measurements::start ( "Output write", measurements::Type::AUXILIARY );
 
 			alib::XmlDataFactory::toStdout ( automaton );
-		} else if ( algorithm.getValue ( ) == "exactFactorAutomaton" ) {
+		} else if ( algorithm.getValue ( ) == "exactNondeterministicFactorAutomaton" ) {
 			string::String subject = alib::XmlDataFactory::fromTokens ( std::move ( sax::FromXMLParserHelper::parseInput(true, subjectInput).front ( ) ) );
 
 			measurements::end ( );
 			measurements::start ( "Algorithm", measurements::Type::MAIN );
 
-			automaton::Automaton automaton = stringology::exact::ExactFactorAutomaton::construct ( subject );
+			automaton::Automaton automaton = stringology::indexing::NondeterministicExactFactorAutomaton::construct ( subject );
 
 			measurements::end ( );
 			measurements::start ( "Output write", measurements::Type::AUXILIARY );
@@ -236,7 +236,7 @@ int main ( int argc, char * argv[] ) {
 			measurements::end ( );
 			measurements::start ( "Algorithm", measurements::Type::MAIN );
 
-			automaton::Automaton automaton = stringology::exact::ExactSubsequenceAutomaton::construct ( subject );
+			automaton::Automaton automaton = stringology::indexing::ExactSubsequenceAutomaton::construct ( subject );
 
 			measurements::end ( );
 			measurements::start ( "Output write", measurements::Type::AUXILIARY );
@@ -248,7 +248,7 @@ int main ( int argc, char * argv[] ) {
 			measurements::end ( );
 			measurements::start ( "Algorithm", measurements::Type::MAIN );
 
-			automaton::Automaton automaton = stringology::exact::ExactNondeterministicSubsequenceAutomaton::construct ( subject );
+			automaton::Automaton automaton = stringology::indexing::ExactNondeterministicSubsequenceAutomaton::construct ( subject );
 
 			measurements::end ( );
 			measurements::start ( "Output write", measurements::Type::AUXILIARY );
@@ -265,7 +265,7 @@ int main ( int argc, char * argv[] ) {
 			measurements::end ( );
 			measurements::start ( "Algorithm", measurements::Type::MAIN );
 
-			automaton::Automaton automaton = stringology::exact::ExactMultiNondeterministicSubsequenceAutomaton::construct ( subjects );
+			automaton::Automaton automaton = stringology::indexing::ExactMultiNondeterministicSubsequenceAutomaton::construct ( subjects );
 
 			measurements::end ( );
 			measurements::start ( "Output write", measurements::Type::AUXILIARY );
-- 
GitLab