diff --git a/alib2aux/makefile.conf b/alib2aux/makefile.conf index eb240b3b0d7a608575b144226dbc5609b5ce5973..e5274b859eaabc8fae585e82ddc9fd971f1f5e4d 100644 --- a/alib2aux/makefile.conf +++ b/alib2aux/makefile.conf @@ -1,7 +1,7 @@ LIBRARY:=alib2aux TESTBIN:=alib2test -LINK_LIBRARIES=alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std +LINK_LIBRARIES=alib2str alib2graph_data alib2data alib2xml alib2common alib2abstraction alib2measure alib2std SYSTEM_LIBRARIES=xml2 SYSTEM_INCLUDE_PATHS=/usr/include/libxml2 TEST_LINK_LIBRARIES= diff --git a/alib2aux/src/convert/TikZConverter.cpp b/alib2aux/src/convert/TikZConverter.cpp index cd2b0b3aea0e1a4853aa11adc137454111a6c44c..ad3e5060415a5f6fb75ff7def6ab345f376819b5 100644 --- a/alib2aux/src/convert/TikZConverter.cpp +++ b/alib2aux/src/convert/TikZConverter.cpp @@ -10,24 +10,70 @@ namespace convert { -auto TikZConverterEpsilonNFA = registration::AbstractRegister < TikZConverter, std::string, const automaton::EpsilonNFA < > & > ( TikZConverter::convert ); -auto TikZConverterMultiInitialStateNFA = registration::AbstractRegister < TikZConverter, std::string, const automaton::MultiInitialStateNFA < > & > ( TikZConverter::convert ); -auto TikZConverterNFA = registration::AbstractRegister < TikZConverter, std::string, const automaton::NFA < > & > ( TikZConverter::convert ); -auto TikZConverterDFA = registration::AbstractRegister < TikZConverter, std::string, const automaton::DFA < > & > ( TikZConverter::convert ); -auto TikZConverterExtendedNFA = registration::AbstractRegister < TikZConverter, std::string, const automaton::ExtendedNFA < > & > ( TikZConverter::convert ); -auto TikZConverterCompactNFA = registration::AbstractRegister < TikZConverter, std::string, const automaton::CompactNFA < > & > ( TikZConverter::convert ); -auto TikZConverterNFTA = registration::AbstractRegister < TikZConverter, std::string, const automaton::NFTA < > & > ( TikZConverter::convert ); -auto TikZConverterDFTA = registration::AbstractRegister < TikZConverter, std::string, const automaton::DFTA < > & > ( TikZConverter::convert ); -auto TikZConverterDPDA = registration::AbstractRegister < TikZConverter, std::string, const automaton::DPDA < > & > ( TikZConverter::convert ); -auto TikZConverterSinglePopDPDA = registration::AbstractRegister < TikZConverter, std::string, const automaton::SinglePopDPDA < > & > ( TikZConverter::convert ); -auto TikZConverterInputDrivenDPDA = registration::AbstractRegister < TikZConverter, std::string, const automaton::InputDrivenDPDA < > & > ( TikZConverter::convert ); -auto TikZConverterInputDrivenNPDA = registration::AbstractRegister < TikZConverter, std::string, const automaton::InputDrivenNPDA < > & > ( TikZConverter::convert ); -auto TikZConverterVisiblyPushdownDPDA = registration::AbstractRegister < TikZConverter, std::string, const automaton::VisiblyPushdownDPDA < > & > ( TikZConverter::convert ); -auto TikZConverterVisiblyPushdownNPDA = registration::AbstractRegister < TikZConverter, std::string, const automaton::VisiblyPushdownNPDA < > & > ( TikZConverter::convert ); -auto TikZConverterRealTimeHeightDeterministicDPDA = registration::AbstractRegister < TikZConverter, std::string, const automaton::RealTimeHeightDeterministicDPDA < > & > ( TikZConverter::convert ); -auto TikZConverterRealTimeHeightDeterministicNPDA = registration::AbstractRegister < TikZConverter, std::string, const automaton::RealTimeHeightDeterministicNPDA < > & > ( TikZConverter::convert ); -auto TikZConverterNPDA = registration::AbstractRegister < TikZConverter, std::string, const automaton::NPDA < > & > ( TikZConverter::convert ); -auto TikZConverterSinglePopNPDA = registration::AbstractRegister < TikZConverter, std::string, const automaton::SinglePopNPDA < > & > ( TikZConverter::convert ); -auto TikZConverterOneTapeDTM = registration::AbstractRegister < TikZConverter, std::string, const automaton::OneTapeDTM < > & > ( TikZConverter::convert ); +auto TikZConverterEpsilonNFA = + registration::AbstractRegister<TikZConverter, std::string, const automaton::EpsilonNFA<> &>(TikZConverter::convert); +auto TikZConverterMultiInitialStateNFA = registration::AbstractRegister<TikZConverter, + std::string, + const automaton::MultiInitialStateNFA<> &>( + TikZConverter::convert); +auto TikZConverterNFA = + registration::AbstractRegister<TikZConverter, std::string, const automaton::NFA<> &>(TikZConverter::convert); +auto TikZConverterDFA = + registration::AbstractRegister<TikZConverter, std::string, const automaton::DFA<> &>(TikZConverter::convert); +auto TikZConverterExtendedNFA = registration::AbstractRegister<TikZConverter, + std::string, + const automaton::ExtendedNFA<> &>(TikZConverter::convert); +auto TikZConverterCompactNFA = + registration::AbstractRegister<TikZConverter, std::string, const automaton::CompactNFA<> &>(TikZConverter::convert); +auto TikZConverterNFTA = + registration::AbstractRegister<TikZConverter, std::string, const automaton::NFTA<> &>(TikZConverter::convert); +auto TikZConverterDFTA = + registration::AbstractRegister<TikZConverter, std::string, const automaton::DFTA<> &>(TikZConverter::convert); +auto TikZConverterDPDA = + registration::AbstractRegister<TikZConverter, std::string, const automaton::DPDA<> &>(TikZConverter::convert); +auto TikZConverterSinglePopDPDA = registration::AbstractRegister<TikZConverter, + std::string, + const automaton::SinglePopDPDA<> &>(TikZConverter::convert); +auto TikZConverterInputDrivenDPDA = registration::AbstractRegister<TikZConverter, + std::string, + const automaton::InputDrivenDPDA<> &>(TikZConverter::convert); +auto TikZConverterInputDrivenNPDA = registration::AbstractRegister<TikZConverter, + std::string, + const automaton::InputDrivenNPDA<> &>(TikZConverter::convert); +auto TikZConverterVisiblyPushdownDPDA = registration::AbstractRegister<TikZConverter, + std::string, + const automaton::VisiblyPushdownDPDA<> &>( + TikZConverter::convert); +auto TikZConverterVisiblyPushdownNPDA = registration::AbstractRegister<TikZConverter, + std::string, + const automaton::VisiblyPushdownNPDA<> &>( + TikZConverter::convert); +auto TikZConverterRealTimeHeightDeterministicDPDA = + registration::AbstractRegister<TikZConverter, std::string, const automaton::RealTimeHeightDeterministicDPDA<> &>( + TikZConverter::convert); +auto TikZConverterRealTimeHeightDeterministicNPDA = + registration::AbstractRegister<TikZConverter, std::string, const automaton::RealTimeHeightDeterministicNPDA<> &>( + TikZConverter::convert); +auto TikZConverterNPDA = + registration::AbstractRegister<TikZConverter, std::string, const automaton::NPDA<> &>(TikZConverter::convert); +auto TikZConverterSinglePopNPDA = registration::AbstractRegister<TikZConverter, + std::string, + const automaton::SinglePopNPDA<> &>(TikZConverter::convert); +auto TikZConverterOneTapeDTM = + registration::AbstractRegister<TikZConverter, std::string, const automaton::OneTapeDTM<> &>(TikZConverter::convert); +auto TikZConverterSquareGrid4 = registration::AbstractRegister<TikZConverter, + std::string, + const grid::SquareGrid4<> &>(TikZConverter::convert); +auto TikZConverterSquareGrid8 = registration::AbstractRegister<TikZConverter, + std::string, + const grid::SquareGrid8<> &>(TikZConverter::convert); +auto TikZConverterWeightedSquareGrid4 = registration::AbstractRegister<TikZConverter, + std::string, + const grid::WeightedSquareGrid4<> &>( + TikZConverter::convert); +auto TikZConverterWeightedSquareGrid8 = registration::AbstractRegister<TikZConverter, + std::string, + const grid::WeightedSquareGrid8<> &>( + TikZConverter::convert); } /* namespace convert */ diff --git a/alib2aux/src/convert/TikZConverter.h b/alib2aux/src/convert/TikZConverter.h index bd33c776bd26be71c7f0b604cbd03106251eabab..549434f6d3bd3033dde3fc2eff9a46a9aeef6e76 100644 --- a/alib2aux/src/convert/TikZConverter.h +++ b/alib2aux/src/convert/TikZConverter.h @@ -38,6 +38,7 @@ #include <automaton/PDA/DPDA.h> #include <automaton/PDA/SinglePopDPDA.h> #include <automaton/TM/OneTapeDTM.h> +#include <grid/GridClasses.hpp> #include <factory/StringDataFactory.hpp> @@ -104,6 +105,10 @@ class TikZConverter { template < class SymbolType, class StateType > static void transitions(const automaton::OneTapeDTM < SymbolType, StateType > & tm, const ext::map < StateType, int > & states, std::ostream & out); + + template<typename TGrid> + static void grid(std::ostream &out, const TGrid &a); + public: template < class SymbolType, class StateType > static void convert(std::ostream& out, const automaton::DFA < SymbolType, StateType > & a); @@ -162,6 +167,26 @@ public: template < class SymbolType, class StateType > static void convert(std::ostream& out, const automaton::OneTapeDTM < SymbolType, StateType > & a); + template<typename TCoordinate, typename TEdge> + static void convert(std::ostream &out, const grid::SquareGrid4<TCoordinate, TEdge> &a) { + return grid(out, a); + } + + template<typename TCoordinate, typename TEdge> + static void convert(std::ostream &out, const grid::SquareGrid8<TCoordinate, TEdge> &a) { + return grid(out, a); + } + + template<typename TCoordinate, typename TEdge> + static void convert(std::ostream &out, const grid::WeightedSquareGrid4<TCoordinate, TEdge> &a) { + return grid(out, a); + } + + template<typename TCoordinate, typename TEdge> + static void convert(std::ostream &out, const grid::WeightedSquareGrid8<TCoordinate, TEdge> &a) { + return grid(out, a); + } + template < class T > static std::string convert ( const T & automaton ) { std::stringstream ss; @@ -2088,6 +2113,24 @@ void TikZConverter::transitions ( const automaton::OneTapeDTM < SymbolType, Stat } } +template<typename TGrid> +void TikZConverter::grid(std::ostream &out, const TGrid &a) { + out << "\\begin{tikzpicture}[ultra thin/.style= {line width=0.1pt}]\n"; + long width = a.getWidth(); + long height = a.getHeight(); + + out << "\t\\draw[step=1cm, gray,very thin] (0,0) grid (" << width << "," << height << ");\n"; + + for (const auto &node : a.getObstacleList()) { + out << "\t\\fill[draw=gray, fill=black, very thin] (" + << node.second << "," << height - node.first - 1 + << ") rectangle (" + << node.second + 1 << "," << height - node.first << ");\n"; + } + + out << "\\end{tikzpicture}\n"; +} + } /* namespace convert */ #endif /* TIKZ_CONVERTER_H_ */