diff options
author | William R. Otte <wotte@dre.vanderbilt.edu> | 2006-01-13 20:41:12 +0000 |
---|---|---|
committer | William R. Otte <wotte@dre.vanderbilt.edu> | 2006-01-13 20:41:12 +0000 |
commit | e8fccfeee49f9a756cfe78ca6837e4163899ab7f (patch) | |
tree | 08d2ac0c94a6bd694493c916a95956e533b1c95e /TAO/CIAO/tools | |
parent | 74c26eddd15c00f1ebd756d6a2b8b2e8280bc752 (diff) | |
download | ATCD-e8fccfeee49f9a756cfe78ca6837e4163899ab7f.tar.gz |
Fri Jan 13 20:39:21 UTC 2006 William Otte <wotte@dre.vanderbilt.edu>
Diffstat (limited to 'TAO/CIAO/tools')
-rw-r--r-- | TAO/CIAO/tools/Config_Handlers/XSCRT/Parser.hpp | 5 | ||||
-rw-r--r-- | TAO/CIAO/tools/Config_Handlers/XSCRT/XML.hpp | 31 |
2 files changed, 32 insertions, 4 deletions
diff --git a/TAO/CIAO/tools/Config_Handlers/XSCRT/Parser.hpp b/TAO/CIAO/tools/Config_Handlers/XSCRT/Parser.hpp index 66fd4b6db5c..5fa1e827f8d 100644 --- a/TAO/CIAO/tools/Config_Handlers/XSCRT/Parser.hpp +++ b/TAO/CIAO/tools/Config_Handlers/XSCRT/Parser.hpp @@ -30,8 +30,7 @@ namespace XSCRT XML::Element<C> next_element () { - return XML::Element<C> ( - dynamic_cast<xercesc::DOMElement*> (e_->item (ei_++))); + return XML::Element<C> (XML::dom_cast <xercesc::DOMElement*> (e_->item (ei_++))); } bool @@ -44,7 +43,7 @@ namespace XSCRT next_attribute () { return XML::Attribute<C> ( - dynamic_cast<xercesc::DOMAttr*> (a_->item (ai_++))); + XML::dom_cast <xercesc::DOMAttr*> (a_->item (ai_++))); } private: diff --git a/TAO/CIAO/tools/Config_Handlers/XSCRT/XML.hpp b/TAO/CIAO/tools/Config_Handlers/XSCRT/XML.hpp index 4b440803a0f..588cb61dc84 100644 --- a/TAO/CIAO/tools/Config_Handlers/XSCRT/XML.hpp +++ b/TAO/CIAO/tools/Config_Handlers/XSCRT/XML.hpp @@ -144,6 +144,35 @@ namespace XSCRT template <typename C> std::basic_string<C> ns_prefix (std::basic_string<C> const& ns, Element<C> const& e); + + // Casting helpers, made necessary by the Xerces project's braindead + // avoidance of RTTI. + template <typename DERIVED> struct dom_traits; + + // Specializations for different node types + template <> + struct dom_traits<xercesc::DOMElement *> + { + enum { node_type = xercesc::DOMNode::ELEMENT_NODE }; + }; + + template <> + struct dom_traits<xercesc::DOMAttr *> + { + enum { node_type = xercesc::DOMNode::ATTRIBUTE_NODE }; + }; + + template <typename DERIVED_PTR> + DERIVED_PTR dom_cast (xercesc::DOMNode *node) + { + DERIVED_PTR elem = 0; + if ((node != 0) && + (node->getNodeType () == dom_traits<DERIVED_PTR>::node_type)) + { + elem = reinterpret_cast <DERIVED_PTR> (node); + } + return elem; + } template <typename C> class Element @@ -221,7 +250,7 @@ namespace XSCRT Element<C> parent () const { - return dynamic_cast<xercesc::DOMElement const*>(ce_->getParentNode ()); + return dom_cast <xercesc::DOMElement const*>(ce_->getParentNode ()); } public: |