summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Swiften/Parser/GenericPayloadTreeParser.cpp8
-rw-r--r--Swiften/Parser/GenericPayloadTreeParser.h8
-rw-r--r--Swiften/Parser/SConscript2
-rw-r--r--Swiften/Parser/Tree/NullParserElement.cpp13
-rw-r--r--Swiften/Parser/Tree/NullParserElement.h6
-rw-r--r--Swiften/Parser/Tree/ParserElement.cpp8
-rw-r--r--Swiften/Parser/Tree/ParserElement.h50
7 files changed, 49 insertions, 46 deletions
diff --git a/Swiften/Parser/GenericPayloadTreeParser.cpp b/Swiften/Parser/GenericPayloadTreeParser.cpp
deleted file mode 100644
index 0e25cbc..0000000
--- a/Swiften/Parser/GenericPayloadTreeParser.cpp
+++ /dev/null
@@ -1,8 +0,0 @@
-/*
- * Copyright (c) 2011 Kevin Smith
- * Licensed under the GNU General Public License v3.
- * See Documentation/Licenses/GPLv3.txt for more information.
- */
-
-#include <Swiften/Parser/GenericPayloadTreeParser.h>
-
diff --git a/Swiften/Parser/GenericPayloadTreeParser.h b/Swiften/Parser/GenericPayloadTreeParser.h
index a1946ee..df6d022 100644
--- a/Swiften/Parser/GenericPayloadTreeParser.h
+++ b/Swiften/Parser/GenericPayloadTreeParser.h
@@ -13,13 +13,8 @@
#include <Swiften/Parser/GenericPayloadParser.h>
#include <Swiften/Parser/Tree/ParserElement.h>
-#include <Swiften/Parser/Tree/NullParserElement.h>
-
-#include <iostream>
namespace Swift {
-
-
/**
* Generic parser offering something a bit like a DOM to work with.
*/
@@ -30,7 +25,8 @@ namespace Swift {
if (!root_) {
root_ = boost::make_shared<ParserElement>(element, xmlns, attributes);
elementStack_.push_back(root_);
- } else {
+ }
+ else {
ParserElement::ref current = *elementStack_.rbegin();
elementStack_.push_back(current->addChild(element, xmlns, attributes));
}
diff --git a/Swiften/Parser/SConscript b/Swiften/Parser/SConscript
index b9fcebb..e6c16d1 100644
--- a/Swiften/Parser/SConscript
+++ b/Swiften/Parser/SConscript
@@ -14,7 +14,6 @@ sources = [
"CompressParser.cpp",
"ElementParser.cpp",
"IQParser.cpp",
- "GenericPayloadTreeParser.cpp",
"MessageParser.cpp",
"PayloadParser.cpp",
"StanzaAckParser.cpp",
@@ -67,6 +66,7 @@ sources = [
"StreamResumeParser.cpp",
"StreamResumedParser.cpp",
"Tree/ParserElement.cpp",
+ "Tree/NullParserElement.cpp",
"XMLParser.cpp",
"XMLParserClient.cpp",
"XMLParserFactory.cpp",
diff --git a/Swiften/Parser/Tree/NullParserElement.cpp b/Swiften/Parser/Tree/NullParserElement.cpp
new file mode 100644
index 0000000..7dda9c3
--- /dev/null
+++ b/Swiften/Parser/Tree/NullParserElement.cpp
@@ -0,0 +1,13 @@
+/*
+ * Copyright (c) 2011 Kevin Smith
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#include <Swiften/Parser/Tree/NullParserElement.h>
+
+namespace Swift {
+
+boost::shared_ptr<NullParserElement> NullParserElement::element = boost::make_shared<NullParserElement>();
+
+}
diff --git a/Swiften/Parser/Tree/NullParserElement.h b/Swiften/Parser/Tree/NullParserElement.h
index 93c0662..8dd9bc1 100644
--- a/Swiften/Parser/Tree/NullParserElement.h
+++ b/Swiften/Parser/Tree/NullParserElement.h
@@ -10,10 +10,12 @@
#include <Swiften/Parser/Tree/ParserElement.h>
namespace Swift {
-
class NullParserElement : public ParserElement {
public:
NullParserElement() : ParserElement("", "", AttributeMap()) {}
- virtual operator bool() {return false;};
+
+ virtual operator bool() { return false; }
+
+ static boost::shared_ptr<NullParserElement> element;
};
}
diff --git a/Swiften/Parser/Tree/ParserElement.cpp b/Swiften/Parser/Tree/ParserElement.cpp
index 0baf709..9d9b9b6 100644
--- a/Swiften/Parser/Tree/ParserElement.cpp
+++ b/Swiften/Parser/Tree/ParserElement.cpp
@@ -13,15 +13,9 @@
namespace Swift{
ParserElement::ParserElement(const std::string& name, const std::string& xmlns, const AttributeMap& attributes) : name_(name), xmlns_(xmlns), attributes_(attributes) {
-
}
ParserElement::~ParserElement() {
-
-}
-
-ParserElement::operator bool() {
- return true;
}
ParserElement::ref ParserElement::addChild(const std::string& name, const std::string& xmlns, const AttributeMap& attributes) {
@@ -52,7 +46,7 @@ std::vector<ParserElement::ref> ParserElement::getChildren(const std::string& na
ParserElement::ref ParserElement::getChild(const std::string& name, const std::string& xmlns) const {
std::vector<ParserElement::ref> results = getChildren(name, xmlns);
- ParserElement::ref result = results.empty() ? boost::make_shared<NullParserElement>() : results[0];
+ ParserElement::ref result = results.empty() ? NullParserElement::element : results[0];
return result;
}
diff --git a/Swiften/Parser/Tree/ParserElement.h b/Swiften/Parser/Tree/ParserElement.h
index 7229c5b..b3ad785 100644
--- a/Swiften/Parser/Tree/ParserElement.h
+++ b/Swiften/Parser/Tree/ParserElement.h
@@ -15,27 +15,33 @@
#include <boost/smart_ptr/make_shared.hpp>
namespace Swift {
-class ParserElement {
- public:
- typedef boost::shared_ptr<ParserElement> ref;
- ParserElement(const std::string& name, const std::string& xmlns, const AttributeMap& attributes);
- virtual ~ParserElement();
- virtual operator bool();
- ParserElement::ref addChild(const std::string& name, const std::string& xmlns, const AttributeMap& attributes);
- void appendCharacterData(const std::string& data);
- const std::string& getText() const {return text_;};
- const std::string& getName() const {return name_;};
- const std::string& getNamespace() const {return xmlns_;};
- std::vector<ParserElement::ref> getChildren(const std::string& name, const std::string& xmlns) const;
- ParserElement::ref getChild(const std::string& name, const std::string& xmlns) const;
- const AttributeMap& getAttributes() const {return attributes_;}
- private:
- std::vector<ParserElement::ref> children_;
- std::string name_;
- std::string xmlns_;
- AttributeMap attributes_;
- std::string text_;
-
-};
+ class ParserElement {
+ public:
+ typedef boost::shared_ptr<ParserElement> ref;
+ ParserElement(const std::string& name, const std::string& xmlns, const AttributeMap& attributes);
+ virtual ~ParserElement();
+
+ const std::string& getText() const { return text_; }
+ const std::string& getName() const { return name_; }
+ const std::string& getNamespace() const { return xmlns_; }
+ const AttributeMap& getAttributes() const { return attributes_; }
+
+ ParserElement::ref addChild(const std::string& name, const std::string& xmlns, const AttributeMap& attributes);
+ void appendCharacterData(const std::string& data);
+
+ std::vector<ParserElement::ref> getChildren(const std::string& name, const std::string& xmlns) const;
+ ParserElement::ref getChild(const std::string& name, const std::string& xmlns) const;
+
+ virtual operator bool() {
+ return true;
+ }
+
+ private:
+ std::vector<ParserElement::ref> children_;
+ std::string name_;
+ std::string xmlns_;
+ AttributeMap attributes_;
+ std::string text_;
+ };
}