diff --git a/aql2/src/aql.cpp b/aql2/src/aql.cpp index 9ea7e17add3df37c7a978b786833f7e5eeb22e06..04ca06648b9153f62b3aa19f7940f7f6166aeece 100644 --- a/aql2/src/aql.cpp +++ b/aql2/src/aql.cpp @@ -63,13 +63,18 @@ public: } }; -class FileVisitor : public TCLAP::Visitor { +class MultiArgVisitor : public TCLAP::Visitor { +protected: TCLAP::MultiArg < std::string > * m_arg; public: - FileVisitor ( TCLAP::MultiArg < std::string > * arg ) : m_arg ( arg ) { + void setArg ( TCLAP::MultiArg < std::string > * arg ) { + m_arg = arg; } +}; +class FileVisitor : public MultiArgVisitor { +public: void visit ( ) override { std::ifstream ifs ( m_arg->getValue ( ).back ( ) ); @@ -80,13 +85,8 @@ public: } }; -class QueriesVisitor : public TCLAP::Visitor { - TCLAP::MultiArg < std::string > * m_arg; - +class QueriesVisitor : public MultiArgVisitor { public: - QueriesVisitor ( TCLAP::MultiArg < std::string > * arg ) : m_arg ( arg ) { - } - void visit ( ) override { Prompt::getPrompt ( ).appendCharSequence ( cli::StringLineInterface ( m_arg->getValue ( ).back ( ) ) ); } @@ -115,13 +115,18 @@ int main ( int argc, char * argv[] ) { TCLAP::MultiArg < std::pair < std::string, std::string > > params ( "e", "env", "Environment variable", false, "key = val"); cmd.add ( params ); - TCLAP::SwitchArg interactive ( "i", "interactive", "Stay in interactive mode after -c or -f", false, new InteractiveVisitor ( ) ); + InteractiveVisitor * interactiveVisitor = new InteractiveVisitor ( ); + TCLAP::SwitchArg interactive ( "i", "interactive", "Stay in interactive mode after -c or -f", false, interactiveVisitor ); cmd.add ( interactive ); - TCLAP::MultiArg < std::string > files ( "f", "file", "Loads an aql file", false, "FILE", new FileVisitor ( & files ) ); + FileVisitor * fileVisitor = new FileVisitor ( ); + TCLAP::MultiArg < std::string > files ( "f", "file", "Loads an aql file", false, "FILE", fileVisitor ); + fileVisitor->setArg ( & files ); cmd.add ( files ); - TCLAP::MultiArg < std::string > queries ( "c", "command", "Query to execute. Multiple queries execute in sequential order.", false, "string", new QueriesVisitor ( & queries ) ); + QueriesVisitor * queriesVisitor = new QueriesVisitor ( ); + TCLAP::MultiArg < std::string > queries ( "c", "command", "Query to execute. Multiple queries execute in sequential order.", false, "string", queriesVisitor ); + queriesVisitor->setArg ( & queries ); cmd.add ( queries ); cmd.parse ( argc, argv ); @@ -162,6 +167,10 @@ int main ( int argc, char * argv[] ) { /* --------------------------------------------------------------------------------------------------------- */ + delete queriesVisitor; + delete fileVisitor; + delete interactiveVisitor; + if ( res == cli::CommandResult::QUIT || res == cli::CommandResult::RETURN ) return cli::ResultInterpret::cli ( Prompt::getPrompt ( ).getEnvironment ( ).getResult ( ) ); else if ( res == cli::CommandResult::EOT || res == cli::CommandResult::OK )