From a0b07a8086c2a20f6fc24f488f48996b6e0bad85 Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Tue, 9 Jun 2015 22:13:52 +0200
Subject: [PATCH] simplify includes in automata

---
 alib2data/src/XmlApi.cpp                      | 20 ++++++++++++
 alib2data/src/automaton/Automaton.cpp         |  1 -
 alib2data/src/automaton/Automaton.h           | 14 +++++++--
 alib2data/src/automaton/AutomatonClasses.h    | 31 +++++++++++++++++++
 alib2data/src/automaton/AutomatonFeatures.h   | 22 +++++++++++++
 .../automaton/AutomatonFromStringLexer.cpp    |  1 -
 .../src/automaton/AutomatonFromStringLexer.h  |  2 +-
 .../src/automaton/AutomatonFromStringParser.h |  1 -
 .../src/automaton/AutomatonFromXMLParser.cpp  |  7 ++---
 .../src/automaton/AutomatonFromXMLParser.h    | 30 ++++--------------
 .../automaton/AutomatonToStringComposer.cpp   |  4 +++
 .../src/automaton/AutomatonToStringComposer.h |  4 ---
 .../src/automaton/AutomatonToXMLComposer.cpp  |  3 +-
 .../src/automaton/AutomatonToXMLComposer.h    | 22 ++++---------
 alib2data/src/object/ObjectBase.h             | 25 +--------------
 15 files changed, 108 insertions(+), 79 deletions(-)
 create mode 100644 alib2data/src/automaton/AutomatonClasses.h

diff --git a/alib2data/src/XmlApi.cpp b/alib2data/src/XmlApi.cpp
index efe35c7289..effa2b099a 100644
--- a/alib2data/src/XmlApi.cpp
+++ b/alib2data/src/XmlApi.cpp
@@ -41,6 +41,26 @@
 #include "string/LinearString.h"
 #include "string/Epsilon.h"
 
+#include "automaton/FSM/EpsilonNFA.h"
+#include "automaton/FSM/NFA.h"
+#include "automaton/FSM/MultiInitialStateNFA.h"
+#include "automaton/FSM/DFA.h"
+#include "automaton/FSM/CompactNFA.h"
+#include "automaton/FSM/ExtendedNFA.h"
+#include "automaton/PDA/DPDA.h"
+#include "automaton/PDA/SinglePopDPDA.h"
+#include "automaton/PDA/InputDrivenDPDA.h"
+#include "automaton/PDA/InputDrivenNPDA.h"
+#include "automaton/PDA/VisiblyPushdownDPDA.h"
+#include "automaton/PDA/VisiblyPushdownNPDA.h"
+#include "automaton/PDA/RealTimeHeightDeterministicDPDA.h"
+#include "automaton/PDA/RealTimeHeightDeterministicNPDA.h"
+#include "automaton/PDA/NPDA.h"
+#include "automaton/PDA/SinglePopNPDA.h"
+#include "automaton/TM/OneTapeDTM.h"
+#include "automaton/TA/DFTA.h"
+#include "automaton/TA/NFTA.h"
+
 namespace alib {
 
 const label::LabelFromXMLParser FromXMLParsers::labelParser;
diff --git a/alib2data/src/automaton/Automaton.cpp b/alib2data/src/automaton/Automaton.cpp
index 69604ea713..005b22ebb7 100644
--- a/alib2data/src/automaton/Automaton.cpp
+++ b/alib2data/src/automaton/Automaton.cpp
@@ -7,7 +7,6 @@
 
 #include "Automaton.h"
 #include "../label/NextLabel.h"
-#include "../label/Label.h"
 #include <climits>
 #include "AutomatonException.h"
 
diff --git a/alib2data/src/automaton/Automaton.h b/alib2data/src/automaton/Automaton.h
index c34cde4f56..e48e3c5a55 100644
--- a/alib2data/src/automaton/Automaton.h
+++ b/alib2data/src/automaton/Automaton.h
@@ -13,14 +13,24 @@
 
 #include "common/State.h"
 #include <set>
-#include <string>
 
 namespace automaton {
 
 /**
  * Wrapper around automata.
  */
-typedef alib::wrapper<AutomatonBase> Automaton;
+class Automaton : public alib::wrapper<AutomatonBase> {
+public:
+	explicit Automaton(AutomatonBase* data) : alib::wrapper<AutomatonBase>(data) {
+	}
+
+	explicit Automaton(const AutomatonBase& data) : alib::wrapper<AutomatonBase>(data.clone()) {
+	}
+
+	explicit Automaton(AutomatonBase&& data) : alib::wrapper<AutomatonBase>(std::move(data).plunder()) {
+	}
+
+};
 
 State createUniqueState(State base, const std::set<State>& other);
 
diff --git a/alib2data/src/automaton/AutomatonClasses.h b/alib2data/src/automaton/AutomatonClasses.h
new file mode 100644
index 0000000000..064b6d8ba7
--- /dev/null
+++ b/alib2data/src/automaton/AutomatonClasses.h
@@ -0,0 +1,31 @@
+/*
+ * AutomatonClasses.h
+ *
+ *  Created on: Jun 19, 2014
+ *      Author: Jan Travnicek
+ */
+
+#ifndef AUTOMATON_CLASSES_H_
+#define AUTOMATON_CLASSES_H_
+
+#include "FSM/EpsilonNFA.h"
+#include "FSM/NFA.h"
+#include "FSM/MultiInitialStateNFA.h"
+#include "FSM/DFA.h"
+#include "FSM/CompactNFA.h"
+#include "FSM/ExtendedNFA.h"
+#include "PDA/DPDA.h"
+#include "PDA/SinglePopDPDA.h"
+#include "PDA/InputDrivenDPDA.h"
+#include "PDA/InputDrivenNPDA.h"
+#include "PDA/VisiblyPushdownDPDA.h"
+#include "PDA/VisiblyPushdownNPDA.h"
+#include "PDA/RealTimeHeightDeterministicDPDA.h"
+#include "PDA/RealTimeHeightDeterministicNPDA.h"
+#include "PDA/NPDA.h"
+#include "PDA/SinglePopNPDA.h"
+#include "TM/OneTapeDTM.h"
+#include "TA/DFTA.h"
+#include "TA/NFTA.h"
+
+#endif /* AUTOMATON_CLASSES_H_ */
diff --git a/alib2data/src/automaton/AutomatonFeatures.h b/alib2data/src/automaton/AutomatonFeatures.h
index c695337eae..2981c4bf32 100644
--- a/alib2data/src/automaton/AutomatonFeatures.h
+++ b/alib2data/src/automaton/AutomatonFeatures.h
@@ -32,6 +32,28 @@ enum class FEATURES {
 	NFTA
 };
 
+class Automaton;
+
+class EpsilonNFA;
+class NFA;
+class MultiInitialStateNFA;
+class DFA;
+class CompactNFA;
+class ExtendedNFA;
+class DPDA;
+class SinglePopDPDA;
+class InputDrivenDPDA;
+class InputDrivenNPDA;
+class VisiblyPushdownDPDA;
+class VisiblyPushdownNPDA;
+class RealTimeHeightDeterministicDPDA;
+class RealTimeHeightDeterministicNPDA;
+class NPDA;
+class SinglePopNPDA;
+class OneTapeDTM;
+class DFTA;
+class NFTA;
+
 } /* namespace automaton */
 
 #endif /* AUTOMATON_FEATURES_H_ */
diff --git a/alib2data/src/automaton/AutomatonFromStringLexer.cpp b/alib2data/src/automaton/AutomatonFromStringLexer.cpp
index 974028c2b0..083032151b 100644
--- a/alib2data/src/automaton/AutomatonFromStringLexer.cpp
+++ b/alib2data/src/automaton/AutomatonFromStringLexer.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "AutomatonFromStringLexer.h"
-#include <istream>
 
 namespace automaton {
 
diff --git a/alib2data/src/automaton/AutomatonFromStringLexer.h b/alib2data/src/automaton/AutomatonFromStringLexer.h
index 32f14d4bb2..a4416fab65 100644
--- a/alib2data/src/automaton/AutomatonFromStringLexer.h
+++ b/alib2data/src/automaton/AutomatonFromStringLexer.h
@@ -9,7 +9,7 @@
 #define AUTOMATON_FROM_STRING_LEXER_H_
 
 #include <string>
-#include <sstream>
+#include <istream>
 
 namespace automaton {
 
diff --git a/alib2data/src/automaton/AutomatonFromStringParser.h b/alib2data/src/automaton/AutomatonFromStringParser.h
index a58e5a913b..7a6fbb5a58 100644
--- a/alib2data/src/automaton/AutomatonFromStringParser.h
+++ b/alib2data/src/automaton/AutomatonFromStringParser.h
@@ -10,7 +10,6 @@
 
 #include "AutomatonFromStringLexer.h"
 
-#include "Automaton.h"
 #include "AutomatonFeatures.h"
 #include "common/State.h"
 
diff --git a/alib2data/src/automaton/AutomatonFromXMLParser.cpp b/alib2data/src/automaton/AutomatonFromXMLParser.cpp
index 7ccea32d87..6005709e06 100644
--- a/alib2data/src/automaton/AutomatonFromXMLParser.cpp
+++ b/alib2data/src/automaton/AutomatonFromXMLParser.cpp
@@ -6,13 +6,12 @@
  */
 
 #include "AutomatonFromXMLParser.h"
-
 #include "../sax/ParserException.h"
-#include "../alphabet/BlankSymbol.h"
-#include "../label/Label.h"
-
 #include "../XmlApi.hpp"
 
+#include "Automaton.h"
+#include "AutomatonClasses.h"
+
 namespace automaton {
 
 Automaton AutomatonFromXMLParser::parseAutomaton(std::deque<sax::Token>::iterator& input) const {
diff --git a/alib2data/src/automaton/AutomatonFromXMLParser.h b/alib2data/src/automaton/AutomatonFromXMLParser.h
index ab036ce265..f625ba9d9b 100644
--- a/alib2data/src/automaton/AutomatonFromXMLParser.h
+++ b/alib2data/src/automaton/AutomatonFromXMLParser.h
@@ -9,32 +9,14 @@
 #define AUTOMATON_FROM_XML_PARSER_H_
 
 #include "../sax/FromXMLParserHelper.h"
-#include "Automaton.h"
-#include "AutomatonFeatures.h"
-#include "FSM/EpsilonNFA.h"
-#include "FSM/NFA.h"
-#include "FSM/MultiInitialStateNFA.h"
-#include "FSM/DFA.h"
-#include "FSM/CompactNFA.h"
-#include "FSM/ExtendedNFA.h"
-#include "PDA/DPDA.h"
-#include "PDA/SinglePopDPDA.h"
-#include "PDA/InputDrivenDPDA.h"
-#include "PDA/InputDrivenNPDA.h"
-#include "PDA/VisiblyPushdownDPDA.h"
-#include "PDA/VisiblyPushdownNPDA.h"
-#include "PDA/RealTimeHeightDeterministicDPDA.h"
-#include "PDA/RealTimeHeightDeterministicNPDA.h"
-#include "PDA/NPDA.h"
-#include "PDA/SinglePopNPDA.h"
-#include "TM/OneTapeDTM.h"
-#include "TA/DFTA.h"
-#include "TA/NFTA.h"
-
-#include <deque>
 #include <set>
+#include <vector>
 #include <variant>
-#include "../sax/Token.h"
+#include "AutomatonFeatures.h"
+
+#include "common/State.h"
+#include "common/Shift.h"
+#include "../regexp/RegExp.h"
 
 namespace alib {
 
diff --git a/alib2data/src/automaton/AutomatonToStringComposer.cpp b/alib2data/src/automaton/AutomatonToStringComposer.cpp
index 2023d4cd6e..a662bcb6d3 100644
--- a/alib2data/src/automaton/AutomatonToStringComposer.cpp
+++ b/alib2data/src/automaton/AutomatonToStringComposer.cpp
@@ -7,6 +7,10 @@
 
 #include "AutomatonToStringComposer.h"
 #include "../exception/AlibException.h"
+#include "FSM/DFA.h"
+#include "FSM/NFA.h"
+#include "FSM/MultiInitialStateNFA.h"
+#include "FSM/EpsilonNFA.h"
 
 #include "../StringApi.hpp"
 
diff --git a/alib2data/src/automaton/AutomatonToStringComposer.h b/alib2data/src/automaton/AutomatonToStringComposer.h
index ef21995297..2aa049527f 100644
--- a/alib2data/src/automaton/AutomatonToStringComposer.h
+++ b/alib2data/src/automaton/AutomatonToStringComposer.h
@@ -10,10 +10,6 @@
 
 #include <ostream>
 #include "Automaton.h"
-#include "FSM/DFA.h"
-#include "FSM/NFA.h"
-#include "FSM/MultiInitialStateNFA.h"
-#include "FSM/EpsilonNFA.h"
 
 namespace automaton {
 
diff --git a/alib2data/src/automaton/AutomatonToXMLComposer.cpp b/alib2data/src/automaton/AutomatonToXMLComposer.cpp
index 2030103543..af9978167d 100644
--- a/alib2data/src/automaton/AutomatonToXMLComposer.cpp
+++ b/alib2data/src/automaton/AutomatonToXMLComposer.cpp
@@ -6,10 +6,11 @@
  */
 
 #include "AutomatonToXMLComposer.h"
-#include "../alphabet/BlankSymbol.h"
 
 #include "../XmlApi.hpp"
 
+#include "AutomatonClasses.h"
+
 namespace automaton {
 
 void AutomatonToXMLComposer::composeStates(std::deque<sax::Token>& out, const std::set<State>& states) const {
diff --git a/alib2data/src/automaton/AutomatonToXMLComposer.h b/alib2data/src/automaton/AutomatonToXMLComposer.h
index a3f94727dc..39ce199a2b 100644
--- a/alib2data/src/automaton/AutomatonToXMLComposer.h
+++ b/alib2data/src/automaton/AutomatonToXMLComposer.h
@@ -10,25 +10,15 @@
 
 #include <string>
 #include <deque>
+#include <vector>
+#include <set>
+#include <variant>
 #include "Automaton.h"
-#include "FSM/EpsilonNFA.h"
-#include "FSM/MultiInitialStateNFA.h"
-#include "FSM/NFA.h"
-#include "FSM/DFA.h"
-#include "FSM/CompactNFA.h"
-#include "FSM/ExtendedNFA.h"
-#include "PDA/InputDrivenDPDA.h"
-#include "PDA/InputDrivenNPDA.h"
-#include "PDA/VisiblyPushdownDPDA.h"
-#include "PDA/VisiblyPushdownNPDA.h"
-#include "PDA/RealTimeHeightDeterministicDPDA.h"
-#include "PDA/RealTimeHeightDeterministicNPDA.h"
-#include "PDA/NPDA.h"
-#include "PDA/SinglePopNPDA.h"
-#include "TM/OneTapeDTM.h"
-#include "TA/NFTA.h"
 #include "../sax/Token.h"
 
+#include "common/Shift.h"
+#include "../regexp/RegExp.h"
+
 namespace alib {
 
 template<typename T>
diff --git a/alib2data/src/object/ObjectBase.h b/alib2data/src/object/ObjectBase.h
index bcc057c1fc..85cbe3c850 100644
--- a/alib2data/src/object/ObjectBase.h
+++ b/alib2data/src/object/ObjectBase.h
@@ -17,30 +17,7 @@
 
 #include "ObjectFeatures.h"
 #include "../exception/ExceptionFeatures.h"
-
-namespace automaton {
-
-class DFA;
-class NFA;
-class MultiInitialStateNFA;
-class EpsilonNFA;
-class CompactNFA;
-class ExtendedNFA;
-class DPDA;
-class SinglePopDPDA;
-class InputDrivenDPDA;
-class VisiblyPushdownDPDA;
-class RealTimeHeightDeterministicDPDA;
-class NPDA;
-class SinglePopNPDA;
-class InputDrivenNPDA;
-class VisiblyPushdownNPDA;
-class RealTimeHeightDeterministicNPDA;
-class OneTapeDTM;
-class DFTA;
-class NFTA;
-
-}
+#include "../automaton/AutomatonFeatures.h"
 
 namespace grammar {
 
-- 
GitLab