diff --git a/aarbology2/src/aarbology.cpp b/aarbology2/src/aarbology.cpp index 4e31b5ede05bca4f91581797e31dcf895a3b92b7..10c6274c940c5cbddfe4b9b5338c5371790cccf8 100644 --- a/aarbology2/src/aarbology.cpp +++ b/aarbology2/src/aarbology.cpp @@ -23,6 +23,7 @@ #include <arbology/exact/ExactPatternMatchingAutomaton.h> #include <arbology/exact/ExactSubtreeAutomaton.h> #include <arbology/exact/ExactTreePatternAutomaton.h> +#include <arbology/transform/BeginToEndIndex.h> #include <chrono> int main ( int argc, char * argv[] ) { @@ -49,6 +50,9 @@ int main ( int argc, char * argv[] ) { TCLAP::MultiArg < std::string > pattern ( "p", "pattern", "Pattern tree from file", false, "file" ); cmd.add ( pattern ); + TCLAP::SwitchArg ends ( "e", "ends", "Return occurrences as end indexes when applicable", false ); + cmd.add ( ends ); + TCLAP::SwitchArg measure ( "m", "measure", "Measure times", false ); cmd.add ( measure ); @@ -121,6 +125,8 @@ int main ( int argc, char * argv[] ) { std::chrono::measurements::start ( "Algorithm", std::chrono::measurements::Type::MAIN ); std::set < unsigned > res = arbology::exact::ExactSubtreeMatch::match ( subject, pattern ); + if( ends.isSet ( ) ) + res = arbology::transform::BeginToEndIndex::transform(subject, res); std::chrono::measurements::end ( ); std::chrono::measurements::start ( "Output write", std::chrono::measurements::Type::AUXILARY ); @@ -134,6 +140,8 @@ int main ( int argc, char * argv[] ) { std::chrono::measurements::start ( "Algorithm", std::chrono::measurements::Type::MAIN ); std::set < unsigned > res = arbology::exact::ExactPatternMatch::match ( subject, pattern ); + if( ends.isSet ( ) ) + res = arbology::transform::BeginToEndIndex::transform(subject, res); std::chrono::measurements::end ( ); std::chrono::measurements::start ( "Output write", std::chrono::measurements::Type::AUXILARY ); @@ -147,6 +155,8 @@ int main ( int argc, char * argv[] ) { std::chrono::measurements::start ( "Algorithm", std::chrono::measurements::Type::MAIN ); std::set < unsigned > res = arbology::exact::BoyerMooreHorspool::match ( subject, pattern ); + if( ends.isSet ( ) ) + res = arbology::transform::BeginToEndIndex::transform(subject, res); std::chrono::measurements::end ( ); std::chrono::measurements::start ( "Output write", std::chrono::measurements::Type::AUXILARY ); @@ -160,6 +170,8 @@ int main ( int argc, char * argv[] ) { std::chrono::measurements::start ( "Algorithm", std::chrono::measurements::Type::MAIN ); std::set < unsigned > res = arbology::exact::KnuthMorrisPratt::match ( subject, pattern ); + if( ends.isSet ( ) ) + res = arbology::transform::BeginToEndIndex::transform(subject, res); std::chrono::measurements::end ( ); std::chrono::measurements::start ( "Output write", std::chrono::measurements::Type::AUXILARY ); diff --git a/alib2algo/src/arbology/transform/BeginToEndIndex.cpp b/alib2algo/src/arbology/transform/BeginToEndIndex.cpp index efd79314f03f72a45c71bb48b37af90d0bdea12a..f5dfd25b8a68e7c2cf6e84710718b9ad73b6abbc 100644 --- a/alib2algo/src/arbology/transform/BeginToEndIndex.cpp +++ b/alib2algo/src/arbology/transform/BeginToEndIndex.cpp @@ -23,7 +23,7 @@ std::set < unsigned > BeginToEndIndex::transform ( const tree::Tree & subject, c } std::set < unsigned > BeginToEndIndex::transform ( const tree::PrefixRankedBarTree & subject, const std::set < unsigned > & indexes ) { - std::vector < int > subjectSubtreeJumpTable = SubtreeJumpTable::compute ( subject ); + std::vector < int > subjectSubtreeJumpTable = exact::SubtreeJumpTable::compute ( subject ); std::set < unsigned > res; for ( unsigned index : indexes ) @@ -35,7 +35,7 @@ std::set < unsigned > BeginToEndIndex::transform ( const tree::PrefixRankedBarTr auto BeginToEndIndexPrefixRankedBarTreePrefixRankedBarTree = BeginToEndIndex::RegistratorWrapper < std::set < unsigned >, tree::PrefixRankedBarTree > ( BeginToEndIndex::getInstance ( ), BeginToEndIndex::transform ); std::set < unsigned > BeginToEndIndex::transform ( const tree::PrefixRankedTree & subject, const std::set < unsigned > & indexes ) { - std::vector < int > subjectSubtreeJumpTable = SubtreeJumpTable::compute ( subject ); + std::vector < int > subjectSubtreeJumpTable = exact::SubtreeJumpTable::compute ( subject ); std::set < unsigned > res; for ( unsigned index : indexes )