/* * Copyright (c) 2010 Remko Tronçon * Licensed under the GNU General Public License v3. * See Documentation/Licenses/GPLv3.txt for more information. */ #ifndef SWIFTEN_StanzaParser_H #define SWIFTEN_StanzaParser_H #include #include #include "Swiften/Elements/Stanza.h" #include "Swiften/Parser/ElementParser.h" #include "Swiften/Parser/AttributeMap.h" namespace Swift { class PayloadParser; class PayloadParserFactoryCollection; class StanzaParser : public ElementParser, public boost::noncopyable { public: StanzaParser(PayloadParserFactoryCollection* factories); ~StanzaParser(); void handleStartElement(const std::string& element, const std::string& ns, const AttributeMap& attributes); void handleEndElement(const std::string& element, const std::string& ns); void handleCharacterData(const std::string& data); virtual boost::shared_ptr getElement() const = 0; virtual void handleStanzaAttributes(const AttributeMap&) {} virtual boost::shared_ptr getStanza() const { return boost::dynamic_pointer_cast(getElement()); } private: bool inPayload() const { return currentDepth_ > 1; } bool inStanza() const { return currentDepth_ > 0; } private: int currentDepth_; PayloadParserFactoryCollection* factories_; std::auto_ptr currentPayloadParser_; }; } #endif