From ca325310a222eb1420f94d54e7e23dbf97051774 Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Fri, 15 Aug 2014 22:39:52 +0200
Subject: [PATCH] Object parser parses all data xmls

---
 alib2data/src/alphabet/SymbolFromXMLParser.h      |  2 +-
 alib2data/src/automaton/AutomatonFromXMLParser.h  |  8 ++++++++
 .../src/container/ContainerFromXMLParser.hpp      |  8 ++++++++
 alib2data/src/exception/ExceptionFromXMLParser.h  |  2 +-
 alib2data/src/grammar/GrammarFromXMLParser.h      |  8 ++++++++
 alib2data/src/label/LabelFromXMLParser.h          |  8 +++++++-
 alib2data/src/object/ObjectFromXMLParser.cpp      | 15 +++++++++++++++
 alib2data/src/regexp/RegExpFromXMLParser.h        |  7 +++++++
 alib2data/src/string/StringFromXMLParser.h        |  7 +++++++
 9 files changed, 62 insertions(+), 3 deletions(-)

diff --git a/alib2data/src/alphabet/SymbolFromXMLParser.h b/alib2data/src/alphabet/SymbolFromXMLParser.h
index 3d337b147a..9195c91fdd 100644
--- a/alib2data/src/alphabet/SymbolFromXMLParser.h
+++ b/alib2data/src/alphabet/SymbolFromXMLParser.h
@@ -56,7 +56,7 @@ namespace alib {
 
 class ObjectFromXMLParser;
 
-} /* namespace grammar */
+} /* namespace object */
 
 namespace alphabet {
 
diff --git a/alib2data/src/automaton/AutomatonFromXMLParser.h b/alib2data/src/automaton/AutomatonFromXMLParser.h
index 58416fefb5..dd2123f3bb 100644
--- a/alib2data/src/automaton/AutomatonFromXMLParser.h
+++ b/alib2data/src/automaton/AutomatonFromXMLParser.h
@@ -33,6 +33,12 @@ struct api;
 
 } /* namespace alib */
 
+namespace alib {
+
+class ObjectFromXMLParser;
+
+} /* namespace alib */
+
 namespace automaton {
 
 /**
@@ -95,6 +101,8 @@ class AutomatonFromXMLParser : public sax::FromXMLParserHelper {
 	SinglePopNPDA parseSinglePopNPDA(std::list<sax::Token>& input) const;
 	OneTapeDTM parseOneTapeDTM(std::list<sax::Token>& input) const;
 
+	friend class alib::ObjectFromXMLParser;
+
 	template<typename T> friend class alib::api;
 public:
 	bool first(std::list<sax::Token>& input) const;
diff --git a/alib2data/src/container/ContainerFromXMLParser.hpp b/alib2data/src/container/ContainerFromXMLParser.hpp
index d6717b6d36..44f56c797b 100644
--- a/alib2data/src/container/ContainerFromXMLParser.hpp
+++ b/alib2data/src/container/ContainerFromXMLParser.hpp
@@ -19,6 +19,12 @@ struct api;
 
 } /* namespace alib */
 
+namespace alib {
+
+class ObjectFromXMLParser;
+
+} /* namespace alib */
+
 namespace container {
 
 /**
@@ -31,6 +37,8 @@ public:
 	template<typename T>
 	std::set<T> parseSet(std::list<sax::Token>& input) const;
 
+	friend class alib::ObjectFromXMLParser;
+
 	template<typename T> friend class alib::api;
 };
 
diff --git a/alib2data/src/exception/ExceptionFromXMLParser.h b/alib2data/src/exception/ExceptionFromXMLParser.h
index ce3eb59114..904e7c2f80 100644
--- a/alib2data/src/exception/ExceptionFromXMLParser.h
+++ b/alib2data/src/exception/ExceptionFromXMLParser.h
@@ -25,7 +25,7 @@ namespace alib {
 
 class ObjectFromXMLParser;
 
-}
+} /* namespace alib */
 
 namespace exception {
 
diff --git a/alib2data/src/grammar/GrammarFromXMLParser.h b/alib2data/src/grammar/GrammarFromXMLParser.h
index b0d63f7ad9..d1def31f87 100644
--- a/alib2data/src/grammar/GrammarFromXMLParser.h
+++ b/alib2data/src/grammar/GrammarFromXMLParser.h
@@ -38,6 +38,12 @@ struct api;
 
 } /* namespace alib */
 
+namespace alib {
+
+class ObjectFromXMLParser;
+
+} /* namespace alib */
+
 namespace grammar {
 
 /**
@@ -93,6 +99,8 @@ class GrammarFromXMLParser : public sax::FromXMLParserHelper {
 	LeftRG parseLeftRG(std::list<sax::Token>& input) const;
 	LeftLG parseLeftLG(std::list<sax::Token>& input) const;
 
+	friend class alib::ObjectFromXMLParser;
+
 	template<typename T> friend class alib::api;
 public:
 	bool first(std::list<sax::Token>& input) const;
diff --git a/alib2data/src/label/LabelFromXMLParser.h b/alib2data/src/label/LabelFromXMLParser.h
index 8f3f27c3d8..df213bc8c0 100644
--- a/alib2data/src/label/LabelFromXMLParser.h
+++ b/alib2data/src/label/LabelFromXMLParser.h
@@ -38,6 +38,12 @@ class AutomatonFromXMLParser;
 
 } /* namespace automaton */
 
+namespace alib {
+
+class ObjectFromXMLParser;
+
+} /* namespace alib */
+
 namespace label {
 
 /**
@@ -52,8 +58,8 @@ class LabelFromXMLParser : public sax::FromXMLParserHelper {
 	StringLabel parseStringLabel(std::list<sax::Token>& input) const;
 
 	friend class alphabet::SymbolFromXMLParser;
-
 	friend class automaton::AutomatonFromXMLParser;
+	friend class alib::ObjectFromXMLParser;
 
 	template<typename T> friend class alib::api;
 public:
diff --git a/alib2data/src/object/ObjectFromXMLParser.cpp b/alib2data/src/object/ObjectFromXMLParser.cpp
index 07e5dab739..662f31b3ff 100644
--- a/alib2data/src/object/ObjectFromXMLParser.cpp
+++ b/alib2data/src/object/ObjectFromXMLParser.cpp
@@ -23,6 +23,21 @@ Object ObjectFromXMLParser::parseObject(std::list<sax::Token>& input) const {
 	} else if(alib::FromXMLParsers::exceptionParser.first(input)) {
 		exception::AlibException exception = alib::FromXMLParsers::exceptionParser.parseException(input);
 		tmp = std::move(exception).plunder();
+	} else if(alib::FromXMLParsers::labelParser.first(input)) {
+		label::Label label = alib::FromXMLParsers::labelParser.parseLabel(input);
+		tmp = std::move(label.getData()).plunder();
+	} else if(alib::FromXMLParsers::regexpParser.first(input)) {
+		regexp::RegExp regexp = alib::FromXMLParsers::regexpParser.parseRegExp(input);
+		tmp = std::move(regexp.getData()).plunder();
+	} else if(alib::FromXMLParsers::stringParser.first(input)) {
+		string::String string = alib::FromXMLParsers::stringParser.parseString(input);
+		tmp = std::move(string.getData()).plunder();
+	} else if(alib::FromXMLParsers::automatonParser.first(input)) {
+		automaton::Automaton automaton = alib::FromXMLParsers::automatonParser.parseAutomaton(input);
+		tmp = std::move(automaton.getData()).plunder();
+	} else if(alib::FromXMLParsers::grammarParser.first(input)) {
+		grammar::Grammar grammar = alib::FromXMLParsers::grammarParser.parseGrammar(input);
+		tmp = std::move(grammar.getData()).plunder();
 	} else {
 		throw exception::AlibException("Unknown element in xml");
 	}
diff --git a/alib2data/src/regexp/RegExpFromXMLParser.h b/alib2data/src/regexp/RegExpFromXMLParser.h
index 90779c709c..38f821267b 100644
--- a/alib2data/src/regexp/RegExpFromXMLParser.h
+++ b/alib2data/src/regexp/RegExpFromXMLParser.h
@@ -29,6 +29,12 @@ class AutomatonFromXMLParser;
 
 } /* namespace automaton */
 
+namespace alib {
+
+class ObjectFromXMLParser;
+
+} /* namespace alib */
+
 namespace regexp {
 
 /**
@@ -61,6 +67,7 @@ class RegExpFromXMLParser : public sax::FromXMLParserHelper {
 	FormalRegExp parseFormalRegExp(std::list<sax::Token>& input) const;
 
 	friend class automaton::AutomatonFromXMLParser;
+	friend class alib::ObjectFromXMLParser;
 
 	template<typename T> friend class alib::api;
 public:
diff --git a/alib2data/src/string/StringFromXMLParser.h b/alib2data/src/string/StringFromXMLParser.h
index 9ccf9dbfbe..c00242a5ed 100644
--- a/alib2data/src/string/StringFromXMLParser.h
+++ b/alib2data/src/string/StringFromXMLParser.h
@@ -32,6 +32,12 @@ class AutomatonFromXMLParser;
 
 } /* namespace automaton */
 
+namespace alib {
+
+class ObjectFromXMLParser;
+
+} /* namespace alib */
+
 namespace string {
 
 /**
@@ -49,6 +55,7 @@ class StringFromXMLParser : public sax::FromXMLParserHelper {
 	Epsilon parseEpsilon(std::list<sax::Token>& input) const;
 
 	friend class automaton::AutomatonFromXMLParser;
+	friend class alib::ObjectFromXMLParser;
 
 	template<typename T> friend class alib::api;
 public:
-- 
GitLab