From d7a9a9bd8e265a9412a6c63df891f863c546b143 Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Tue, 9 Jun 2015 09:06:42 +0200
Subject: [PATCH] optimize includes in alphabet

---
 alib2data/src/XmlApi.cpp                        | 13 +++++++++++++
 alib2data/src/alphabet/Alphabet.h               |  3 +--
 alib2data/src/alphabet/BarSymbol.h              |  2 +-
 alib2data/src/alphabet/BlankSymbol.h            |  2 +-
 alib2data/src/alphabet/BottomOfTheStackSymbol.h |  2 +-
 alib2data/src/alphabet/EndSymbol.h              |  2 +-
 alib2data/src/alphabet/LabeledSymbol.h          |  1 -
 alib2data/src/alphabet/NextSymbol.h             |  5 ++---
 alib2data/src/alphabet/RankedSymbol.h           |  3 ---
 alib2data/src/alphabet/StartSymbol.h            |  2 +-
 alib2data/src/alphabet/SubtreeWildcardSymbol.h  |  2 +-
 alib2data/src/alphabet/Symbol.h                 | 13 ++++++++++++-
 alib2data/src/alphabet/SymbolFeatures.h         | 15 +++++++++++++++
 .../src/alphabet/SymbolFromStringLexer.cpp      |  1 -
 alib2data/src/alphabet/SymbolFromStringLexer.h  |  2 +-
 .../src/alphabet/SymbolFromStringParser.cpp     |  2 --
 alib2data/src/alphabet/SymbolFromStringParser.h |  2 +-
 alib2data/src/alphabet/SymbolFromXMLParser.cpp  | 15 ++++++++++++++-
 alib2data/src/alphabet/SymbolFromXMLParser.h    | 16 ----------------
 alib2data/src/alphabet/SymbolPairSymbol.h       |  4 ----
 alib2data/src/alphabet/SymbolSetSymbol.h        |  4 ----
 alib2data/src/alphabet/SymbolToXMLComposer.cpp  |  6 ++++++
 alib2data/src/alphabet/SymbolToXMLComposer.h    |  1 -
 alib2data/src/alphabet/UniqueSymbol.h           |  5 -----
 alib2data/src/alphabet/VariablesBarSymbol.h     |  2 +-
 alib2data/src/object/ObjectBase.h               | 17 +----------------
 alib2data/test-src/alphabet/SymbolTest.cpp      |  2 ++
 alib2data/test-src/automaton/AutomatonTest.cpp  |  1 +
 alib2data/test-src/tree/PatternTest.cpp         |  3 ++-
 alib2data/test-src/tree/TreeTest.cpp            |  2 +-
 30 files changed, 79 insertions(+), 71 deletions(-)

diff --git a/alib2data/src/XmlApi.cpp b/alib2data/src/XmlApi.cpp
index 716ecdc511..aa44642a31 100644
--- a/alib2data/src/XmlApi.cpp
+++ b/alib2data/src/XmlApi.cpp
@@ -7,6 +7,19 @@
 
 #include "XmlApi.hpp"
 
+#include "alphabet/LabeledSymbol.h"
+#include "alphabet/BlankSymbol.h"
+#include "alphabet/BottomOfTheStackSymbol.h"
+#include "alphabet/BarSymbol.h"
+#include "alphabet/VariablesBarSymbol.h"
+#include "alphabet/StartSymbol.h"
+#include "alphabet/EndSymbol.h"
+#include "alphabet/RankedSymbol.h"
+#include "alphabet/SymbolPairSymbol.h"
+#include "alphabet/SymbolSetSymbol.h"
+#include "alphabet/SubtreeWildcardSymbol.h"
+#include "alphabet/UniqueSymbol.h"
+
 namespace alib {
 
 const label::LabelFromXMLParser FromXMLParsers::labelParser;
diff --git a/alib2data/src/alphabet/Alphabet.h b/alib2data/src/alphabet/Alphabet.h
index 0dce3a5704..806fc6bae2 100644
--- a/alib2data/src/alphabet/Alphabet.h
+++ b/alib2data/src/alphabet/Alphabet.h
@@ -8,10 +8,9 @@
 #ifndef ALPHABET_H_
 #define ALPHABET_H_
 
-#include <iostream>
 #include <set>
 
-#include "../alphabet/Symbol.h"
+#include "Symbol.h"
 
 namespace alphabet {
 
diff --git a/alib2data/src/alphabet/BarSymbol.h b/alib2data/src/alphabet/BarSymbol.h
index 11cae0120c..fcb16661e2 100644
--- a/alib2data/src/alphabet/BarSymbol.h
+++ b/alib2data/src/alphabet/BarSymbol.h
@@ -8,7 +8,7 @@
 #ifndef BAR_SYMBOL_H_
 #define BAR_SYMBOL_H_
 
-#include "Symbol.h"
+#include "SymbolBase.h"
 
 namespace alphabet {
 
diff --git a/alib2data/src/alphabet/BlankSymbol.h b/alib2data/src/alphabet/BlankSymbol.h
index f404638d51..36096a238d 100644
--- a/alib2data/src/alphabet/BlankSymbol.h
+++ b/alib2data/src/alphabet/BlankSymbol.h
@@ -8,7 +8,7 @@
 #ifndef BLANK_SYMBOL_H_
 #define BLANK_SYMBOL_H_
 
-#include "Symbol.h"
+#include "SymbolBase.h"
 
 namespace alphabet {
 
diff --git a/alib2data/src/alphabet/BottomOfTheStackSymbol.h b/alib2data/src/alphabet/BottomOfTheStackSymbol.h
index 187781882f..0fc54fcf27 100644
--- a/alib2data/src/alphabet/BottomOfTheStackSymbol.h
+++ b/alib2data/src/alphabet/BottomOfTheStackSymbol.h
@@ -8,7 +8,7 @@
 #ifndef BOTTOM_OF_THE_STACK_SYMBOL_H_
 #define BOTTOM_OF_THE_STACK_SYMBOL_H_
 
-#include "Symbol.h"
+#include "SymbolBase.h"
 
 namespace alphabet {
 
diff --git a/alib2data/src/alphabet/EndSymbol.h b/alib2data/src/alphabet/EndSymbol.h
index c71c829f1a..ab6c21b4cc 100644
--- a/alib2data/src/alphabet/EndSymbol.h
+++ b/alib2data/src/alphabet/EndSymbol.h
@@ -8,7 +8,7 @@
 #ifndef END_SYMBOL_H_
 #define END_SYMBOL_H_
 
-#include "Symbol.h"
+#include "SymbolBase.h"
 
 namespace alphabet {
 
diff --git a/alib2data/src/alphabet/LabeledSymbol.h b/alib2data/src/alphabet/LabeledSymbol.h
index 32aa076f1b..9c5b480829 100644
--- a/alib2data/src/alphabet/LabeledSymbol.h
+++ b/alib2data/src/alphabet/LabeledSymbol.h
@@ -10,7 +10,6 @@
 
 #include "../label/Label.h"
 #include "SymbolBase.h"
-#include <ostream>
 
 namespace alphabet {
 
diff --git a/alib2data/src/alphabet/NextSymbol.h b/alib2data/src/alphabet/NextSymbol.h
index a01a5b330f..9d0586fc83 100644
--- a/alib2data/src/alphabet/NextSymbol.h
+++ b/alib2data/src/alphabet/NextSymbol.h
@@ -8,9 +8,8 @@
 #ifndef NEXT_SYMBOL_H_
 #define NEXT_SYMBOL_H_
 
-#include <list>
-#include "Symbol.h"
-#include "../sax/Token.h"
+#include "SymbolFeatures.h"
+#include "SymbolBase.h"
 
 namespace alphabet {
 
diff --git a/alib2data/src/alphabet/RankedSymbol.h b/alib2data/src/alphabet/RankedSymbol.h
index 3d053b037d..387077813a 100644
--- a/alib2data/src/alphabet/RankedSymbol.h
+++ b/alib2data/src/alphabet/RankedSymbol.h
@@ -8,10 +8,7 @@
 #ifndef RANKED_SYMBOL_H_
 #define RANKED_SYMBOL_H_
 
-#include "../label/Label.h"
-#include "SymbolBase.h"
 #include "Symbol.h"
-#include <ostream>
 #include "../primitive/Unsigned.h"
 
 namespace alphabet {
diff --git a/alib2data/src/alphabet/StartSymbol.h b/alib2data/src/alphabet/StartSymbol.h
index 09a7d8e1cf..ca0631db3a 100644
--- a/alib2data/src/alphabet/StartSymbol.h
+++ b/alib2data/src/alphabet/StartSymbol.h
@@ -8,7 +8,7 @@
 #ifndef START_SYMBOL_H_
 #define START_SYMBOL_H_
 
-#include "Symbol.h"
+#include "SymbolBase.h"
 
 namespace alphabet {
 
diff --git a/alib2data/src/alphabet/SubtreeWildcardSymbol.h b/alib2data/src/alphabet/SubtreeWildcardSymbol.h
index fb2094334e..0c737efa12 100644
--- a/alib2data/src/alphabet/SubtreeWildcardSymbol.h
+++ b/alib2data/src/alphabet/SubtreeWildcardSymbol.h
@@ -8,7 +8,7 @@
 #ifndef SUBTREE_WILDCARD_SYMBOL_H_
 #define SUBTREE_WILDCARD_SYMBOL_H_
 
-#include "Symbol.h"
+#include "SymbolBase.h"
 
 namespace alphabet {
 
diff --git a/alib2data/src/alphabet/Symbol.h b/alib2data/src/alphabet/Symbol.h
index 12f893d68a..8b06ad97ba 100644
--- a/alib2data/src/alphabet/Symbol.h
+++ b/alib2data/src/alphabet/Symbol.h
@@ -19,7 +19,18 @@ namespace alphabet {
 /**
  * Wrapper around automata.
  */
-typedef alib::wrapper<SymbolBase> Symbol;
+class Symbol : public alib::wrapper<SymbolBase> {
+public:
+	explicit Symbol(SymbolBase* data) : alib::wrapper<SymbolBase>(data) {
+	}
+
+	explicit Symbol(const SymbolBase& data) : alib::wrapper<SymbolBase>(data.clone()) {
+	}
+
+	explicit Symbol(SymbolBase&& data) : alib::wrapper<SymbolBase>(std::move(data).plunder()) {
+	}
+
+};
 
 /**
  * Creates and adds unique state to grammar. If given state name is
diff --git a/alib2data/src/alphabet/SymbolFeatures.h b/alib2data/src/alphabet/SymbolFeatures.h
index 6b7b586b81..65c3e03060 100644
--- a/alib2data/src/alphabet/SymbolFeatures.h
+++ b/alib2data/src/alphabet/SymbolFeatures.h
@@ -25,6 +25,21 @@ enum class FEATURES {
 	START
 };
 
+class Symbol;
+
+class LabeledSymbol;
+class BlankSymbol;
+class BottomOfTheStackSymbol;
+class EndSymbol;
+class StartSymbol;
+class RankedSymbol;
+class BarSymbol;
+class VariablesBarSymbol;
+class SubtreeWildcardSymbol;
+class SymbolPairSymbol;
+class SymbolSetSymbol;
+class UniqueSymbol;
+
 } /* namespace alphabet */
 
 #endif /* SYMBOL_FEATURES_H_ */
diff --git a/alib2data/src/alphabet/SymbolFromStringLexer.cpp b/alib2data/src/alphabet/SymbolFromStringLexer.cpp
index e7617cfd8a..ee9f115eba 100644
--- a/alib2data/src/alphabet/SymbolFromStringLexer.cpp
+++ b/alib2data/src/alphabet/SymbolFromStringLexer.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "SymbolFromStringLexer.h"
-#include "../label/LabelFromStringLexer.h"
 
 namespace alphabet {
 
diff --git a/alib2data/src/alphabet/SymbolFromStringLexer.h b/alib2data/src/alphabet/SymbolFromStringLexer.h
index 49f080924a..1130a66d44 100644
--- a/alib2data/src/alphabet/SymbolFromStringLexer.h
+++ b/alib2data/src/alphabet/SymbolFromStringLexer.h
@@ -9,7 +9,7 @@
 #define SYMBOL_FROM_STRING_LEXER_H_
 
 #include <string>
-#include <sstream>
+#include <istream>
 
 namespace alphabet {
 
diff --git a/alib2data/src/alphabet/SymbolFromStringParser.cpp b/alib2data/src/alphabet/SymbolFromStringParser.cpp
index e75cfc7881..9972f6e58b 100644
--- a/alib2data/src/alphabet/SymbolFromStringParser.cpp
+++ b/alib2data/src/alphabet/SymbolFromStringParser.cpp
@@ -13,8 +13,6 @@
 #include "StartSymbol.h"
 #include "LabeledSymbol.h"
 
-#include "../label/Label.h"
-
 #include "../StringApi.hpp"
 
 namespace alphabet {
diff --git a/alib2data/src/alphabet/SymbolFromStringParser.h b/alib2data/src/alphabet/SymbolFromStringParser.h
index 5d467712a1..a8ddbbdc89 100644
--- a/alib2data/src/alphabet/SymbolFromStringParser.h
+++ b/alib2data/src/alphabet/SymbolFromStringParser.h
@@ -8,9 +8,9 @@
 #ifndef SYMBOL_FROM_STRING_PARSER_H_
 #define SYMBOL_FROM_STRING_PARSER_H_
 
-#include "Symbol.h"
 #include "SymbolFromStringLexer.h"
 #include "SymbolFeatures.h"
+#include <set>
 
 namespace alib {
 
diff --git a/alib2data/src/alphabet/SymbolFromXMLParser.cpp b/alib2data/src/alphabet/SymbolFromXMLParser.cpp
index 4fa0ce2579..29941d4b00 100644
--- a/alib2data/src/alphabet/SymbolFromXMLParser.cpp
+++ b/alib2data/src/alphabet/SymbolFromXMLParser.cpp
@@ -8,10 +8,23 @@
 #include "SymbolFromXMLParser.h"
 
 #include "../sax/ParserException.h"
-#include "../label/Label.h"
 
 #include "../XmlApi.hpp"
 
+#include "Symbol.h"
+#include "BlankSymbol.h"
+#include "BottomOfTheStackSymbol.h"
+#include "EndSymbol.h"
+#include "StartSymbol.h"
+#include "LabeledSymbol.h"
+#include "RankedSymbol.h"
+#include "BarSymbol.h"
+#include "VariablesBarSymbol.h"
+#include "SubtreeWildcardSymbol.h"
+#include "SymbolPairSymbol.h"
+#include "SymbolSetSymbol.h"
+#include "UniqueSymbol.h"
+
 namespace alphabet {
 
 Symbol SymbolFromXMLParser::parseSymbol(std::deque<sax::Token>::iterator& input) const {
diff --git a/alib2data/src/alphabet/SymbolFromXMLParser.h b/alib2data/src/alphabet/SymbolFromXMLParser.h
index f21c8da768..2c0a2eca3e 100644
--- a/alib2data/src/alphabet/SymbolFromXMLParser.h
+++ b/alib2data/src/alphabet/SymbolFromXMLParser.h
@@ -9,25 +9,9 @@
 #define SYMBOL_FROM_XML_PARSER_H_
 
 #include "../sax/FromXMLParserHelper.h"
-#include <vector>
 #include <set>
-#include "Symbol.h"
 #include "SymbolFeatures.h"
 #include "../sax/Token.h"
-#include "../label/Label.h"
-
-#include "BlankSymbol.h"
-#include "BottomOfTheStackSymbol.h"
-#include "EndSymbol.h"
-#include "StartSymbol.h"
-#include "LabeledSymbol.h"
-#include "RankedSymbol.h"
-#include "BarSymbol.h"
-#include "VariablesBarSymbol.h"
-#include "SubtreeWildcardSymbol.h"
-#include "SymbolPairSymbol.h"
-#include "SymbolSetSymbol.h"
-#include "UniqueSymbol.h"
 
 namespace alib {
 
diff --git a/alib2data/src/alphabet/SymbolPairSymbol.h b/alib2data/src/alphabet/SymbolPairSymbol.h
index c0f2fa411b..355a52d49f 100644
--- a/alib2data/src/alphabet/SymbolPairSymbol.h
+++ b/alib2data/src/alphabet/SymbolPairSymbol.h
@@ -8,11 +8,7 @@
 #ifndef SYMBOL_PAIR_SYMBOL_H_
 #define SYMBOL_PAIR_SYMBOL_H_
 
-#include <string>
-#include <ostream>
-
 #include "Symbol.h"
-#include "SymbolBase.h"
 #include <pair>
 
 namespace alphabet {
diff --git a/alib2data/src/alphabet/SymbolSetSymbol.h b/alib2data/src/alphabet/SymbolSetSymbol.h
index 70286e2363..d2fa117dac 100644
--- a/alib2data/src/alphabet/SymbolSetSymbol.h
+++ b/alib2data/src/alphabet/SymbolSetSymbol.h
@@ -8,11 +8,7 @@
 #ifndef SYMBOL_SET_SYMBOL_H_
 #define SYMBOL_SET_SYMBOL_H_
 
-#include <string>
-#include <ostream>
-
 #include "Symbol.h"
-#include "SymbolBase.h"
 #include <set>
 
 namespace alphabet {
diff --git a/alib2data/src/alphabet/SymbolToXMLComposer.cpp b/alib2data/src/alphabet/SymbolToXMLComposer.cpp
index b21e0b423c..9971cf0705 100644
--- a/alib2data/src/alphabet/SymbolToXMLComposer.cpp
+++ b/alib2data/src/alphabet/SymbolToXMLComposer.cpp
@@ -9,6 +9,12 @@
 
 #include "../XmlApi.hpp"
 
+#include "LabeledSymbol.h"
+#include "RankedSymbol.h"
+#include "SymbolPairSymbol.h"
+#include "SymbolSetSymbol.h"
+#include "UniqueSymbol.h"
+
 namespace alphabet {
 
 void SymbolToXMLComposer::compose(std::deque<sax::Token>& out, const Symbol& symbol) const {
diff --git a/alib2data/src/alphabet/SymbolToXMLComposer.h b/alib2data/src/alphabet/SymbolToXMLComposer.h
index cf8701a3c1..fb254e4450 100644
--- a/alib2data/src/alphabet/SymbolToXMLComposer.h
+++ b/alib2data/src/alphabet/SymbolToXMLComposer.h
@@ -11,7 +11,6 @@
 #include <deque>
 #include "Symbol.h"
 #include "../sax/Token.h"
-#include "../label/Label.h"
 
 namespace alib {
 
diff --git a/alib2data/src/alphabet/UniqueSymbol.h b/alib2data/src/alphabet/UniqueSymbol.h
index 40a5f89b0f..d5c85fd7cd 100644
--- a/alib2data/src/alphabet/UniqueSymbol.h
+++ b/alib2data/src/alphabet/UniqueSymbol.h
@@ -8,12 +8,7 @@
 #ifndef SYMBOL_ID_SYMBOL_H_
 #define SYMBOL_ID_SYMBOL_H_
 
-#include <string>
-#include <ostream>
-
 #include "Symbol.h"
-#include "SymbolBase.h"
-#include <set>
 #include "../primitive/Integer.h"
 
 namespace alphabet {
diff --git a/alib2data/src/alphabet/VariablesBarSymbol.h b/alib2data/src/alphabet/VariablesBarSymbol.h
index f1ed01f07d..82d8367a7d 100644
--- a/alib2data/src/alphabet/VariablesBarSymbol.h
+++ b/alib2data/src/alphabet/VariablesBarSymbol.h
@@ -8,7 +8,7 @@
 #ifndef VARIABLES_BAR_SYMBOL_H_
 #define VARIABLES_BAR_SYMBOL_H_
 
-#include "Symbol.h"
+#include "SymbolBase.h"
 
 namespace alphabet {
 
diff --git a/alib2data/src/object/ObjectBase.h b/alib2data/src/object/ObjectBase.h
index f6649b1100..7d56974867 100644
--- a/alib2data/src/object/ObjectBase.h
+++ b/alib2data/src/object/ObjectBase.h
@@ -100,22 +100,7 @@ class Epsilon;
 
 }
 
-namespace alphabet {
-
-class StartSymbol;
-class LabeledSymbol;
-class BlankSymbol;
-class BottomOfTheStackSymbol;
-class RankedSymbol;
-class BarSymbol;
-class VariablesBarSymbol;
-class SubtreeWildcardSymbol;
-class SymbolSetSymbol;
-class SymbolPairSymbol;
-class UniqueSymbol;
-class EndSymbol;
-
-}
+#include "../alphabet/SymbolFeatures.h"
 
 namespace container {
 
diff --git a/alib2data/test-src/alphabet/SymbolTest.cpp b/alib2data/test-src/alphabet/SymbolTest.cpp
index abdec2a3cd..6624695729 100644
--- a/alib2data/test-src/alphabet/SymbolTest.cpp
+++ b/alib2data/test-src/alphabet/SymbolTest.cpp
@@ -7,6 +7,8 @@
 #include "alphabet/Symbol.h"
 #include "alphabet/LabeledSymbol.h"
 #include "alphabet/BlankSymbol.h"
+#include "alphabet/StartSymbol.h"
+#include "alphabet/EndSymbol.h"
 
 #include "factory/XmlDataFactory.hpp"
 #include "factory/StringDataFactory.hpp"
diff --git a/alib2data/test-src/automaton/AutomatonTest.cpp b/alib2data/test-src/automaton/AutomatonTest.cpp
index 8779db6825..4b8383a0ab 100644
--- a/alib2data/test-src/automaton/AutomatonTest.cpp
+++ b/alib2data/test-src/automaton/AutomatonTest.cpp
@@ -15,6 +15,7 @@
 #include "factory/StringDataFactory.hpp"
 
 #include "alphabet/LabeledSymbol.h"
+#include "alphabet/BottomOfTheStackSymbol.h"
 
 #include "regexp/RegExp.h"
 #include "regexp/unbounded/UnboundedRegExp.h"
diff --git a/alib2data/test-src/tree/PatternTest.cpp b/alib2data/test-src/tree/PatternTest.cpp
index d943e0b11d..4af5a23692 100644
--- a/alib2data/test-src/tree/PatternTest.cpp
+++ b/alib2data/test-src/tree/PatternTest.cpp
@@ -13,7 +13,8 @@
 
 #include "alphabet/RankedSymbol.h"
 #include "alphabet/SubtreeWildcardSymbol.h"
-
+#include "alphabet/BarSymbol.h"
+#include "alphabet/VariablesBarSymbol.h"
 
 #define CPPUNIT_IMPLY(x, y) CPPUNIT_ASSERT(!(x) || (y))
 
diff --git a/alib2data/test-src/tree/TreeTest.cpp b/alib2data/test-src/tree/TreeTest.cpp
index f957fe0bf4..698479fcfd 100644
--- a/alib2data/test-src/tree/TreeTest.cpp
+++ b/alib2data/test-src/tree/TreeTest.cpp
@@ -14,7 +14,7 @@
 
 #include "alphabet/RankedSymbol.h"
 #include "alphabet/SubtreeWildcardSymbol.h"
-
+#include "alphabet/BarSymbol.h"
 
 #define CPPUNIT_IMPLY(x, y) CPPUNIT_ASSERT(!(x) || (y))
 
-- 
GitLab