From 5316b51bb890f4658e8b2c4b0b05cc27ff061753 Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Wed, 30 Aug 2017 22:33:36 +0200
Subject: [PATCH] use cli in reverse binary

---
 alib2algo/src/automaton/transform/Reverse.cpp |  8 -----
 alib2algo/src/automaton/transform/Reverse.h   | 15 ++-------
 areverse2/makefile.conf                       |  6 ++--
 areverse2/src/areverse.cpp                    | 32 +++++++++++--------
 4 files changed, 25 insertions(+), 36 deletions(-)

diff --git a/alib2algo/src/automaton/transform/Reverse.cpp b/alib2algo/src/automaton/transform/Reverse.cpp
index 1c64a2bfb8..e7e4e1f104 100644
--- a/alib2algo/src/automaton/transform/Reverse.cpp
+++ b/alib2algo/src/automaton/transform/Reverse.cpp
@@ -12,14 +12,6 @@ namespace automaton {
 
 namespace transform {
 
-automaton::Automaton Reverse::convert(const Automaton& automaton) {
-	return dispatch(automaton.getData());
-}
-
-auto ReverseDFA = registration::OverloadRegister < Reverse, automaton::MultiInitialStateNFA < >, automaton::DFA < > > ( Reverse::convert );
-auto ReverseNFA = registration::OverloadRegister < Reverse, automaton::MultiInitialStateNFA < >, automaton::NFA < > > ( Reverse::convert );
-auto ReverseMultiInitialStateNFA = registration::OverloadRegister < Reverse, automaton::MultiInitialStateNFA < >, automaton::MultiInitialStateNFA < > > ( Reverse::convert );
-
 auto ReverseDFA2 = registration::AbstractRegister < Reverse, automaton::MultiInitialStateNFA < >, const automaton::DFA < > & > ( Reverse::convert );
 auto ReverseNFA2 = registration::AbstractRegister < Reverse, automaton::MultiInitialStateNFA < >, const automaton::NFA < > & > ( Reverse::convert );
 auto ReverseMultiInitialStateNFA2 = registration::AbstractRegister < Reverse, automaton::MultiInitialStateNFA < >, const automaton::MultiInitialStateNFA < > & > ( Reverse::convert );
diff --git a/alib2algo/src/automaton/transform/Reverse.h b/alib2algo/src/automaton/transform/Reverse.h
index 03777eb560..4773c40944 100644
--- a/alib2algo/src/automaton/transform/Reverse.h
+++ b/alib2algo/src/automaton/transform/Reverse.h
@@ -11,17 +11,15 @@
 #include <vector>
 #include <algorithm>
 
-#include <core/multipleDispatch.hpp>
-
-#include <automaton/Automaton.h>
-#include <automaton/AutomatonFeatures.h>
 #include <automaton/FSM/MultiInitialStateNFA.h>
+#include <automaton/FSM/NFA.h>
+#include <automaton/FSM/DFA.h>
 
 namespace automaton {
 
 namespace transform {
 
-class Reverse : public alib::SingleDispatch<Reverse, automaton::Automaton, const automaton::AutomatonBase &> {
+class Reverse {
 public:
 	template < class SymbolType, class StateType >
 	static automaton::MultiInitialStateNFA < SymbolType, StateType > convert(const automaton::DFA < SymbolType, StateType > & automaton);
@@ -29,13 +27,6 @@ public:
 	static automaton::MultiInitialStateNFA < SymbolType, StateType > convert(const automaton::NFA < SymbolType, StateType > & automaton);
 	template < class SymbolType, class StateType >
 	static automaton::MultiInitialStateNFA < SymbolType, StateType > convert(const automaton::MultiInitialStateNFA < SymbolType, StateType > & automaton);
-
-	/**
-	 * Creates finite automaton accepting reverse language of given automaton
-	 * @param automaton FSM
-	 * @return Automaton reverse automaton
-	 */
-	static automaton::Automaton convert( const automaton::Automaton & automaton );
 };
 
 template < class SymbolType, class StateType >
diff --git a/areverse2/makefile.conf b/areverse2/makefile.conf
index 3731eca9c9..963a354de8 100644
--- a/areverse2/makefile.conf
+++ b/areverse2/makefile.conf
@@ -1,4 +1,4 @@
 EXECUTABLE:=areverse2
-LINK_PATHS=../alib2elgo/ ../alib2algo/ ../alib2data/ ../alib2common/ ../alib2std/
-LINK_LIBRARIES=alib2elgo alib2algo alib2data alib2common alib2std xml2
-INCLUDE_PATHS=\$$(SOURCES_BASE_DIR)/../../alib2elgo/src/ \$$(SOURCES_BASE_DIR)/../../alib2algo/src/ \$$(SOURCES_BASE_DIR)/../../alib2data/src/ \$$(SOURCES_BASE_DIR)/../../alib2common/src/ \$$(SOURCES_BASE_DIR)/../../alib2std/src/ /usr/include/libxml2/
+LINK_PATHS=../alib2cli/ ../alib2elgo/ ../alib2algo/ ../alib2data/ ../alib2common/ ../alib2std/
+LINK_LIBRARIES=alib2cli alib2elgo alib2algo alib2data alib2common alib2std xml2
+INCLUDE_PATHS=\$$(SOURCES_BASE_DIR)/../../alib2cli/src/ \$$(SOURCES_BASE_DIR)/../../alib2common/src/ \$$(SOURCES_BASE_DIR)/../../alib2std/src/ /usr/include/libxml2/
diff --git a/areverse2/src/areverse.cpp b/areverse2/src/areverse.cpp
index 8cd69faeaa..98206c807a 100644
--- a/areverse2/src/areverse.cpp
+++ b/areverse2/src/areverse.cpp
@@ -8,11 +8,10 @@
 #include <tclap/CmdLine.h>
 #include <global/GlobalData.h>
 #include <measure>
-#include <sax/FromXMLParserHelper.h>
 
-#include "exception/CommonException.h"
-#include "factory/XmlDataFactory.hpp"
-#include "automaton/transform/Reverse.h"
+#include <exception/CommonException.h>
+#include <lexer/Lexer.h>
+#include <parser/Parser.h>
 
 int main(int argc, char** argv) {
 	try {
@@ -37,20 +36,27 @@ int main(int argc, char** argv) {
 		if(measure.isSet())
 			common::GlobalData::measure = true;
 
-		measurements::start("Overal", measurements::Type::OVERALL);
-		measurements::start("Input read", measurements::Type::AUXILIARY);
+		cli::Environment environment;
+		environment.setBinding ( "stdin", input.getValue ( ) );
+		environment.setBinding ( "stdout", "-" );
 
-		automaton::Automaton automaton = alib::XmlDataFactory::fromTokens (sax::FromXMLParserHelper::parseInput(input));
+		measurements::start ( "Overal", measurements::Type::OVERALL );
+		measurements::start ( "Input read", measurements::Type::AUXILIARY );
 
-		measurements::end();
-		measurements::start("Algorithm", measurements::Type::MAIN);
+		cli::Parser parser ( cli::Lexer ( "execute <#stdin > $inputAutomaton" ) );
+		parser.parse ( )->run ( environment );
 
-		automaton::Automaton res = automaton::transform::Reverse::convert(automaton);
+		measurements::end ( );
+		measurements::start ( "Algorithm", measurements::Type::MAIN );
 
-		measurements::end();
-		measurements::start("Output write", measurements::Type::AUXILIARY);
+		parser = cli::Parser ( cli::Lexer ( "execute automaton::transform::Reverse $inputAutomaton > $outputAutomaton" ) );
+		parser.parse ( )->run ( environment );
+
+		measurements::end ( );
+		measurements::start ( "Output write", measurements::Type::AUXILIARY );
 
-		alib::XmlDataFactory::toStdout(res);
+		parser = cli::Parser ( cli::Lexer ( "execute $outputAutomaton >#stdout" ) );
+		parser.parse ( )->run ( environment );
 
 		measurements::end();
 		measurements::end();
-- 
GitLab