From 43978ff8ddb7b45a8a555753ed39738dce24ada8 Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Wed, 16 Aug 2017 12:32:22 +0200
Subject: [PATCH] register dot converter to abstraction

---
 alib2aux/src/convert/DotConverter.cpp | 22 +++++++++++++++++++++-
 alib2aux/src/convert/DotConverter.h   |  7 +++++++
 2 files changed, 28 insertions(+), 1 deletion(-)

diff --git a/alib2aux/src/convert/DotConverter.cpp b/alib2aux/src/convert/DotConverter.cpp
index 4f0df200a9..e947d167f9 100644
--- a/alib2aux/src/convert/DotConverter.cpp
+++ b/alib2aux/src/convert/DotConverter.cpp
@@ -15,7 +15,7 @@ void DotConverter::convert(std::ostream& out, const automaton::Automaton& a) {
 }
 
 auto DotConverterEpsilonNFA = registration::OverloadRegister < DotConverter, void, automaton::EpsilonNFA < > > ( DotConverter::convert );
-auto DotConverterMultiInitialStateNFA = registration::OverloadRegister < DotConverter, void, automaton::MultiInitialStateNFA < >> ( DotConverter::convert );
+auto DotConverterMultiInitialStateNFA = registration::OverloadRegister < DotConverter, void, automaton::MultiInitialStateNFA < > > ( DotConverter::convert );
 auto DotConverterNFA = registration::OverloadRegister < DotConverter, void, automaton::NFA < > > ( DotConverter::convert );
 auto DotConverterDFA = registration::OverloadRegister < DotConverter, void, automaton::DFA < > > ( DotConverter::convert );
 auto DotConverterExtendedNFA = registration::OverloadRegister < DotConverter, void, automaton::ExtendedNFA < > > ( DotConverter::convert );
@@ -34,4 +34,24 @@ auto DotConverterNPDA = registration::OverloadRegister < DotConverter, void, aut
 auto DotConverterSinglePopNPDA = registration::OverloadRegister < DotConverter, void, automaton::SinglePopNPDA < > > ( DotConverter::convert );
 auto DotConverterOneTapeDTM = registration::OverloadRegister < DotConverter, void, automaton::OneTapeDTM < > > ( DotConverter::convert );
 
+auto DotConverterEpsilonNFA2 = registration::AbstractRegister < DotConverter, std::string, const automaton::EpsilonNFA < > & > ( DotConverter::convert );
+auto DotConverterMultiInitialStateNFA2 = registration::AbstractRegister < DotConverter, std::string, const automaton::MultiInitialStateNFA < > & > ( DotConverter::convert );
+auto DotConverterNFA2 = registration::AbstractRegister < DotConverter, std::string, const automaton::NFA < > & > ( DotConverter::convert );
+auto DotConverterDFA2 = registration::AbstractRegister < DotConverter, std::string, const automaton::DFA < > & > ( DotConverter::convert );
+auto DotConverterExtendedNFA2 = registration::AbstractRegister < DotConverter, std::string, const automaton::ExtendedNFA < > & > ( DotConverter::convert );
+auto DotConverterCompactNFA2 = registration::AbstractRegister < DotConverter, std::string, const automaton::CompactNFA < > & > ( DotConverter::convert );
+auto DotConverterNFTA2 = registration::AbstractRegister < DotConverter, std::string, const automaton::NFTA < > & > ( DotConverter::convert );
+auto DotConverterDFTA2 = registration::AbstractRegister < DotConverter, std::string, const automaton::DFTA < > & > ( DotConverter::convert );
+auto DotConverterDPDA2 = registration::AbstractRegister < DotConverter, std::string, const automaton::DPDA < > & > ( DotConverter::convert );
+auto DotConverterSinglePopDPDA2 = registration::AbstractRegister < DotConverter, std::string, const automaton::SinglePopDPDA < > & > ( DotConverter::convert );
+auto DotConverterInputDrivenDPDA2 = registration::AbstractRegister < DotConverter, std::string, const automaton::InputDrivenDPDA < > & > ( DotConverter::convert );
+auto DotConverterInputDrivenNPDA2 = registration::AbstractRegister < DotConverter, std::string, const automaton::InputDrivenNPDA < > & > ( DotConverter::convert );
+auto DotConverterVisiblyPushdownDPDA2 = registration::AbstractRegister < DotConverter, std::string, const automaton::VisiblyPushdownDPDA < > & > ( DotConverter::convert );
+auto DotConverterVisiblyPushdownNPDA2 = registration::AbstractRegister < DotConverter, std::string, const automaton::VisiblyPushdownNPDA < > & > ( DotConverter::convert );
+auto DotConverterRealTimeHeightDeterministicDPDA2 = registration::AbstractRegister < DotConverter, std::string, const automaton::RealTimeHeightDeterministicDPDA < > & > ( DotConverter::convert );
+auto DotConverterRealTimeHeightDeterministicNPDA2 = registration::AbstractRegister < DotConverter, std::string, const automaton::RealTimeHeightDeterministicNPDA < > & > ( DotConverter::convert );
+auto DotConverterNPDA2 = registration::AbstractRegister < DotConverter, std::string, const automaton::NPDA < > & > ( DotConverter::convert );
+auto DotConverterSinglePopNPDA2 = registration::AbstractRegister < DotConverter, std::string, const automaton::SinglePopNPDA < > & > ( DotConverter::convert );
+auto DotConverterOneTapeDTM2 = registration::AbstractRegister < DotConverter, std::string, const automaton::OneTapeDTM < > & > ( DotConverter::convert );
+
 } /* namespace convert */
diff --git a/alib2aux/src/convert/DotConverter.h b/alib2aux/src/convert/DotConverter.h
index 294ea620e9..4aefe08ea0 100644
--- a/alib2aux/src/convert/DotConverter.h
+++ b/alib2aux/src/convert/DotConverter.h
@@ -166,6 +166,13 @@ public:
 
 	template < class SymbolType, class StateType >
 	static void convert(std::ostream& out, const automaton::OneTapeDTM < SymbolType, StateType > & a);
+
+	template < class T >
+	static std::string convert ( const T & automaton ) {
+		std::stringstream ss;
+		convert ( ss, automaton );
+		return ss.str ( );
+	}
 };
 
 template < class SymbolType, class EpsilonType, class StateType >
-- 
GitLab