From f25ae0be3d90978f454629177c71fabf0a434e84 Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Wed, 10 Jun 2015 10:34:30 +0200
Subject: [PATCH] simplify imports grammar

---
 acast2/src/cast/GrammarCastVisitor.cpp        |  2 ++
 alib2data/src/XmlApi.cpp                      |  1 +
 alib2data/src/grammar/ContextFree/CFG.cpp     |  1 +
 alib2data/src/grammar/ContextFree/CFG.h       |  1 -
 alib2data/src/grammar/ContextFree/CNF.cpp     |  1 +
 alib2data/src/grammar/ContextFree/CNF.h       |  1 -
 .../grammar/ContextFree/EpsilonFreeCFG.cpp    |  1 +
 .../src/grammar/ContextFree/EpsilonFreeCFG.h  |  1 -
 alib2data/src/grammar/ContextFree/GNF.cpp     |  1 +
 alib2data/src/grammar/ContextFree/GNF.h       |  1 -
 alib2data/src/grammar/ContextFree/LG.cpp      |  1 +
 alib2data/src/grammar/ContextFree/LG.h        |  1 -
 alib2data/src/grammar/Grammar.h               | 15 ++++++++--
 alib2data/src/grammar/GrammarClasses.h        | 28 +++++++++++++++++++
 alib2data/src/grammar/GrammarFeatures.h       | 16 +++++++++++
 .../src/grammar/GrammarFromStringLexer.cpp    |  1 -
 .../src/grammar/GrammarFromStringLexer.h      |  2 +-
 .../src/grammar/GrammarFromStringParser.cpp   | 17 +----------
 .../src/grammar/GrammarFromStringParser.h     |  1 -
 .../src/grammar/GrammarFromXMLParser.cpp      |  6 ++--
 alib2data/src/grammar/GrammarFromXMLParser.h  | 20 ++-----------
 .../src/grammar/GrammarToStringComposer.cpp   | 27 ++++++------------
 .../src/grammar/GrammarToStringComposer.h     |  6 +---
 .../src/grammar/GrammarToXMLComposer.cpp      |  3 +-
 alib2data/src/grammar/GrammarToXMLComposer.h  | 18 ++++--------
 alib2data/src/object/ObjectBase.h             | 19 +------------
 alib2data/test-src/grammar/GrammarTest.cpp    | 13 +++++++++
 27 files changed, 103 insertions(+), 102 deletions(-)
 create mode 100644 alib2data/src/grammar/GrammarClasses.h

diff --git a/acast2/src/cast/GrammarCastVisitor.cpp b/acast2/src/cast/GrammarCastVisitor.cpp
index 295ceb6d77..3b03a0d720 100644
--- a/acast2/src/cast/GrammarCastVisitor.cpp
+++ b/acast2/src/cast/GrammarCastVisitor.cpp
@@ -6,6 +6,8 @@
  */
 
 #include "GrammarCastVisitor.h"
+#include "grammar/GrammarClasses.h"
+
 #include "../CastVisitorBase.hpp"
 
 typedef cast_base_helper< grammar::VisitableGrammarBase::const_visitor_type, grammar::GrammarBase, alib::GrammarTypes, grammar::Grammar, alib::GrammarTypes > GrammarCastVisitorType;
diff --git a/alib2data/src/XmlApi.cpp b/alib2data/src/XmlApi.cpp
index 18409148ce..5c1f6c80dd 100644
--- a/alib2data/src/XmlApi.cpp
+++ b/alib2data/src/XmlApi.cpp
@@ -15,6 +15,7 @@
 #include "string/StringClasses.h"
 #include "automaton/AutomatonClasses.h"
 #include "container/ContainerClasses.h"
+#include "grammar/GrammarClasses.h"
 
 namespace alib {
 
diff --git a/alib2data/src/grammar/ContextFree/CFG.cpp b/alib2data/src/grammar/ContextFree/CFG.cpp
index 4944b190e1..7162f89776 100644
--- a/alib2data/src/grammar/ContextFree/CFG.cpp
+++ b/alib2data/src/grammar/ContextFree/CFG.cpp
@@ -8,6 +8,7 @@
 #include "CFG.h"
 #include "../GrammarException.h"
 #include <algorithm>
+#include <sstream>
 
 #include "../../alphabet/Symbol.h"
 
diff --git a/alib2data/src/grammar/ContextFree/CFG.h b/alib2data/src/grammar/ContextFree/CFG.h
index 61816d597d..55ee73ea94 100644
--- a/alib2data/src/grammar/ContextFree/CFG.h
+++ b/alib2data/src/grammar/ContextFree/CFG.h
@@ -11,7 +11,6 @@
 #include "../GrammarBase.h"
 #include <map>
 #include <vector>
-#include <sstream>
 #include "../common/TerminalNonterminalAlphabetInitialSymbol.h"
 
 namespace grammar {
diff --git a/alib2data/src/grammar/ContextFree/CNF.cpp b/alib2data/src/grammar/ContextFree/CNF.cpp
index 628a472912..875c4b960c 100644
--- a/alib2data/src/grammar/ContextFree/CNF.cpp
+++ b/alib2data/src/grammar/ContextFree/CNF.cpp
@@ -8,6 +8,7 @@
 #include "CNF.h"
 #include "../GrammarException.h"
 #include <algorithm>
+#include <sstream>
 
 #include "../../alphabet/Symbol.h"
 
diff --git a/alib2data/src/grammar/ContextFree/CNF.h b/alib2data/src/grammar/ContextFree/CNF.h
index 9c68f2bdf0..4911136566 100644
--- a/alib2data/src/grammar/ContextFree/CNF.h
+++ b/alib2data/src/grammar/ContextFree/CNF.h
@@ -11,7 +11,6 @@
 #include "../GrammarBase.h"
 #include <map>
 #include <vector>
-#include <sstream>
 #include <variant>
 #include "../common/TerminalNonterminalAlphabetInitialSymbol.h"
 
diff --git a/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.cpp b/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.cpp
index 9203549150..0df67d4f80 100644
--- a/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.cpp
+++ b/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.cpp
@@ -8,6 +8,7 @@
 #include "EpsilonFreeCFG.h"
 #include "../GrammarException.h"
 #include <algorithm>
+#include <sstream>
 
 #include "../../alphabet/Symbol.h"
 
diff --git a/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.h b/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.h
index 901f307ef2..8a7589b80d 100644
--- a/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.h
+++ b/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.h
@@ -11,7 +11,6 @@
 #include "../GrammarBase.h"
 #include <map>
 #include <vector>
-#include <sstream>
 #include "../common/TerminalNonterminalAlphabetInitialSymbol.h"
 
 namespace grammar {
diff --git a/alib2data/src/grammar/ContextFree/GNF.cpp b/alib2data/src/grammar/ContextFree/GNF.cpp
index fa63307907..ce821d8e23 100644
--- a/alib2data/src/grammar/ContextFree/GNF.cpp
+++ b/alib2data/src/grammar/ContextFree/GNF.cpp
@@ -8,6 +8,7 @@
 #include "GNF.h"
 #include "../GrammarException.h"
 #include <algorithm>
+#include <sstream>
 
 #include "../../alphabet/Symbol.h"
 
diff --git a/alib2data/src/grammar/ContextFree/GNF.h b/alib2data/src/grammar/ContextFree/GNF.h
index 3ecaf3607e..c693249bd9 100644
--- a/alib2data/src/grammar/ContextFree/GNF.h
+++ b/alib2data/src/grammar/ContextFree/GNF.h
@@ -11,7 +11,6 @@
 #include "../GrammarBase.h"
 #include <map>
 #include <vector>
-#include <sstream>
 #include "../common/TerminalNonterminalAlphabetInitialSymbol.h"
 
 namespace grammar {
diff --git a/alib2data/src/grammar/ContextFree/LG.cpp b/alib2data/src/grammar/ContextFree/LG.cpp
index 0e193a764e..e5ed22a382 100644
--- a/alib2data/src/grammar/ContextFree/LG.cpp
+++ b/alib2data/src/grammar/ContextFree/LG.cpp
@@ -8,6 +8,7 @@
 #include "LG.h"
 #include "../GrammarException.h"
 #include <algorithm>
+#include <sstream>
 
 #include "../../alphabet/Symbol.h"
 
diff --git a/alib2data/src/grammar/ContextFree/LG.h b/alib2data/src/grammar/ContextFree/LG.h
index 7b95823e1e..400426173e 100644
--- a/alib2data/src/grammar/ContextFree/LG.h
+++ b/alib2data/src/grammar/ContextFree/LG.h
@@ -12,7 +12,6 @@
 #include <map>
 #include <tuple>
 #include <vector>
-#include <sstream>
 #include <variant>
 #include "../common/TerminalNonterminalAlphabetInitialSymbol.h"
 
diff --git a/alib2data/src/grammar/Grammar.h b/alib2data/src/grammar/Grammar.h
index 4e26f7b034..bfdeecc943 100644
--- a/alib2data/src/grammar/Grammar.h
+++ b/alib2data/src/grammar/Grammar.h
@@ -14,9 +14,20 @@
 namespace grammar {
 
 /**
- * Wrapper around automata.
+ * Wrapper around grammars.
  */
-typedef alib::wrapper<GrammarBase> Grammar;
+class Grammar : public alib::wrapper<GrammarBase> {
+public:
+	explicit Grammar(GrammarBase* data) : alib::wrapper<GrammarBase>(data) {
+	}
+
+	explicit Grammar(const GrammarBase& data) : alib::wrapper<GrammarBase>(data.clone()) {
+	}
+
+	explicit Grammar(GrammarBase&& data) : alib::wrapper<GrammarBase>(std::move(data).plunder()) {
+	}
+
+};
 
 } /* namespace grammar */
 
diff --git a/alib2data/src/grammar/GrammarClasses.h b/alib2data/src/grammar/GrammarClasses.h
new file mode 100644
index 0000000000..06dd80e08f
--- /dev/null
+++ b/alib2data/src/grammar/GrammarClasses.h
@@ -0,0 +1,28 @@
+/*
+ * GrammarClasses.h
+ *
+ *  Created on: Jun 19, 2014
+ *      Author: Jan Travnicek
+ */
+
+#ifndef GRAMMAR_CLASSES_H_
+#define GRAMMAR_CLASSES_H_
+
+#include "Regular/RightRG.h"
+#include "Regular/LeftRG.h"
+#include "Regular/RightLG.h"
+#include "Regular/LeftLG.h"
+
+#include "ContextFree/LG.h"
+#include "ContextFree/CFG.h"
+#include "ContextFree/EpsilonFreeCFG.h"
+#include "ContextFree/GNF.h"
+#include "ContextFree/CNF.h"
+
+#include "ContextSensitive/CSG.h"
+#include "ContextSensitive/NonContractingGrammar.h"
+
+#include "Unrestricted/ContextPreservingUnrestrictedGrammar.h"
+#include "Unrestricted/UnrestrictedGrammar.h"
+
+#endif /* GRAMMAR_CLASSES_H_ */
diff --git a/alib2data/src/grammar/GrammarFeatures.h b/alib2data/src/grammar/GrammarFeatures.h
index 4387ca0793..4533db988b 100644
--- a/alib2data/src/grammar/GrammarFeatures.h
+++ b/alib2data/src/grammar/GrammarFeatures.h
@@ -26,6 +26,22 @@ enum class FEATURES {
 	UNRESTRICTED_GRAMMAR
 };
 
+class Grammar;
+
+class LeftLG;
+class LeftRG;
+class RightLG;
+class RightRG;
+class LG;
+class CFG;
+class EpsilonFreeCFG;
+class CNF;
+class GNF;
+class CSG;
+class NonContractingGrammar;
+class ContextPreservingUnrestrictedGrammar;
+class UnrestrictedGrammar;
+
 } /* namespace grammar */
 
 #endif /* GRAMMAR_FEATURES_H_ */
diff --git a/alib2data/src/grammar/GrammarFromStringLexer.cpp b/alib2data/src/grammar/GrammarFromStringLexer.cpp
index 23c22495e8..aa68a0f8f6 100644
--- a/alib2data/src/grammar/GrammarFromStringLexer.cpp
+++ b/alib2data/src/grammar/GrammarFromStringLexer.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "GrammarFromStringLexer.h"
-#include <istream>
 
 namespace grammar {
 
diff --git a/alib2data/src/grammar/GrammarFromStringLexer.h b/alib2data/src/grammar/GrammarFromStringLexer.h
index 6043b3353c..351ce84b9e 100644
--- a/alib2data/src/grammar/GrammarFromStringLexer.h
+++ b/alib2data/src/grammar/GrammarFromStringLexer.h
@@ -9,7 +9,7 @@
 #define GRAMMAR_FROM_STRING_LEXER_H_
 
 #include <string>
-#include <sstream>
+#include <istream>
 
 namespace grammar {
 
diff --git a/alib2data/src/grammar/GrammarFromStringParser.cpp b/alib2data/src/grammar/GrammarFromStringParser.cpp
index fd67483e42..78897a8fec 100644
--- a/alib2data/src/grammar/GrammarFromStringParser.cpp
+++ b/alib2data/src/grammar/GrammarFromStringParser.cpp
@@ -9,22 +9,7 @@
 
 #include "../exception/AlibException.h"
 
-#include "Regular/RightRG.h"
-#include "Regular/LeftRG.h"
-#include "Regular/RightLG.h"
-#include "Regular/LeftLG.h"
-
-#include "ContextFree/LG.h"
-#include "ContextFree/CFG.h"
-#include "ContextFree/EpsilonFreeCFG.h"
-#include "ContextFree/GNF.h"
-#include "ContextFree/CNF.h"
-
-#include "ContextSensitive/CSG.h"
-#include "ContextSensitive/NonContractingGrammar.h"
-
-#include "Unrestricted/ContextPreservingUnrestrictedGrammar.h"
-#include "Unrestricted/UnrestrictedGrammar.h"
+#include "GrammarClasses.h"
 
 #include "../StringApi.hpp"
 
diff --git a/alib2data/src/grammar/GrammarFromStringParser.h b/alib2data/src/grammar/GrammarFromStringParser.h
index dc070dfa3b..3c78e817d3 100644
--- a/alib2data/src/grammar/GrammarFromStringParser.h
+++ b/alib2data/src/grammar/GrammarFromStringParser.h
@@ -9,7 +9,6 @@
 #define GRAMMAR_FROM_STRING_PARSER_H_
 
 #include "GrammarFromStringLexer.h"
-#include "Grammar.h"
 #include "GrammarFeatures.h"
 #include "../alphabet/Symbol.h"
 #include <set>
diff --git a/alib2data/src/grammar/GrammarFromXMLParser.cpp b/alib2data/src/grammar/GrammarFromXMLParser.cpp
index 43849203e9..54214f11d3 100644
--- a/alib2data/src/grammar/GrammarFromXMLParser.cpp
+++ b/alib2data/src/grammar/GrammarFromXMLParser.cpp
@@ -6,12 +6,12 @@
  */
 
 #include "GrammarFromXMLParser.h"
-
 #include "../sax/ParserException.h"
-#include "../alphabet/LabeledSymbol.h"
-
 #include "../XmlApi.hpp"
 
+#include "Grammar.h"
+#include "GrammarClasses.h"
+
 namespace grammar {
 
 Grammar GrammarFromXMLParser::parseGrammar(std::deque<sax::Token>::iterator& input) const {
diff --git a/alib2data/src/grammar/GrammarFromXMLParser.h b/alib2data/src/grammar/GrammarFromXMLParser.h
index 23527cb9d2..30eb28e887 100644
--- a/alib2data/src/grammar/GrammarFromXMLParser.h
+++ b/alib2data/src/grammar/GrammarFromXMLParser.h
@@ -9,26 +9,12 @@
 #define GRAMMAR_FROM_XML_PARSER_H_
 
 #include "../sax/FromXMLParserHelper.h"
-#include "Grammar.h"
-#include "GrammarFeatures.h"
-#include "Regular/LeftLG.h"
-#include "Regular/LeftRG.h"
-#include "Regular/RightLG.h"
-#include "Regular/RightRG.h"
-#include "ContextFree/LG.h"
-#include "ContextFree/CFG.h"
-#include "ContextFree/EpsilonFreeCFG.h"
-#include "ContextFree/CNF.h"
-#include "ContextFree/GNF.h"
-#include "ContextSensitive/CSG.h"
-#include "ContextSensitive/NonContractingGrammar.h"
-#include "Unrestricted/ContextPreservingUnrestrictedGrammar.h"
-#include "Unrestricted/UnrestrictedGrammar.h"
-
 #include <deque>
 #include <set>
 #include <variant>
-#include "../sax/Token.h"
+#include <vector>
+#include "GrammarFeatures.h"
+#include "../alphabet/Symbol.h"
 
 namespace alib {
 
diff --git a/alib2data/src/grammar/GrammarToStringComposer.cpp b/alib2data/src/grammar/GrammarToStringComposer.cpp
index f106f61f4d..3f4bbaa0ae 100644
--- a/alib2data/src/grammar/GrammarToStringComposer.cpp
+++ b/alib2data/src/grammar/GrammarToStringComposer.cpp
@@ -1,23 +1,12 @@
-#include "GrammarToStringComposer.h"
-#include <sstream>
-
-#include "Regular/RightRG.h"
-#include "Regular/RightLG.h"
-#include "Regular/LeftRG.h"
-#include "Regular/LeftLG.h"
-
-#include "ContextFree/CFG.h"
-#include "ContextFree/EpsilonFreeCFG.h"
-#include "ContextFree/LG.h"
-#include "ContextFree/CNF.h"
-#include "ContextFree/GNF.h"
-
-#include "ContextSensitive/CSG.h"
-#include "ContextSensitive/NonContractingGrammar.h"
-
-#include "Unrestricted/ContextPreservingUnrestrictedGrammar.h"
-#include "Unrestricted/UnrestrictedGrammar.h"
+/*
+ * GrammarToStringComposer.cpp
+ *
+ *  Created on: Nov 23, 2013
+ *      Author: Jan Travnicek
+ */
 
+#include "GrammarToStringComposer.h"
+#include "GrammarClasses.h"
 #include "../StringApi.hpp"
 
 namespace grammar {
diff --git a/alib2data/src/grammar/GrammarToStringComposer.h b/alib2data/src/grammar/GrammarToStringComposer.h
index 5c092076d4..ad353fe16a 100644
--- a/alib2data/src/grammar/GrammarToStringComposer.h
+++ b/alib2data/src/grammar/GrammarToStringComposer.h
@@ -1,13 +1,9 @@
 #ifndef GRAMMAR_TO_STRING_COMPOSER_H_
 #define GRAMMAR_TO_STRING_COMPOSER_H_
 
-#include <iostream>
+#include <ostream>
 #include "Grammar.h"
 
-#include <map>
-#include <list>
-#include <set>
-
 namespace grammar {
 
 class GrammarToStringComposer : public VisitableGrammarBase::const_visitor_type {
diff --git a/alib2data/src/grammar/GrammarToXMLComposer.cpp b/alib2data/src/grammar/GrammarToXMLComposer.cpp
index 0cde5b137d..7785030f4e 100644
--- a/alib2data/src/grammar/GrammarToXMLComposer.cpp
+++ b/alib2data/src/grammar/GrammarToXMLComposer.cpp
@@ -6,10 +6,11 @@
  */
 
 #include "GrammarToXMLComposer.h"
-#include "../alphabet/BlankSymbol.h"
 
 #include "../XmlApi.hpp"
 
+#include "GrammarClasses.h"
+
 namespace grammar {
 
 void GrammarToXMLComposer::compose(std::deque<sax::Token>& out, const GrammarBase& grammar) const {
diff --git a/alib2data/src/grammar/GrammarToXMLComposer.h b/alib2data/src/grammar/GrammarToXMLComposer.h
index 6481191f08..b48f971fe5 100644
--- a/alib2data/src/grammar/GrammarToXMLComposer.h
+++ b/alib2data/src/grammar/GrammarToXMLComposer.h
@@ -10,20 +10,12 @@
 
 #include <string>
 #include <deque>
+#include <vector>
+#include <tuple>
+#include <map>
+#include <set>
+#include <variant>
 #include "Grammar.h"
-#include "Regular/LeftLG.h"
-#include "Regular/LeftRG.h"
-#include "Regular/RightLG.h"
-#include "Regular/RightRG.h"
-#include "ContextFree/LG.h"
-#include "ContextFree/CFG.h"
-#include "ContextFree/EpsilonFreeCFG.h"
-#include "ContextFree/CNF.h"
-#include "ContextFree/GNF.h"
-#include "ContextSensitive/CSG.h"
-#include "ContextSensitive/NonContractingGrammar.h"
-#include "Unrestricted/ContextPreservingUnrestrictedGrammar.h"
-#include "Unrestricted/UnrestrictedGrammar.h"
 #include "../sax/Token.h"
 
 namespace alib {
diff --git a/alib2data/src/object/ObjectBase.h b/alib2data/src/object/ObjectBase.h
index f700b5bcd0..24ca799a4f 100644
--- a/alib2data/src/object/ObjectBase.h
+++ b/alib2data/src/object/ObjectBase.h
@@ -18,24 +18,7 @@
 #include "ObjectFeatures.h"
 #include "../exception/ExceptionFeatures.h"
 #include "../automaton/AutomatonFeatures.h"
-
-namespace grammar {
-
-class LeftLG;
-class LeftRG;
-class RightLG;
-class RightRG;
-class LG;
-class CFG;
-class EpsilonFreeCFG;
-class CNF;
-class GNF;
-class CSG;
-class NonContractingGrammar;
-class ContextPreservingUnrestrictedGrammar;
-class UnrestrictedGrammar;
-
-}
+#include "../grammar/GrammarFeatures.h"
 
 namespace graph {
 
diff --git a/alib2data/test-src/grammar/GrammarTest.cpp b/alib2data/test-src/grammar/GrammarTest.cpp
index a905842685..4fec2c3b82 100644
--- a/alib2data/test-src/grammar/GrammarTest.cpp
+++ b/alib2data/test-src/grammar/GrammarTest.cpp
@@ -5,6 +5,19 @@
 #include "sax/SaxComposeInterface.h"
 
 #include "grammar/Unrestricted/UnrestrictedGrammar.h"
+#include "grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.h"
+
+#include "grammar/Regular/RightRG.h"
+#include "grammar/Regular/RightLG.h"
+
+#include "grammar/ContextFree/LG.h"
+#include "grammar/ContextFree/EpsilonFreeCFG.h"
+#include "grammar/ContextFree/CFG.h"
+#include "grammar/ContextFree/CNF.h"
+#include "grammar/ContextFree/GNF.h"
+
+#include "grammar/ContextSensitive/CSG.h"
+#include "grammar/ContextSensitive/NonContractingGrammar.h"
 
 #include "factory/XmlDataFactory.hpp"
 #include "factory/StringDataFactory.hpp"
-- 
GitLab