diff --git a/aarbology2/src/aarbology.cpp b/aarbology2/src/aarbology.cpp index 73c7468386b4b3cda290fda5406637b2356b7762..db0043ca7f94b7b4b0c9eb28c15a695d52f10188 100644 --- a/aarbology2/src/aarbology.cpp +++ b/aarbology2/src/aarbology.cpp @@ -27,6 +27,7 @@ #include <arbology/exact/ExactPatternMatchingAutomaton.h> #include <arbology/exact/ExactSubtreeAutomaton.h> #include <arbology/exact/ExactTreePatternAutomaton.h> +#include <arbology/exact/ExactNonlinearTreePatternAutomaton.h> #include <arbology/exact/ExactSubtreeRepeatsNaive.h> #include <arbology/transform/BeginToEndIndex.h> @@ -48,6 +49,7 @@ int main ( int argc, char * argv[] ) { allowed.push_back ( "exactPatternMatchingAutomaton" ); allowed.push_back ( "exactSubtreeAutomaton" ); allowed.push_back ( "exactTreePatternAutomaton" ); + allowed.push_back ( "exactNonlinearTreePatternAutomaton" ); allowed.push_back ( "exactSubtreeRepeatsNaive" ); TCLAP::ValuesConstraint < std::string > allowedVals ( allowed ); @@ -223,6 +225,20 @@ int main ( int argc, char * argv[] ) { measurements::end ( ); measurements::start ( "Output write", measurements::Type::AUXILIARY ); + alib::XmlDataFactory::toStdout ( res ); + } else if ( algorithm.getValue ( ) == "exactNonlinearTreePatternAutomaton" ) { + tree::Tree subject = alib::XmlDataFactory::fromTokens < tree::Tree > ( std::move ( sax::FromXMLParserHelper::parseInput(true, subjectInput).front ( ) ) ); + alphabet::Symbol subtreeWildcard = alib::XmlDataFactory::fromTokens < alphabet::Symbol > ( sax::FromXMLParserHelper::parseInput(subtreeWildcardInput) ); + std::set < alphabet::Symbol > nonlinearVariables = alib::XmlDataFactory::fromTokens < std::set < alphabet::Symbol > > ( sax::FromXMLParserHelper::parseInput(nonlinearVariablesInput) ); + + measurements::end ( ); + measurements::start ( "Algorithm", measurements::Type::MAIN ); + + automaton::Automaton res = arbology::exact::ExactNonlinearTreePatternAutomaton::construct ( subject, subtreeWildcard, nonlinearVariables ); + + measurements::end ( ); + measurements::start ( "Output write", measurements::Type::AUXILIARY ); + alib::XmlDataFactory::toStdout ( res ); } else if ( algorithm.getValue ( ) == "exactSubtreeRepeatsNaive" ) { tree::Tree subject = alib::XmlDataFactory::fromTokens < tree::Tree > ( std::move ( sax::FromXMLParserHelper::parseInput(true, subjectInput).front ( ) ) );