summaryrefslogtreecommitdiffstats
path: root/src/uscxml/util/DOM.h
diff options
context:
space:
mode:
authorStefan Radomski <github@mintwerk.de>2017-01-30 14:30:55 (GMT)
committerStefan Radomski <github@mintwerk.de>2017-01-30 14:30:55 (GMT)
commit7659ef059fa31c780f7c4e0fb028b9fb5b400030 (patch)
tree3a1705ae2e459e5a92cb1988ed160b5bde0d4e03 /src/uscxml/util/DOM.h
parentaaec51ce3330a96f7a4f0f2ab0ca75f055223c67 (diff)
downloaduscxml-7659ef059fa31c780f7c4e0fb028b9fb5b400030.zip
uscxml-7659ef059fa31c780f7c4e0fb028b9fb5b400030.tar.gz
uscxml-7659ef059fa31c780f7c4e0fb028b9fb5b400030.tar.bz2
Unified DOM traversal and removed iostreams
Diffstat (limited to 'src/uscxml/util/DOM.h')
-rw-r--r--src/uscxml/util/DOM.h48
1 files changed, 27 insertions, 21 deletions
diff --git a/src/uscxml/util/DOM.h b/src/uscxml/util/DOM.h
index 7cacd94..49dc4de 100644
--- a/src/uscxml/util/DOM.h
+++ b/src/uscxml/util/DOM.h
@@ -22,7 +22,7 @@
#include <set>
#include <list>
-#include <iostream>
+#include <string>
#include "uscxml/Common.h"
#include <xercesc/util/XMLString.hpp>
@@ -37,8 +37,6 @@
#define LOCALNAME(elem) std::string(X((elem)->getLocalName()))
#define LOCALNAME_CAST(elem) LOCALNAME(static_cast<const DOMElement*>(elem))
-
-
namespace uscxml {
class USCXML_API DOMUtils {
@@ -53,21 +51,26 @@ public:
static bool isMember(const XERCESC_NS::DOMNode* node, const std::list<XERCESC_NS::DOMNode*>& list);
static bool isMember(const XERCESC_NS::DOMNode* node, const XERCESC_NS::DOMNodeList* list);
- static std::string xPathForNode(const XERCESC_NS::DOMNode* node,
- const std::string& ns = "");
+ static std::string xPathForNode(const XERCESC_NS::DOMNode* node, const std::string& ns = "");
static std::string idForNode(const XERCESC_NS::DOMNode* node);
static std::list<XERCESC_NS::DOMElement*> inPostFixOrder(const std::set<std::string>& elements,
const XERCESC_NS::DOMElement* root,
- const bool includeEmbeddedDoc = false);
+ const bool includeEmbeddedDoc = false) {
+ return filterElementGeneric(elements, root, POSTFIX, includeEmbeddedDoc, true);
+ }
static std::list<XERCESC_NS::DOMElement*> inDocumentOrder(const std::set<std::string>& elements,
const XERCESC_NS::DOMElement* root,
- const bool includeEmbeddedDoc = false);
+ const bool includeEmbeddedDoc = false) {
+ return filterElementGeneric(elements, root, DOCUMENT, includeEmbeddedDoc, true);
+ }
static std::list<XERCESC_NS::DOMElement*> filterChildElements(const std::string& tagName,
const XERCESC_NS::DOMElement* node,
- bool recurse = false);
+ bool recurse = false) {
+ return filterElementGeneric({ tagName }, node, (recurse ? DOCUMENT : NO_RECURSE), true, false);
+ }
static std::list<XERCESC_NS::DOMElement*> filterChildElements(const std::string& tagName,
const std::list<XERCESC_NS::DOMElement*>& nodeSet,
@@ -75,7 +78,10 @@ public:
static std::list<XERCESC_NS::DOMNode*> filterChildType(const XERCESC_NS::DOMNode::NodeType type,
const XERCESC_NS::DOMNode* node,
- bool recurse = false);
+ bool recurse = false) {
+ return filterTypeGeneric({ type }, node, (recurse ? DOCUMENT : NO_RECURSE), true, false);
+
+ }
static std::list<XERCESC_NS::DOMNode*> filterChildType(const XERCESC_NS::DOMNode::NodeType type,
const std::list<XERCESC_NS::DOMNode*>& nodeSet,
@@ -94,24 +100,24 @@ public:
const bool includeEmbeddedDoc,
const bool includeRoot);
+ static std::list<XERCESC_NS::DOMElement*> filterElementGeneric(const std::set<std::string>& elements,
+ const XERCESC_NS::DOMElement* root,
+ const Order order,
+ const bool includeEmbeddedDoc,
+ const bool includeRoot);
+
static void filterTypeGeneric(const std::set<XERCESC_NS::DOMNode::NodeType>& types,
std::list<XERCESC_NS::DOMNode*>& result,
- const XERCESC_NS::DOMElement* root,
+ const XERCESC_NS::DOMNode* root,
const Order order,
const bool includeEmbeddedDoc,
const bool includeRoot);
-#if 0
- static void inPostFixOrder(const std::set<std::string>& elements,
- const XERCESC_NS::DOMElement* root,
- const bool includeEmbeddedDoc,
- std::list<XERCESC_NS::DOMElement*>& nodes);
-
- static void inDocumentOrder(const std::set<std::string>& elements,
- const XERCESC_NS::DOMElement* root,
- const bool includeEmbeddedDoc,
- std::list<XERCESC_NS::DOMElement*>& nodes);
-#endif
+ static std::list<XERCESC_NS::DOMNode*> filterTypeGeneric(const std::set<XERCESC_NS::DOMNode::NodeType>& types,
+ const XERCESC_NS::DOMNode* root,
+ const Order order,
+ const bool includeEmbeddedDoc,
+ const bool includeRoot);
};