From d073e9d261bb7134723e77f142603a555f8f9629 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Remko=20Tron=C3=A7on?= Date: Sat, 12 Feb 2011 13:48:14 +0100 Subject: Share locale object between delay parsers. diff --git a/Swiften/Parser/PayloadParsers/DelayParser.cpp b/Swiften/Parser/PayloadParsers/DelayParser.cpp index b6fa240..8e8abff 100644 --- a/Swiften/Parser/PayloadParsers/DelayParser.cpp +++ b/Swiften/Parser/PayloadParsers/DelayParser.cpp @@ -12,15 +12,13 @@ namespace Swift { -DelayParser::DelayParser() : level_(0) { +DelayParser::DelayParser(const std::locale& locale) : locale(locale), level_(0) { } boost::posix_time::ptime DelayParser::dateFromString(const String& string) { - boost::posix_time::time_input_facet* facet = new boost::posix_time::time_input_facet("%Y-%m-%d %H:%M:%S%F%Q"); - boost::posix_time::ptime result(boost::posix_time::not_a_date_time); - std::locale dateLocale(std::locale::classic(), facet); std::istringstream stream(string.getUTF8String()); - stream.imbue(dateLocale); + stream.imbue(locale); + boost::posix_time::ptime result(boost::posix_time::not_a_date_time); stream >> result; return result; } diff --git a/Swiften/Parser/PayloadParsers/DelayParser.h b/Swiften/Parser/PayloadParsers/DelayParser.h index ce92dc2..b2fbdea 100644 --- a/Swiften/Parser/PayloadParsers/DelayParser.h +++ b/Swiften/Parser/PayloadParsers/DelayParser.h @@ -12,7 +12,7 @@ namespace Swift { class DelayParser : public GenericPayloadParser { public: - DelayParser(); + DelayParser(const std::locale& locale); virtual void handleStartElement(const String& element, const String&, const AttributeMap& attributes); virtual void handleEndElement(const String& element, const String&); @@ -20,6 +20,9 @@ namespace Swift { private: boost::posix_time::ptime dateFromString(const String& string); + + private: + std::locale locale; int level_; }; } diff --git a/Swiften/Parser/PayloadParsers/DelayParserFactory.cpp b/Swiften/Parser/PayloadParsers/DelayParserFactory.cpp new file mode 100644 index 0000000..19d0530 --- /dev/null +++ b/Swiften/Parser/PayloadParsers/DelayParserFactory.cpp @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2010 Kevin Smith + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#include + +#include + +namespace Swift { + +DelayParserFactory::DelayParserFactory() { + boost::posix_time::time_input_facet* facet = new boost::posix_time::time_input_facet("%Y-%m-%d %H:%M:%S%F%Q"); + locale = std::locale(std::locale::classic(), facet); +} + +} diff --git a/Swiften/Parser/PayloadParsers/DelayParserFactory.h b/Swiften/Parser/PayloadParsers/DelayParserFactory.h index 8b1f91e..f3dd328 100644 --- a/Swiften/Parser/PayloadParsers/DelayParserFactory.h +++ b/Swiften/Parser/PayloadParsers/DelayParserFactory.h @@ -14,16 +14,17 @@ namespace Swift { class DelayParserFactory : public PayloadParserFactory { public: - DelayParserFactory() { - } + DelayParserFactory(); virtual bool canParse(const String& /*element*/, const String& ns, const AttributeMap&) const { return ns == "urn:xmpp:delay"; } virtual PayloadParser* createPayloadParser() { - return new DelayParser(); + return new DelayParser(locale); } + private: + std::locale locale; }; } diff --git a/Swiften/Parser/SConscript b/Swiften/Parser/SConscript index 6e77109..90b3b78 100644 --- a/Swiften/Parser/SConscript +++ b/Swiften/Parser/SConscript @@ -25,6 +25,7 @@ sources = [ "PayloadParsers/CapsInfoParser.cpp", "PayloadParsers/DiscoInfoParser.cpp", "PayloadParsers/DiscoItemsParser.cpp", + "PayloadParsers/DelayParserFactory.cpp", "PayloadParsers/ErrorParser.cpp", "PayloadParsers/FormParser.cpp", "PayloadParsers/IBBParser.cpp", -- cgit v0.10.2-6-g49f6