From c07a0e378246f9f84248ba1d8b4eca71891e3bff Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Wed, 30 Aug 2017 11:43:20 +0200
Subject: [PATCH] use cli internally in minimize

---
 adeterminize2/src/adeterminize.cpp            |  1 -
 alib2algo/src/automaton/simplify/Minimize.cpp | 11 ++----
 alib2algo/src/automaton/simplify/Minimize.h   |  9 +----
 .../automaton/simplify/MinimizeBrzozowski.cpp | 13 ++-----
 .../automaton/simplify/MinimizeBrzozowski.h   | 11 ++----
 aminimize2/makefile.conf                      |  6 ++--
 aminimize2/src/aminimize.cpp                  | 36 +++++++++----------
 7 files changed, 28 insertions(+), 59 deletions(-)

diff --git a/adeterminize2/src/adeterminize.cpp b/adeterminize2/src/adeterminize.cpp
index 13de4d05d1..b2cd3c5013 100644
--- a/adeterminize2/src/adeterminize.cpp
+++ b/adeterminize2/src/adeterminize.cpp
@@ -13,7 +13,6 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
-
 int main(int argc, char** argv) {
 	try {
 		common::GlobalData::argc = argc;
diff --git a/alib2algo/src/automaton/simplify/Minimize.cpp b/alib2algo/src/automaton/simplify/Minimize.cpp
index d730b03701..e99008bed8 100644
--- a/alib2algo/src/automaton/simplify/Minimize.cpp
+++ b/alib2algo/src/automaton/simplify/Minimize.cpp
@@ -12,15 +12,8 @@ namespace automaton {
 
 namespace simplify {
 
-automaton::Automaton Minimize::minimize(const automaton::Automaton& automaton) {
-	return dispatch(automaton.getData());
-}
-
-auto MinimizeNFA = registration::OverloadRegister < Minimize, automaton::DFA < >, automaton::DFA < > >( Minimize::minimize );
-auto MinimizeNFTA = registration::OverloadRegister < Minimize, automaton::DFTA < >, automaton::DFTA < > >( Minimize::minimize );
-
-auto MinimizeNFA2 = registration::AbstractRegister < Minimize, automaton::DFA < >, const automaton::DFA < > & > ( Minimize::minimize );
-auto MinimizeNFTA2 = registration::AbstractRegister < Minimize, automaton::DFTA < >, const automaton::DFTA < > & > ( Minimize::minimize );
+auto MinimizeNFA = registration::AbstractRegister < Minimize, automaton::DFA < >, const automaton::DFA < > & > ( Minimize::minimize );
+auto MinimizeNFTA = registration::AbstractRegister < Minimize, automaton::DFTA < >, const automaton::DFTA < > & > ( Minimize::minimize );
 
 } /* namespace simplify */
 
diff --git a/alib2algo/src/automaton/simplify/Minimize.h b/alib2algo/src/automaton/simplify/Minimize.h
index 778c1c154c..ca55e515ce 100644
--- a/alib2algo/src/automaton/simplify/Minimize.h
+++ b/alib2algo/src/automaton/simplify/Minimize.h
@@ -8,8 +8,6 @@
 #ifndef MINIMIZE_H_
 #define MINIMIZE_H_
 
-#include <core/multipleDispatch.hpp>
-#include <automaton/Automaton.h>
 #include <automaton/FSM/DFA.h>
 #include <automaton/TA/DFTA.h>
 
@@ -24,13 +22,8 @@ namespace automaton {
 
 namespace simplify {
 
-class Minimize : public alib::SingleDispatch<Minimize, automaton::Automaton, const automaton::AutomatonBase &> {
+class Minimize {
 public:
-	/**
-	 * @param dfa automaton to minimize
-	 */
-	static automaton::Automaton minimize(const automaton::Automaton& dfa);
-
 	template < class SymbolType, class StateType >
 	static automaton::DFA < SymbolType, StateType > minimize(const automaton::DFA < SymbolType, StateType >& dfa);
 
diff --git a/alib2algo/src/automaton/simplify/MinimizeBrzozowski.cpp b/alib2algo/src/automaton/simplify/MinimizeBrzozowski.cpp
index b5476bf141..ddaf711356 100644
--- a/alib2algo/src/automaton/simplify/MinimizeBrzozowski.cpp
+++ b/alib2algo/src/automaton/simplify/MinimizeBrzozowski.cpp
@@ -12,17 +12,8 @@ namespace automaton {
 
 namespace simplify {
 
-automaton::Automaton MinimizeBrzozowski::minimize(const automaton::Automaton& automaton) {
-	automaton::Automaton res = dispatch(automaton.getData());
-	res.normalize ( );
-	return res;
-}
-
-auto MinimizeBrzozowskiDFA = registration::OverloadRegister < MinimizeBrzozowski, automaton::DFA < DefaultSymbolType, ext::set < ext::set < DefaultStateType > > >, automaton::DFA < > > ( MinimizeBrzozowski::minimize );
-auto MinimizeBrzozowskiNFA = registration::OverloadRegister < MinimizeBrzozowski, automaton::DFA < DefaultSymbolType, ext::set < ext::set < DefaultStateType > > >, automaton::NFA < > > ( MinimizeBrzozowski::minimize );
-
-auto MinimizeBrzozowskiDFA2 = registration::AbstractRegister < MinimizeBrzozowski, automaton::DFA < DefaultSymbolType, ext::set < ext::set < DefaultStateType > > >, const automaton::DFA < > & > ( MinimizeBrzozowski::minimize );
-auto MinimizeBrzozowskiNFA2 = registration::AbstractRegister < MinimizeBrzozowski, automaton::DFA < DefaultSymbolType, ext::set < ext::set < DefaultStateType > > >, const automaton::NFA < > & > ( MinimizeBrzozowski::minimize );
+auto MinimizeBrzozowskiDFA = registration::AbstractRegister < MinimizeBrzozowski, automaton::DFA < DefaultSymbolType, ext::set < ext::set < DefaultStateType > > >, const automaton::DFA < > & > ( MinimizeBrzozowski::minimize );
+auto MinimizeBrzozowskiNFA = registration::AbstractRegister < MinimizeBrzozowski, automaton::DFA < DefaultSymbolType, ext::set < ext::set < DefaultStateType > > >, const automaton::NFA < > & > ( MinimizeBrzozowski::minimize );
 
 } /* namespace simplify */
 
diff --git a/alib2algo/src/automaton/simplify/MinimizeBrzozowski.h b/alib2algo/src/automaton/simplify/MinimizeBrzozowski.h
index b022d9c73d..a03162d17f 100644
--- a/alib2algo/src/automaton/simplify/MinimizeBrzozowski.h
+++ b/alib2algo/src/automaton/simplify/MinimizeBrzozowski.h
@@ -4,12 +4,10 @@
  *  Created on: 18. 11. 2014
  *	  Author: Tomas Pecka
  */
- 
+
 #ifndef MINIMIZE_BRZOZOWSKI_H_
 #define MINIMIZE_BRZOZOWSKI_H_
 
-#include <core/multipleDispatch.hpp>
-#include <automaton/Automaton.h>
 #include <automaton/FSM/DFA.h>
 #include <automaton/FSM/NFA.h>
 #include <automaton/FSM/MultiInitialStateNFA.h>
@@ -21,13 +19,8 @@ namespace automaton {
 
 namespace simplify {
 
-class MinimizeBrzozowski : public alib::SingleDispatch<MinimizeBrzozowski, automaton::Automaton, const automaton::AutomatonBase &> {
+class MinimizeBrzozowski {
 public:
-	/**
-	 * @param dfa automaton to minimize
-	 */
-	static automaton::Automaton minimize(const automaton::Automaton& dfa);
-
 	template < class SymbolType, class StateType >
 	static automaton::DFA < SymbolType, ext::set < ext::set < StateType > > > minimize(const automaton::DFA < SymbolType, StateType > & dfa);
 	template < class SymbolType, class StateType >
diff --git a/aminimize2/makefile.conf b/aminimize2/makefile.conf
index 5c778a70d8..b5072e4ce9 100644
--- a/aminimize2/makefile.conf
+++ b/aminimize2/makefile.conf
@@ -1,4 +1,4 @@
 EXECUTABLE:=aminimize2
-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)/../../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/
diff --git a/aminimize2/src/aminimize.cpp b/aminimize2/src/aminimize.cpp
index ba95aa1d38..84a7ebf879 100644
--- a/aminimize2/src/aminimize.cpp
+++ b/aminimize2/src/aminimize.cpp
@@ -8,13 +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/simplify/Minimize.h"
-#include "automaton/simplify/MinimizeBrzozowski.h"
+#include <lexer/Lexer.h>
+#include <parser/Parser.h>
 
 int main(int argc, char** argv) {
 	try {
@@ -44,32 +41,35 @@ int main(int argc, char** argv) {
 		if(measure.isSet())
 			common::GlobalData::measure = true;
 
+		cli::Environment environment;
+		environment.setBinding ( "stdin", input.getValue ( ) );
+		environment.setBinding ( "stdout", "-" );
+
 		measurements::start("Overal", measurements::Type::OVERALL);
 		measurements::start("Input read", measurements::Type::AUXILIARY);
 
-		automaton::Automaton automaton = alib::XmlDataFactory::fromTokens (sax::FromXMLParserHelper::parseInput(input));
+		cli::Parser parser ( cli::Lexer ( "execute <#stdin > $inputAutomaton" ) );
+		parser.parse ( )->run ( environment );
 
 		measurements::end();
 		measurements::start("Algorithm", measurements::Type::MAIN);
 
 		if(algorithm.getValue() == "hopcroft") {
-			automaton::Automaton res = automaton::simplify::Minimize::minimize(automaton);
-
-			measurements::end();
-			measurements::start("Output write", measurements::Type::AUXILIARY);
-
-			alib::XmlDataFactory::toStdout(res);
+			parser = cli::Parser ( cli::Lexer ( "execute automaton::simplify::Minimize $inputAutomaton > $outputAutomaton" ) );
 		} else if(algorithm.getValue() == "brzozowski") {
-			automaton::Automaton res = automaton::simplify::MinimizeBrzozowski::minimize(automaton);
-
-			measurements::end();
-			measurements::start("Output write", measurements::Type::AUXILIARY);
-
-			alib::XmlDataFactory::toStdout(res);
+			parser = cli::Parser ( cli::Lexer ( "execute automaton::simplify::MinimizeBrzozowski $inputAutomaton > $outputAutomaton" ) );
 		} else {
 			throw exception::CommonException("Unknown algorithm selected.");
 		}
 
+		parser.parse ( )->run ( environment );
+
+		measurements::end();
+		measurements::start("Output write", measurements::Type::AUXILIARY);
+
+		parser = cli::Parser ( cli::Lexer ( "execute $outputAutomaton >#stdout" ) );
+		parser.parse ( )->run ( environment );
+
 		measurements::end();
 		measurements::end();
 
-- 
GitLab