From 1632e68a88468c628833b41504507c7e43ce96e6 Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Wed, 10 Jun 2015 21:06:12 +0200
Subject: [PATCH] simplify includes in trees

---
 acast2/src/cast/TreeCastVisitor.cpp         |  2 ++
 acast2/src/cast/TreeToStringCastVisitor.cpp |  1 +
 alib2data/src/XmlApi.cpp                    |  1 +
 alib2data/src/object/ObjectBase.h           | 15 ++------------
 alib2data/src/tree/Tree.h                   | 13 +++++++++++-
 alib2data/src/tree/TreeBase.h               |  2 --
 alib2data/src/tree/TreeClasses.h            | 20 ++++++++++++++++++
 alib2data/src/tree/TreeFeatures.h           | 23 ++++++++++++++++++++-
 alib2data/src/tree/TreeFromRawParser.cpp    |  1 +
 alib2data/src/tree/TreeFromRawParser.h      |  2 --
 alib2data/src/tree/TreeFromXMLParser.cpp    |  5 +++--
 alib2data/src/tree/TreeFromXMLParser.h      |  8 +++----
 alib2data/src/tree/TreeToRawComposer.cpp    |  2 +-
 alib2data/src/tree/TreeToRawComposer.h      |  3 +--
 alib2data/src/tree/TreeToXMLComposer.cpp    |  2 +-
 alib2data/src/tree/TreeToXMLComposer.h      | 10 +--------
 alib2data/test-src/tree/PatternTest.cpp     |  4 ++++
 alib2data/test-src/tree/TreeTest.cpp        |  4 ++++
 tniceprint/src/tniceprint.cpp               |  2 ++
 19 files changed, 81 insertions(+), 39 deletions(-)
 create mode 100644 alib2data/src/tree/TreeClasses.h

diff --git a/acast2/src/cast/TreeCastVisitor.cpp b/acast2/src/cast/TreeCastVisitor.cpp
index 07d59c1073..df1aa8c0ae 100644
--- a/acast2/src/cast/TreeCastVisitor.cpp
+++ b/acast2/src/cast/TreeCastVisitor.cpp
@@ -6,6 +6,8 @@
  */
 
 #include "TreeCastVisitor.h"
+#include "tree/TreeClasses.h"
+
 #include "../CastVisitorBase.hpp"
 
 typedef cast_base_helper< tree::VisitableTreeBase::const_visitor_type, tree::TreeBase, alib::TreeTypes, tree::Tree, alib::TreeTypes > TreeCastVisitorType;
diff --git a/acast2/src/cast/TreeToStringCastVisitor.cpp b/acast2/src/cast/TreeToStringCastVisitor.cpp
index e3a1c1c2bd..90b45d1f34 100644
--- a/acast2/src/cast/TreeToStringCastVisitor.cpp
+++ b/acast2/src/cast/TreeToStringCastVisitor.cpp
@@ -7,6 +7,7 @@
 
 #include "TreeToStringCastVisitor.h"
 #include "string/StringClasses.h"
+#include "tree/TreeClasses.h"
 
 #include "../CastVisitorBase.hpp"
 
diff --git a/alib2data/src/XmlApi.cpp b/alib2data/src/XmlApi.cpp
index a1b1060270..c329be3a3e 100644
--- a/alib2data/src/XmlApi.cpp
+++ b/alib2data/src/XmlApi.cpp
@@ -17,6 +17,7 @@
 #include "container/ContainerClasses.h"
 #include "grammar/GrammarClasses.h"
 #include "regexp/RegExpClasses.h"
+#include "tree/TreeClasses.h"
 
 namespace alib {
 
diff --git a/alib2data/src/object/ObjectBase.h b/alib2data/src/object/ObjectBase.h
index 2af6fb36da..00062148c4 100644
--- a/alib2data/src/object/ObjectBase.h
+++ b/alib2data/src/object/ObjectBase.h
@@ -33,19 +33,7 @@ class UndirectedGraph;
 #include "../alphabet/SymbolFeatures.h"
 #include "../container/ContainerFeatures.h"
 #include "../primitive/PrimitiveFeatures.h"
-
-namespace tree {
-
-class RankedTree;
-class RankedPattern;
-class PrefixRankedTree;
-class PrefixRankedBarTree;
-class PrefixRankedPattern;
-class PrefixRankedBarPattern;
-class UnrankedTree;
-class UnrankedPattern;
-
-}
+#include "../tree/TreeFeatures.h"
 
 namespace alib {
 
@@ -83,6 +71,7 @@ typedef std::tuple< automaton::DFA, automaton::NFA, automaton::MultiInitialState
 
 typedef std::tuple< Void, exception::AlibException
 	> OtherTypes;
+
 // --------------------------------------------------------------------------------------------------------------------
 
 template<typename ... Ts>
diff --git a/alib2data/src/tree/Tree.h b/alib2data/src/tree/Tree.h
index 5a9b9981e5..7ccac890a1 100644
--- a/alib2data/src/tree/Tree.h
+++ b/alib2data/src/tree/Tree.h
@@ -16,7 +16,18 @@ namespace tree {
 /**
  * Wrapper around tree.
  */
-typedef alib::wrapper<TreeBase> Tree;
+class Tree : public alib::wrapper<TreeBase> {
+public:
+	explicit Tree(TreeBase* data) : alib::wrapper<TreeBase>(data) {
+	}
+
+	explicit Tree(const TreeBase& data) : alib::wrapper<TreeBase>(data.clone()) {
+	}
+
+	explicit Tree(TreeBase&& data) : alib::wrapper<TreeBase>(std::move(data).plunder()) {
+	}
+
+};
 
 } /* namespace tree */
 
diff --git a/alib2data/src/tree/TreeBase.h b/alib2data/src/tree/TreeBase.h
index 85198e5efb..5f85a2a53a 100644
--- a/alib2data/src/tree/TreeBase.h
+++ b/alib2data/src/tree/TreeBase.h
@@ -8,9 +8,7 @@
 #ifndef TREE_BASE_H_
 #define TREE_BASE_H_
 
-#include "../common/base.hpp"
 #include "../object/ObjectBase.h"
-#include "../exception/AlibException.h"
 
 namespace tree {
 
diff --git a/alib2data/src/tree/TreeClasses.h b/alib2data/src/tree/TreeClasses.h
new file mode 100644
index 0000000000..213a49d4ed
--- /dev/null
+++ b/alib2data/src/tree/TreeClasses.h
@@ -0,0 +1,20 @@
+/*
+ * TreeClasses.h
+ *
+ *  Created on: Nov 16, 2014
+ *      Author: Jan Travnicek
+ */
+
+#ifndef TREE_CLASSES_H_
+#define TREE_CLASSES_H_
+
+#include "ranked/RankedTree.h"
+#include "ranked/RankedPattern.h"
+#include "ranked/PrefixRankedTree.h"
+#include "ranked/PrefixRankedBarTree.h"
+#include "ranked/PrefixRankedPattern.h"
+#include "ranked/PrefixRankedBarPattern.h"
+#include "unranked/UnrankedTree.h"
+#include "unranked/UnrankedPattern.h"
+
+#endif /* TREE_CLASSES_H_ */
diff --git a/alib2data/src/tree/TreeFeatures.h b/alib2data/src/tree/TreeFeatures.h
index ce2f78a82b..ebc94bef34 100644
--- a/alib2data/src/tree/TreeFeatures.h
+++ b/alib2data/src/tree/TreeFeatures.h
@@ -11,9 +11,30 @@
 namespace tree {
 
 enum class FEATURES {
-	RANKED_TREE, RANKED_PATTERN, PREFIX_RANKED_TREE, PREFIX_RANKED_BAR_TREE, PREFIX_RANKED_PATTERN, PREFIX_RANKED_BAR_PATTERN, UNRANKED_TREE, UNRANKED_PATTERN
+	RANKED_TREE,
+	RANKED_PATTERN,
+	PREFIX_RANKED_TREE,
+	PREFIX_RANKED_BAR_TREE,
+	PREFIX_RANKED_PATTERN,
+	PREFIX_RANKED_BAR_PATTERN,
+	UNRANKED_TREE,
+	UNRANKED_PATTERN
 };
 
+class Tree;
+
+class RankedTree;
+class RankedPattern;
+class PrefixRankedTree;
+class PrefixRankedBarTree;
+class PrefixRankedPattern;
+class PrefixRankedBarPattern;
+class UnrankedTree;
+class UnrankedPattern;
+
+class RankedNode;
+class UnrankedNode;
+
 } /* namespace tree */
 
 #endif /* TREE_FEATURES_H_ */
diff --git a/alib2data/src/tree/TreeFromRawParser.cpp b/alib2data/src/tree/TreeFromRawParser.cpp
index 94baa2943f..ef227f0f4e 100644
--- a/alib2data/src/tree/TreeFromRawParser.cpp
+++ b/alib2data/src/tree/TreeFromRawParser.cpp
@@ -6,6 +6,7 @@
  */
 
 #include "TreeFromRawParser.h"
+#include "Tree.h"
 #include "TreeException.h"
 #include "ranked/RankedTree.h"
 #include "ranked/PrefixRankedTree.h"
diff --git a/alib2data/src/tree/TreeFromRawParser.h b/alib2data/src/tree/TreeFromRawParser.h
index 6733977194..0e9b335405 100644
--- a/alib2data/src/tree/TreeFromRawParser.h
+++ b/alib2data/src/tree/TreeFromRawParser.h
@@ -9,9 +9,7 @@
 #define TREE_FROM_RAW_PARSER
 
 #include "../sax/FromXMLParserHelper.h"
-#include "Tree.h"
 #include "TreeFeatures.h"
-#include <deque>
 #include <set>
 #include "unranked/UnrankedNode.h"
 
diff --git a/alib2data/src/tree/TreeFromXMLParser.cpp b/alib2data/src/tree/TreeFromXMLParser.cpp
index 5a0752393e..a5e67f91ba 100644
--- a/alib2data/src/tree/TreeFromXMLParser.cpp
+++ b/alib2data/src/tree/TreeFromXMLParser.cpp
@@ -6,11 +6,12 @@
  */
 
 #include "TreeFromXMLParser.h"
-
 #include "../sax/ParserException.h"
-
 #include "../XmlApi.hpp"
 
+#include "Tree.h"
+#include "TreeClasses.h"
+
 namespace tree {
 
 Tree TreeFromXMLParser::parseTree(std::deque<sax::Token>::iterator& input) const {
diff --git a/alib2data/src/tree/TreeFromXMLParser.h b/alib2data/src/tree/TreeFromXMLParser.h
index 208f6a764c..5131a5be76 100644
--- a/alib2data/src/tree/TreeFromXMLParser.h
+++ b/alib2data/src/tree/TreeFromXMLParser.h
@@ -9,15 +9,13 @@
 #define TREE_FROM_XML_PARSER_H_
 
 #include "../sax/FromXMLParserHelper.h"
-#include "Tree.h"
 #include "TreeFeatures.h"
-#include "ranked/RankedTree.h"
-#include "unranked/UnrankedTree.h"
 
-#include <deque>
 #include <set>
 #include <variant>
-#include "../sax/Token.h"
+#include <vector>
+
+#include "../alphabet/Symbol.h"
 
 namespace alib {
 
diff --git a/alib2data/src/tree/TreeToRawComposer.cpp b/alib2data/src/tree/TreeToRawComposer.cpp
index 56430c335f..038d89faf5 100644
--- a/alib2data/src/tree/TreeToRawComposer.cpp
+++ b/alib2data/src/tree/TreeToRawComposer.cpp
@@ -7,8 +7,8 @@
 
 #include "TreeToRawComposer.h"
 #include "TreeException.h"
-
 #include "../XmlApi.hpp"
+#include "TreeClasses.h"
 
 namespace tree {
 
diff --git a/alib2data/src/tree/TreeToRawComposer.h b/alib2data/src/tree/TreeToRawComposer.h
index 14c2f3cd78..483a36c339 100644
--- a/alib2data/src/tree/TreeToRawComposer.h
+++ b/alib2data/src/tree/TreeToRawComposer.h
@@ -10,9 +10,8 @@
 
 #include <deque>
 #include "Tree.h"
-#include "ranked/RankedTree.h"
-#include "unranked/UnrankedTree.h"
 #include "../sax/Token.h"
+#include <vector>
 
 namespace alib {
 
diff --git a/alib2data/src/tree/TreeToXMLComposer.cpp b/alib2data/src/tree/TreeToXMLComposer.cpp
index 5cb8455434..340f2d439b 100644
--- a/alib2data/src/tree/TreeToXMLComposer.cpp
+++ b/alib2data/src/tree/TreeToXMLComposer.cpp
@@ -6,8 +6,8 @@
  */
 
 #include "TreeToXMLComposer.h"
-
 #include "../XmlApi.hpp"
+#include "TreeClasses.h"
 
 namespace tree {
 
diff --git a/alib2data/src/tree/TreeToXMLComposer.h b/alib2data/src/tree/TreeToXMLComposer.h
index b5a978c641..c807678c58 100644
--- a/alib2data/src/tree/TreeToXMLComposer.h
+++ b/alib2data/src/tree/TreeToXMLComposer.h
@@ -8,18 +8,10 @@
 #ifndef TREE_TO_XML_COMPOSER_H_
 #define TREE_TO_XML_COMPOSER_H_
 
-#include <string>
 #include <deque>
 #include "Tree.h"
-#include "ranked/RankedTree.h"
-#include "ranked/RankedPattern.h"
-#include "ranked/PrefixRankedTree.h"
-#include "ranked/PrefixRankedBarTree.h"
-#include "ranked/PrefixRankedPattern.h"
-#include "ranked/PrefixRankedBarPattern.h"
-#include "unranked/UnrankedTree.h"
-#include "unranked/UnrankedPattern.h"
 #include "../sax/Token.h"
+#include <set>
 
 namespace alib {
 
diff --git a/alib2data/test-src/tree/PatternTest.cpp b/alib2data/test-src/tree/PatternTest.cpp
index 4af5a23692..9ade84aab4 100644
--- a/alib2data/test-src/tree/PatternTest.cpp
+++ b/alib2data/test-src/tree/PatternTest.cpp
@@ -3,10 +3,14 @@
 #include "sax/SaxParseInterface.h"
 #include "sax/SaxComposeInterface.h"
 
+#include "tree/unranked/UnrankedPattern.h"
 #include "tree/ranked/RankedPattern.h"
 #include "tree/ranked/PrefixRankedPattern.h"
 #include "tree/ranked/PrefixRankedBarPattern.h"
 
+#include "tree/ranked/RankedNode.h"
+#include "tree/unranked/UnrankedNode.h"
+
 #include "tree/TreeException.h"
 
 #include "factory/XmlDataFactory.hpp"
diff --git a/alib2data/test-src/tree/TreeTest.cpp b/alib2data/test-src/tree/TreeTest.cpp
index 698479fcfd..7d1ad8136d 100644
--- a/alib2data/test-src/tree/TreeTest.cpp
+++ b/alib2data/test-src/tree/TreeTest.cpp
@@ -4,10 +4,14 @@
 #include "sax/SaxComposeInterface.h"
 
 #include "tree/ranked/RankedTree.h"
+#include "tree/unranked/UnrankedTree.h"
 #include "tree/ranked/PrefixRankedTree.h"
 #include "tree/ranked/PrefixRankedBarTree.h"
 #include "tree/ranked/RankedPattern.h"
 
+#include "tree/ranked/RankedNode.h"
+#include "tree/unranked/UnrankedNode.h"
+
 #include "tree/TreeException.h"
 
 #include "factory/XmlDataFactory.hpp"
diff --git a/tniceprint/src/tniceprint.cpp b/tniceprint/src/tniceprint.cpp
index 28d94650a8..6055e296d9 100644
--- a/tniceprint/src/tniceprint.cpp
+++ b/tniceprint/src/tniceprint.cpp
@@ -12,6 +12,8 @@
 #include <sax/SaxParseInterface.h>
 #include <sax/ParserException.h>
 #include <tree/Tree.h>
+#include <tree/ranked/RankedTree.h>
+#include <tree/unranked/UnrankedTree.h>
 
 int main(int argc, char** argv) {
 	try {
-- 
GitLab