From 93ddc30f793188a23510b682a0af3f22611d9d85 Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Sat, 14 Jun 2014 09:54:53 +0200
Subject: [PATCH] use static composers and parsers in fact. classes

---
 alib2/src/ExceptionFromXMLParser.cpp       | 14 +-------------
 alib2/src/ExceptionFromXMLParser.h         |  8 +++-----
 alib2/src/ExceptionToXMLComposer.cpp       |  4 ++--
 alib2/src/ExceptionToXMLComposer.h         |  4 ++--
 alib2/src/FromXMLParsers.cpp               |  1 +
 alib2/src/FromXMLParsers.h                 |  2 ++
 alib2/src/ToXMLComposers.cpp               |  1 +
 alib2/src/ToXMLComposers.h                 |  2 ++
 alib2/src/alphabet/SymbolFromXMLParser.cpp |  1 +
 alib2/src/factory/LabelFactory.cpp         | 15 ++++++---------
 alib2/src/factory/LabelFactory.h           |  2 ++
 alib2/src/factory/RegExpFactory.cpp        | 13 +++++--------
 alib2/src/factory/RegExpFactory.h          |  2 ++
 alib2/src/factory/StringFactory.cpp        | 13 +++++--------
 alib2/src/factory/StringFactory.h          |  2 ++
 alib2/src/factory/SymbolFactory.cpp        | 13 +++++--------
 alib2/src/factory/SymbolFactory.h          |  2 ++
 17 files changed, 44 insertions(+), 55 deletions(-)

diff --git a/alib2/src/ExceptionFromXMLParser.cpp b/alib2/src/ExceptionFromXMLParser.cpp
index 10bfd63b21..587f960026 100644
--- a/alib2/src/ExceptionFromXMLParser.cpp
+++ b/alib2/src/ExceptionFromXMLParser.cpp
@@ -11,7 +11,7 @@
 
 namespace alib {
 
-AlibException ExceptionFromXMLParser::parse(std::list<sax::Token>& input) {
+AlibException ExceptionFromXMLParser::parse(std::list<sax::Token>& input) const {
 	popToken(input, sax::Token::START_ELEMENT, "exception");
 	std::string cause = "";
 	if (input.front().getType() == sax::Token::CHARACTER) {
@@ -22,16 +22,4 @@ AlibException ExceptionFromXMLParser::parse(std::list<sax::Token>& input) {
 	return AlibException(cause);
 }
 
-bool ExceptionFromXMLParser::isToken(std::list<sax::Token>& input, sax::Token::TokenType type, std::string data) {
-	return input.front().getType() == type && input.front().getData() == data;
-}
-
-void ExceptionFromXMLParser::popToken(std::list<sax::Token>& input, sax::Token::TokenType type, std::string data) {
-	if (isToken(input, type, data)) {
-		input.pop_front();
-	} else {
-		throw sax::ParserException(sax::Token(data, type), input.front());
-	}
-}
-
 } /* namespace alib */
diff --git a/alib2/src/ExceptionFromXMLParser.h b/alib2/src/ExceptionFromXMLParser.h
index eb8e0d8d73..3dbd8adfaf 100644
--- a/alib2/src/ExceptionFromXMLParser.h
+++ b/alib2/src/ExceptionFromXMLParser.h
@@ -9,17 +9,15 @@
 #define EXCEPTION_FROM_XML_PARSER_H_
 
 #include <list>
+#include "sax/FromXMLParser.h"
 #include "AlibException.h"
-#include "sax/Token.h"
 
 namespace alib {
 
 /**
  * Parser used to get String from XML parsed into list of tokens.
  */
-class ExceptionFromXMLParser {
-	bool isToken(std::list<sax::Token> &input, sax::Token::TokenType type, std::string data);
-	void popToken(std::list<sax::Token> &input, sax::Token::TokenType type, std::string data);
+class ExceptionFromXMLParser : public sax::FromXMLParser {
 
 public:
 	/**
@@ -28,7 +26,7 @@ public:
 	 * @return AlibException
 	 * @throws ParserException when an error occurs
 	 */
-	AlibException parse(std::list<sax::Token>& input);
+	AlibException parse(std::list<sax::Token>& input) const;
 
 };
 
diff --git a/alib2/src/ExceptionToXMLComposer.cpp b/alib2/src/ExceptionToXMLComposer.cpp
index d480a2b1b0..95c45fe59c 100644
--- a/alib2/src/ExceptionToXMLComposer.cpp
+++ b/alib2/src/ExceptionToXMLComposer.cpp
@@ -9,7 +9,7 @@
 
 namespace alib {
 
-void ExceptionToXMLComposer::Visit(void* userData, const AlibException& exception) {
+void ExceptionToXMLComposer::Visit(void* userData, const AlibException& exception) const {
 	std::list<sax::Token> &out = *((std::list<sax::Token>*) userData);
 	
 	out.push_back(sax::Token("exception", sax::Token::START_ELEMENT));
@@ -17,7 +17,7 @@ void ExceptionToXMLComposer::Visit(void* userData, const AlibException& exceptio
 	out.push_back(sax::Token("exception", sax::Token::END_ELEMENT));
 }
 
-std::list<sax::Token> ExceptionToXMLComposer::compose(const AlibException& exception) {
+std::list<sax::Token> ExceptionToXMLComposer::compose(const AlibException& exception) const {
 	std::list<sax::Token> out;
 	Visit((void*) &out, exception);
 	return out;
diff --git a/alib2/src/ExceptionToXMLComposer.h b/alib2/src/ExceptionToXMLComposer.h
index e262e3aab5..430a63b9b7 100644
--- a/alib2/src/ExceptionToXMLComposer.h
+++ b/alib2/src/ExceptionToXMLComposer.h
@@ -18,14 +18,14 @@ namespace alib {
  * This class contains methods to print XML representation of string to the output stream.
  */
 class ExceptionToXMLComposer {
-	static void Visit(void* userData, const AlibException& exception);
+	void Visit(void* userData, const AlibException& exception) const;
 public:
 	/**
 	 * Prints XML representation of AlibException to the output stream.
 	 * @param string Exception to print
 	 * @param out output stream to which print the String
 	 */
-	std::list<sax::Token> compose(const AlibException& exception);
+	std::list<sax::Token> compose(const AlibException& exception) const;
 };
 
 } /* namespace alib */
diff --git a/alib2/src/FromXMLParsers.cpp b/alib2/src/FromXMLParsers.cpp
index dfa40a1af3..b1921a97c1 100644
--- a/alib2/src/FromXMLParsers.cpp
+++ b/alib2/src/FromXMLParsers.cpp
@@ -14,5 +14,6 @@ const alphabet::SymbolFromXMLParser FromXMLParsers::symbolParser;
 const regexp::RegExpFromXMLParser FromXMLParsers::regexpParser;
 const string::StringFromXMLParser FromXMLParsers::stringParser;
 const automaton::AutomatonFromXMLParser FromXMLParsers::automatonParser;
+const alib::ExceptionFromXMLParser FromXMLParsers::exceptionParser;
 
 } /* namespace alib */
diff --git a/alib2/src/FromXMLParsers.h b/alib2/src/FromXMLParsers.h
index f28400e701..7d1e9f8c2b 100644
--- a/alib2/src/FromXMLParsers.h
+++ b/alib2/src/FromXMLParsers.h
@@ -13,6 +13,7 @@
 #include "regexp/RegExpFromXMLParser.h"
 #include "string/StringFromXMLParser.h"
 #include "automaton/AutomatonFromXMLParser.h"
+#include "ExceptionFromXMLParser.h"
 
 namespace alib {
 
@@ -27,6 +28,7 @@ public:
 	static const regexp::RegExpFromXMLParser regexpParser;
 	static const string::StringFromXMLParser stringParser;
 	static const automaton::AutomatonFromXMLParser automatonParser;
+	static const alib::ExceptionFromXMLParser exceptionParser;
 
 };
 
diff --git a/alib2/src/ToXMLComposers.cpp b/alib2/src/ToXMLComposers.cpp
index d9283a3c77..ff59114d7d 100644
--- a/alib2/src/ToXMLComposers.cpp
+++ b/alib2/src/ToXMLComposers.cpp
@@ -14,5 +14,6 @@ const alphabet::SymbolToXMLComposer ToXMLComposers::symbolComposer;
 const regexp::RegExpToXMLComposer ToXMLComposers::regexpComposer;
 const string::StringToXMLComposer ToXMLComposers::stringComposer;
 const automaton::AutomatonToXMLComposer ToXMLComposers::automatonComposer;
+const alib::ExceptionToXMLComposer ToXMLComposers::exceptionComposer;
 
 } /* namespace alib */
diff --git a/alib2/src/ToXMLComposers.h b/alib2/src/ToXMLComposers.h
index 9882e65283..4fdb81f08f 100644
--- a/alib2/src/ToXMLComposers.h
+++ b/alib2/src/ToXMLComposers.h
@@ -13,6 +13,7 @@
 #include "regexp/RegExpToXMLComposer.h"
 #include "string/StringToXMLComposer.h"
 #include "automaton/AutomatonToXMLComposer.h"
+#include "ExceptionToXMLComposer.h"
 
 namespace alib {
 
@@ -27,6 +28,7 @@ public:
 	static const regexp::RegExpToXMLComposer regexpComposer;
 	static const string::StringToXMLComposer stringComposer;
 	static const automaton::AutomatonToXMLComposer automatonComposer;
+	static const alib::ExceptionToXMLComposer exceptionComposer;
 
 };
 
diff --git a/alib2/src/alphabet/SymbolFromXMLParser.cpp b/alib2/src/alphabet/SymbolFromXMLParser.cpp
index 5b59ae6893..eae1ec0f8a 100644
--- a/alib2/src/alphabet/SymbolFromXMLParser.cpp
+++ b/alib2/src/alphabet/SymbolFromXMLParser.cpp
@@ -6,6 +6,7 @@
  */
 
 #include "SymbolFromXMLParser.h"
+
 #include "../sax/ParserException.h"
 #include "BlankSymbol.h"
 #include "LabeledSymbol.h"
diff --git a/alib2/src/factory/LabelFactory.cpp b/alib2/src/factory/LabelFactory.cpp
index f0b601e1ad..f3f60ec401 100644
--- a/alib2/src/factory/LabelFactory.cpp
+++ b/alib2/src/factory/LabelFactory.cpp
@@ -5,13 +5,12 @@
  *      Author: Jan Travnicek
  */
 
-#include <iostream>
+#include "LabelFactory.h"
 
 #include "../sax/SaxParseInterface.h"
 #include "../sax/SaxComposeInterface.h"
-#include "LabelFactory.h"
-#include "../label/LabelFromXMLParser.h"
-#include "../label/LabelToXMLComposer.h"
+#include "../FromXMLParsers.h"
+#include "../ToXMLComposers.h"
 
 namespace label {
 
@@ -37,12 +36,11 @@ Label LabelFactory::fromStream(std::istream& in) {
 }
 
 Label LabelFactory::parse(std::list<sax::Token> tokens) {
-	LabelFromXMLParser parser;
-	return parser.parse(tokens);
+	return alib::FromXMLParsers::labelParser.parse(tokens);
 }
 
 void LabelFactory::toFile(const Label& symbol, const std::string& filename) {
-	std::list<sax::Token> tokens = compose(symbol);
+	std::list<sax::Token> tokens 	= compose(symbol);
 	sax::SaxComposeInterface::printFile(filename, tokens);
 }
 
@@ -63,8 +61,7 @@ void LabelFactory::toStream(const Label& symbol, std::ostream& out) {
 }
 
 std::list<sax::Token> LabelFactory::compose(const Label& symbol) {
-	LabelToXMLComposer composer;
-	return composer.compose(symbol);
+	return alib::ToXMLComposers::labelComposer.compose(symbol);
 }
 
 } /* namespace label */
diff --git a/alib2/src/factory/LabelFactory.h b/alib2/src/factory/LabelFactory.h
index d4ecc58f18..7f35790d23 100644
--- a/alib2/src/factory/LabelFactory.h
+++ b/alib2/src/factory/LabelFactory.h
@@ -8,6 +8,8 @@
 #ifndef LABEL_FACTORY_H_
 #define LABEL_FACTORY_H_
 
+#include <string>
+#include <list>
 #include "../sax/Token.h"
 #include "../label/Label.h"
 
diff --git a/alib2/src/factory/RegExpFactory.cpp b/alib2/src/factory/RegExpFactory.cpp
index 105d4c6412..72235a3002 100644
--- a/alib2/src/factory/RegExpFactory.cpp
+++ b/alib2/src/factory/RegExpFactory.cpp
@@ -5,13 +5,12 @@
  *      Author: Martin Zak
  */
 
-#include <iostream>
+#include "RegExpFactory.h"
 
 #include "../sax/SaxParseInterface.h"
 #include "../sax/SaxComposeInterface.h"
-#include "RegExpFactory.h"
-#include "../regexp/RegExpFromXMLParser.h"
-#include "../regexp/RegExpToXMLComposer.h"
+#include "../FromXMLParsers.h"
+#include "../ToXMLComposers.h"
 
 namespace regexp {
 
@@ -37,8 +36,7 @@ RegExp RegExpFactory::fromStream(std::istream& in) {
 }
 
 RegExp RegExpFactory::parse(std::list<sax::Token> tokens) {
-	RegExpFromXMLParser parser;
-	return parser.parse(tokens);
+	return alib::FromXMLParsers::regexpParser.parse(tokens);
 }
 
 void RegExpFactory::toFile(const RegExp& regexp, const std::string& filename) {
@@ -63,8 +61,7 @@ void RegExpFactory::toStream(const RegExp& regexp, std::ostream& out) {
 }
 
 std::list<sax::Token> RegExpFactory::compose(const RegExp& regexp) {
-	RegExpToXMLComposer composer;
-	return composer.compose(regexp);
+	return alib::ToXMLComposers::regexpComposer.compose(regexp);
 }
 
 } /* namespace regexp */
diff --git a/alib2/src/factory/RegExpFactory.h b/alib2/src/factory/RegExpFactory.h
index 818de5012c..a96abfd84b 100644
--- a/alib2/src/factory/RegExpFactory.h
+++ b/alib2/src/factory/RegExpFactory.h
@@ -8,6 +8,8 @@
 #ifndef REG_EXP_FACTORY_H_
 #define REG_EXP_FACTORY_H_
 
+#include <string>
+#include <list>
 #include "../sax/Token.h"
 #include "../regexp/RegExp.h"
 
diff --git a/alib2/src/factory/StringFactory.cpp b/alib2/src/factory/StringFactory.cpp
index aeac793448..13ff353bf2 100644
--- a/alib2/src/factory/StringFactory.cpp
+++ b/alib2/src/factory/StringFactory.cpp
@@ -5,13 +5,12 @@
  *      Author: Jan Travnicek
  */
 
-#include <iostream>
+#include "StringFactory.h"
 
 #include "../sax/SaxParseInterface.h"
 #include "../sax/SaxComposeInterface.h"
-#include "StringFactory.h"
-#include "../string/StringFromXMLParser.h"
-#include "../string/StringToXMLComposer.h"
+#include "../FromXMLParsers.h"
+#include "../ToXMLComposers.h"
 
 namespace string {
 
@@ -37,8 +36,7 @@ String StringFactory::fromStream(std::istream& in) {
 }
 
 String StringFactory::parse(std::list<sax::Token> tokens) {
-	StringFromXMLParser parser;
-	return parser.parse(tokens);
+	return alib::FromXMLParsers::stringParser.parse(tokens);
 }
 
 void StringFactory::toFile(const String& string, const std::string& filename) {
@@ -63,8 +61,7 @@ void StringFactory::toStream(const String& string, std::ostream& out) {
 }
 
 std::list<sax::Token> StringFactory::compose(const String& string) {
-	StringToXMLComposer composer;
-	return composer.compose(string);
+	return alib::ToXMLComposers::stringComposer.compose(string);
 }
 
 } /* namespace string */
diff --git a/alib2/src/factory/StringFactory.h b/alib2/src/factory/StringFactory.h
index 42679ec9d3..8f3e3e9e75 100644
--- a/alib2/src/factory/StringFactory.h
+++ b/alib2/src/factory/StringFactory.h
@@ -8,6 +8,8 @@
 #ifndef STRING_FACTORY_H_
 #define STRING_FACTORY_H_
 
+#include <string>
+#include <list>
 #include "../sax/Token.h"
 #include "../string/String.h"
 
diff --git a/alib2/src/factory/SymbolFactory.cpp b/alib2/src/factory/SymbolFactory.cpp
index c5a2a26e54..d007df997c 100644
--- a/alib2/src/factory/SymbolFactory.cpp
+++ b/alib2/src/factory/SymbolFactory.cpp
@@ -5,13 +5,12 @@
  *      Author: Jan Travnicek
  */
 
-#include <iostream>
+#include "SymbolFactory.h"
 
 #include "../sax/SaxParseInterface.h"
 #include "../sax/SaxComposeInterface.h"
-#include "SymbolFactory.h"
-#include "../alphabet/SymbolFromXMLParser.h"
-#include "../alphabet/SymbolToXMLComposer.h"
+#include "../FromXMLParsers.h"
+#include "../ToXMLComposers.h"
 
 namespace alphabet {
 
@@ -37,8 +36,7 @@ Symbol SymbolFactory::fromStream(std::istream& in) {
 }
 
 Symbol SymbolFactory::parse(std::list<sax::Token> tokens) {
-	SymbolFromXMLParser parser;
-	return parser.parse(tokens);
+	return alib::FromXMLParsers::symbolParser.parse(tokens);
 }
 
 void SymbolFactory::toFile(const Symbol& symbol, const std::string& filename) {
@@ -63,8 +61,7 @@ void SymbolFactory::toStream(const Symbol& symbol, std::ostream& out) {
 }
 
 std::list<sax::Token> SymbolFactory::compose(const Symbol& symbol) {
-	SymbolToXMLComposer composer;
-	return composer.compose(symbol);
+	return alib::ToXMLComposers::symbolComposer.compose(symbol);
 }
 
 } /* namespace alphabet */
diff --git a/alib2/src/factory/SymbolFactory.h b/alib2/src/factory/SymbolFactory.h
index 4742b87335..b90b4ec921 100644
--- a/alib2/src/factory/SymbolFactory.h
+++ b/alib2/src/factory/SymbolFactory.h
@@ -8,6 +8,8 @@
 #ifndef SYMBOL_FACTORY_H_
 #define SYMBOL_FACTORY_H_
 
+#include <string>
+#include <list>
 #include "../sax/Token.h"
 #include "../alphabet/Symbol.h"
 
-- 
GitLab