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