From 07b474f82d0d4086f59d6cfcae2862690623a961 Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Tue, 9 Jun 2015 17:44:28 +0200
Subject: [PATCH] optimize includes in primitives

---
 alib2data/src/XmlApi.cpp                          |  6 ++++++
 alib2data/src/object/ObjectBase.h                 | 10 +---------
 alib2data/src/primitive/Bool.h                    |  2 --
 alib2data/src/primitive/Character.h               |  3 ---
 alib2data/src/primitive/Integer.h                 |  2 --
 alib2data/src/primitive/NextPrimitive.cpp         |  2 +-
 alib2data/src/primitive/NextPrimitive.h           |  5 ++---
 alib2data/src/primitive/Primitive.h               | 15 +++++++++++++--
 alib2data/src/primitive/PrimitiveFeatures.h       |  8 ++++++++
 .../src/primitive/PrimitiveFromStringLexer.h      |  2 +-
 .../src/primitive/PrimitiveFromStringParser.cpp   |  2 +-
 .../src/primitive/PrimitiveFromStringParser.h     |  4 +---
 .../src/primitive/PrimitiveFromXMLParser.cpp      | 10 +++++++---
 alib2data/src/primitive/PrimitiveFromXMLParser.h  |  6 ------
 .../src/primitive/PrimitiveToXMLComposer.cpp      |  8 +++++---
 alib2data/src/primitive/PrimitiveToXMLComposer.h  |  1 -
 alib2data/src/primitive/String.h                  |  2 --
 alib2data/src/primitive/Unsigned.h                |  2 --
 18 files changed, 46 insertions(+), 44 deletions(-)

diff --git a/alib2data/src/XmlApi.cpp b/alib2data/src/XmlApi.cpp
index a57d498705..633850c5cb 100644
--- a/alib2data/src/XmlApi.cpp
+++ b/alib2data/src/XmlApi.cpp
@@ -27,6 +27,12 @@
 #include "label/LabelPairLabel.h"
 #include "label/UniqueLabel.h"
 
+#include "primitive/Primitive.h"
+#include "primitive/Bool.h"
+#include "primitive/Integer.h"
+#include "primitive/String.h"
+#include "primitive/Character.h"
+
 namespace alib {
 
 const label::LabelFromXMLParser FromXMLParsers::labelParser;
diff --git a/alib2data/src/object/ObjectBase.h b/alib2data/src/object/ObjectBase.h
index 6aa7f24739..0be8d812b4 100644
--- a/alib2data/src/object/ObjectBase.h
+++ b/alib2data/src/object/ObjectBase.h
@@ -102,15 +102,7 @@ class ObjectsMap;
 
 }
 
-namespace primitive {
-
-class String;
-class Integer;
-class Character;
-class Unsigned;
-class Bool;
-
-}
+#include "../primitive/PrimitiveFeatures.h"
 
 namespace tree {
 
diff --git a/alib2data/src/primitive/Bool.h b/alib2data/src/primitive/Bool.h
index 2aa5440bb7..071d1d4224 100644
--- a/alib2data/src/primitive/Bool.h
+++ b/alib2data/src/primitive/Bool.h
@@ -8,8 +8,6 @@
 #ifndef PRIMITIVE_BOOL_H_
 #define PRIMITIVE_BOOL_H_
 
-#include <ostream>
-
 #include "PrimitiveBase.h"
 
 namespace primitive {
diff --git a/alib2data/src/primitive/Character.h b/alib2data/src/primitive/Character.h
index 80fb729afd..6a9d4d8149 100644
--- a/alib2data/src/primitive/Character.h
+++ b/alib2data/src/primitive/Character.h
@@ -8,9 +8,6 @@
 #ifndef PRIMITIVE_CHARACTER_H_
 #define PRIMITIVE_CHARACTER_H_
 
-#include <string>
-#include <ostream>
-
 #include "PrimitiveBase.h"
 
 namespace primitive {
diff --git a/alib2data/src/primitive/Integer.h b/alib2data/src/primitive/Integer.h
index f27b08c8d7..a9edd8f08d 100644
--- a/alib2data/src/primitive/Integer.h
+++ b/alib2data/src/primitive/Integer.h
@@ -8,8 +8,6 @@
 #ifndef PRIMITIVE_INTEGER_H_
 #define PRIMITIVE_INTEGER_H_
 
-#include <ostream>
-
 #include "PrimitiveBase.h"
 
 namespace primitive {
diff --git a/alib2data/src/primitive/NextPrimitive.cpp b/alib2data/src/primitive/NextPrimitive.cpp
index ee065e7b01..dbaae49c6d 100644
--- a/alib2data/src/primitive/NextPrimitive.cpp
+++ b/alib2data/src/primitive/NextPrimitive.cpp
@@ -6,12 +6,12 @@
  */
 
 #include "NextPrimitive.h"
+#include "Primitive.h"
 #include "Integer.h"
 #include "String.h"
 #include "Character.h"
 #include "Unsigned.h"
 #include "Bool.h"
-#include <string>
 
 namespace primitive {
 
diff --git a/alib2data/src/primitive/NextPrimitive.h b/alib2data/src/primitive/NextPrimitive.h
index aa92bda252..e549dff658 100644
--- a/alib2data/src/primitive/NextPrimitive.h
+++ b/alib2data/src/primitive/NextPrimitive.h
@@ -8,9 +8,8 @@
 #ifndef NEXT_PRIMITIVE_H_
 #define NEXT_PRIMITIVE_H_
 
-#include <list>
-#include "Primitive.h"
-#include "../sax/Token.h"
+#include "PrimitiveFeatures.h"
+#include "PrimitiveBase.h"
 
 namespace primitive {
 
diff --git a/alib2data/src/primitive/Primitive.h b/alib2data/src/primitive/Primitive.h
index 4e11ba5f3d..2a9752f987 100644
--- a/alib2data/src/primitive/Primitive.h
+++ b/alib2data/src/primitive/Primitive.h
@@ -8,15 +8,26 @@
 #ifndef PRIMITIVE_H_
 #define PRIMITIVE_H_
 
-#include "../common/wrapper.hpp"
 #include "PrimitiveBase.h"
+#include "../common/wrapper.hpp"
 
 namespace primitive {
 
 /**
  * Wrapper around primitive data types.
  */
-typedef alib::wrapper<PrimitiveBase> Primitive;
+class Primitive : public alib::wrapper<PrimitiveBase> {
+public:
+	explicit Primitive(PrimitiveBase* data) : alib::wrapper<PrimitiveBase>(data) {
+	}
+
+	explicit Primitive(const PrimitiveBase& data) : alib::wrapper<PrimitiveBase>(data.clone()) {
+	}
+
+	explicit Primitive(PrimitiveBase&& data) : alib::wrapper<PrimitiveBase>(std::move(data).plunder()) {
+	}
+
+};
 
 Primitive primitiveFrom(int number);
 Primitive primitiveFrom(char character);
diff --git a/alib2data/src/primitive/PrimitiveFeatures.h b/alib2data/src/primitive/PrimitiveFeatures.h
index 2aec1a3b52..3fdbc4a8d3 100644
--- a/alib2data/src/primitive/PrimitiveFeatures.h
+++ b/alib2data/src/primitive/PrimitiveFeatures.h
@@ -18,6 +18,14 @@ enum class FEATURES {
 	BOOL
 };
 
+class Primitive;
+
+class String;
+class Integer;
+class Character;
+class Unsigned;
+class Bool;
+
 } /* namespace primitive */
 
 #endif /* PRIMITIVE_FEATURES_H_ */
diff --git a/alib2data/src/primitive/PrimitiveFromStringLexer.h b/alib2data/src/primitive/PrimitiveFromStringLexer.h
index 035cbed24d..5037551b47 100644
--- a/alib2data/src/primitive/PrimitiveFromStringLexer.h
+++ b/alib2data/src/primitive/PrimitiveFromStringLexer.h
@@ -9,7 +9,7 @@
 #define PRIMITIVE_FROM_STRING_LEXER_H_
 
 #include <string>
-#include <sstream>
+#include <istream>
 
 namespace primitive {
 
diff --git a/alib2data/src/primitive/PrimitiveFromStringParser.cpp b/alib2data/src/primitive/PrimitiveFromStringParser.cpp
index 5989529167..8e43db245c 100644
--- a/alib2data/src/primitive/PrimitiveFromStringParser.cpp
+++ b/alib2data/src/primitive/PrimitiveFromStringParser.cpp
@@ -7,10 +7,10 @@
 
 #include "PrimitiveFromStringParser.h"
 #include "../exception/AlibException.h"
+#include "Primitive.h"
 #include "String.h"
 #include "Integer.h"
 #include "Character.h"
-#include <algorithm>
 
 namespace primitive {
 
diff --git a/alib2data/src/primitive/PrimitiveFromStringParser.h b/alib2data/src/primitive/PrimitiveFromStringParser.h
index 117d913970..b04e90589c 100644
--- a/alib2data/src/primitive/PrimitiveFromStringParser.h
+++ b/alib2data/src/primitive/PrimitiveFromStringParser.h
@@ -8,12 +8,10 @@
 #ifndef PRIMITIVE_FROM_STRING_PARSER_H_
 #define PRIMITIVE_FROM_STRING_PARSER_H_
 
-#include "Primitive.h"
+#include "PrimitiveFromStringLexer.h"
 #include "PrimitiveFeatures.h"
 #include <set>
 
-#include "PrimitiveFromStringLexer.h"
-
 namespace alib {
 
 template<typename T>
diff --git a/alib2data/src/primitive/PrimitiveFromXMLParser.cpp b/alib2data/src/primitive/PrimitiveFromXMLParser.cpp
index a0e46cc877..68dff68c69 100644
--- a/alib2data/src/primitive/PrimitiveFromXMLParser.cpp
+++ b/alib2data/src/primitive/PrimitiveFromXMLParser.cpp
@@ -7,11 +7,15 @@
 
 #include "PrimitiveFromXMLParser.h"
 #include "../sax/ParserException.h"
-#include <algorithm>
-#include <string>
-
 #include "../XmlApi.hpp"
 
+#include "Primitive.h"
+#include "String.h"
+#include "Integer.h"
+#include "Character.h"
+#include "Unsigned.h"
+#include "Bool.h"
+
 namespace primitive {
 
 Primitive PrimitiveFromXMLParser::parsePrimitive(std::deque<sax::Token>::iterator& input) const {
diff --git a/alib2data/src/primitive/PrimitiveFromXMLParser.h b/alib2data/src/primitive/PrimitiveFromXMLParser.h
index 6c06cca3d9..1de49e8132 100644
--- a/alib2data/src/primitive/PrimitiveFromXMLParser.h
+++ b/alib2data/src/primitive/PrimitiveFromXMLParser.h
@@ -10,13 +10,7 @@
 
 #include "../sax/FromXMLParserHelper.h"
 #include <set>
-#include "Primitive.h"
 #include "PrimitiveFeatures.h"
-#include "String.h"
-#include "Integer.h"
-#include "Character.h"
-#include "Unsigned.h"
-#include "Bool.h"
 #include "../sax/Token.h"
 
 namespace alib {
diff --git a/alib2data/src/primitive/PrimitiveToXMLComposer.cpp b/alib2data/src/primitive/PrimitiveToXMLComposer.cpp
index 5991f919df..44532e60c3 100644
--- a/alib2data/src/primitive/PrimitiveToXMLComposer.cpp
+++ b/alib2data/src/primitive/PrimitiveToXMLComposer.cpp
@@ -6,12 +6,14 @@
  */
 
 #include "PrimitiveToXMLComposer.h"
+
+#include "../XmlApi.hpp"
+
+#include "Primitive.h"
+#include "Bool.h"
 #include "Integer.h"
 #include "String.h"
 #include "Character.h"
-#include <string>
-
-#include "../XmlApi.hpp"
 
 namespace primitive {
 
diff --git a/alib2data/src/primitive/PrimitiveToXMLComposer.h b/alib2data/src/primitive/PrimitiveToXMLComposer.h
index b7f28d8f78..fab4070830 100644
--- a/alib2data/src/primitive/PrimitiveToXMLComposer.h
+++ b/alib2data/src/primitive/PrimitiveToXMLComposer.h
@@ -9,7 +9,6 @@
 #define PRIMITIVE_TO_XML_COMPOSER_H_
 
 #include <deque>
-#include <string>
 #include "Primitive.h"
 #include "../sax/Token.h"
 
diff --git a/alib2data/src/primitive/String.h b/alib2data/src/primitive/String.h
index 671134632c..f69d2e72b1 100644
--- a/alib2data/src/primitive/String.h
+++ b/alib2data/src/primitive/String.h
@@ -9,8 +9,6 @@
 #define PRIMITIVE_STRING_H_
 
 #include <string>
-#include <ostream>
-
 #include "PrimitiveBase.h"
 
 namespace primitive {
diff --git a/alib2data/src/primitive/Unsigned.h b/alib2data/src/primitive/Unsigned.h
index 6157ccd77e..54efd8d869 100644
--- a/alib2data/src/primitive/Unsigned.h
+++ b/alib2data/src/primitive/Unsigned.h
@@ -8,8 +8,6 @@
 #ifndef PRIMITIVE_UNSIGNED_H_
 #define PRIMITIVE_UNSIGNED_H_
 
-#include <ostream>
-
 #include "PrimitiveBase.h"
 
 namespace primitive {
-- 
GitLab