#ifndef JEZUK_DOM_TRAVERSAL_DOCUMENTRAVERSAL_H #define JEZUK_DOM_TRAVERSAL_DOCUMENTRAVERSAL_H ///////////////////////////////////////// // C++ DOM Traversal Implementation // // $Id$ ///////////////////////////////////////// #include #include #include #include namespace DOM { namespace Traversal { enum whatToShowFlags { SHOW_ALL = 0xFFFFFFFF, SHOW_ELEMENT = 0x00000001, SHOW_ATTRIBUTE = 0x00000002, SHOW_TEXT = 0x00000004, SHOW_CDATA_SECTION = 0x00000008, SHOW_ENTITY_REFERENCE = 0x00000010, SHOW_ENTITY = 0x00000020, SHOW_PROCESSING_INSTRUCTION = 0x00000040, SHOW_COMMENT = 0x00000080, SHOW_DOCUMENT = 0x00000100, SHOW_DOCUMENT_TYPE = 0x00000200, SHOW_DOCUMENT_FRAGMENT = 0x00000400, SHOW_NOTATION = 0x00000800 }; template class NodeIterator; template class TreeWalker; template class DocumentTraversal_impl; template class DocumentTraversal : protected DOM::Proxy { public: DocumentTraversal() : Proxy(0) { } explicit DocumentTraversal(DocumentTraversal_impl* const impl) : Proxy(impl) { } DocumentTraversal(const DocumentTraversal& rhs) : Proxy(rhs) { } explicit DocumentTraversal(const DOM::Document& rhs) : Proxy(rhs.dImpl()) { if(dynamic_cast*>(rhs.dImpl()) == 0) throw DOM::DOMException(DOM::DOMException::NOT_SUPPORTED_ERR); } // DocumentTraversal virtual ~DocumentTraversal() { } bool operator==(const DocumentTraversal& rhs) const { return Proxy::operator==(rhs); } bool operator!=(const DocumentTraversal& rhs) const { return Proxy::operator!=(rhs); } bool operator==(int dummy) const { return Proxy::operator==(dummy); } bool operator!=(int dummy) const { return Proxy::operator!=(dummy); } DocumentTraversal& operator=(const DocumentTraversal& rhs) { Proxy::operator=(rhs); return *this; } // operator= /////////////////////////////////////////////////// // DocumentTraversal methods NodeIterator createNodeIterator(DOM::Node root, int whatToShow, bool entityRefExpansion) { return NodeIterator(Impl()->createNodeIterator(root, whatToShow, 0, entityRefExpansion)); } // createNodeIterator NodeIterator createNodeIterator(DOM::Node root, int whatToShow, NodeFilter& filter, bool entityRefExpansion) { return NodeIterator(Impl()->createNodeIterator(root, whatToShow, *filter, entityRefExpansion)); } // createNodeIterator TreeWalker createTreeWalker(DOM::Node root, int whatToShow, bool entityRefExpansion) { return TreeWalker(Impl()->createTreeWalker(root, whatToShow, 0, entityRefExpansion)); } // createTreeWalker TreeWalker createTreeWalker(DOM::Node root, int whatToShow, NodeFilter& filter, bool entityRefExpansion) { return TreeWalker(Impl()->createTreeWalker(root, whatToShow, *filter, entityRefExpansion)); } // createTreeWalker private: DocumentTraversal_impl* Impl() const { return dynamic_cast*>(impl()); } }; // class DocumentTraversal ////////////////////////////////////////////////////////////// // implementation class template class NodeIterator_impl; template class TreeWalker_impl; template class DocumentTraversal_impl : virtual public DOM::Impl { public: virtual NodeIterator_impl* createNodeIterator(DOM::Node root, int whatToShow, NodeFilter* filter, bool entityRefExpansion) = 0; virtual TreeWalker_impl* createTreeWalker(DOM::Node root, int whatToShow, NodeFilter* filter, bool entityRefExpansion) = 0; }; // class DocumentTraveral_impl } // namespace Traversal } // namespace DOM #endif // end of file