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