SourceForge.net Logo

DOMNode.hpp

Go to the documentation of this file.
00001 /*
00002  * Licensed to the Apache Software Foundation (ASF) under one or more
00003  * contributor license agreements.  See the NOTICE file distributed with
00004  * this work for additional information regarding copyright ownership.
00005  * The ASF licenses this file to You under the Apache License, Version 2.0
00006  * (the "License"); you may not use this file except in compliance with
00007  * the License.  You may obtain a copy of the License at
00008  *
00009  *      http://www.apache.org/licenses/LICENSE-2.0
00010  *
00011  * Unless required by applicable law or agreed to in writing, software
00012  * distributed under the License is distributed on an "AS IS" BASIS,
00013  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00014  * See the License for the specific language governing permissions and
00015  * limitations under the License.
00016  */
00017 
00018 /*
00019  * $Id: DOMNode.hpp 671894 2008-06-26 13:29:21Z borisk $
00020  */
00021 
00022 #if !defined(XERCESC_INCLUDE_GUARD_DOMNODE_HPP)
00023 #define XERCESC_INCLUDE_GUARD_DOMNODE_HPP
00024 
00025 #include <xercesc/util/XercesDefs.hpp>
00026 
00027 XERCES_CPP_NAMESPACE_BEGIN
00028 
00029 
00030 class DOMDocument;
00031 class DOMNamedNodeMap;
00032 class DOMNodeList;
00033 class DOMUserDataHandler;
00034 
00139 class  CDOM_EXPORT DOMNode {
00140 protected:
00141     // -----------------------------------------------------------------------
00142     //  Hidden constructors
00143     // -----------------------------------------------------------------------
00146     DOMNode() {}
00147     DOMNode(const DOMNode &) {}
00149 
00150 private:
00151     // -----------------------------------------------------------------------
00152     // Unimplemented constructors and operators
00153     // -----------------------------------------------------------------------
00156     DOMNode & operator = (const DOMNode &);
00158 
00159 public:
00160     // -----------------------------------------------------------------------
00161     //  All constructors are hidden, just the destructor is available
00162     // -----------------------------------------------------------------------
00169     virtual ~DOMNode() {};
00171 
00172     // -----------------------------------------------------------------------
00173     //  Class Types
00174     // -----------------------------------------------------------------------
00182     enum NodeType {
00183         ELEMENT_NODE                = 1,
00184         ATTRIBUTE_NODE              = 2,
00185         TEXT_NODE                   = 3,
00186         CDATA_SECTION_NODE          = 4,
00187         ENTITY_REFERENCE_NODE       = 5,
00188         ENTITY_NODE                 = 6,
00189         PROCESSING_INSTRUCTION_NODE = 7,
00190         COMMENT_NODE                = 8,
00191         DOCUMENT_NODE               = 9,
00192         DOCUMENT_TYPE_NODE          = 10,
00193         DOCUMENT_FRAGMENT_NODE      = 11,
00194         NOTATION_NODE               = 12
00195     };
00196 
00215     enum DocumentPosition {
00216         DOCUMENT_POSITION_DISCONNECTED            = 0x01,
00217         DOCUMENT_POSITION_PRECEDING               = 0x02,
00218         DOCUMENT_POSITION_FOLLOWING               = 0x04,
00219         DOCUMENT_POSITION_CONTAINS                = 0x08,
00220         DOCUMENT_POSITION_CONTAINED_BY            = 0x10,
00221         DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 0x20
00222     };
00224 
00225     // -----------------------------------------------------------------------
00226     //  Virtual DOMNode interface
00227     // -----------------------------------------------------------------------
00230     // -----------------------------------------------------------------------
00231     //  Getter methods
00232     // -----------------------------------------------------------------------
00237     virtual const XMLCh *   getNodeName() const = 0;
00238 
00246     virtual const XMLCh *       getNodeValue() const = 0;
00247 
00252     virtual NodeType            getNodeType() const = 0;
00253 
00264     virtual DOMNode        *getParentNode() const = 0;
00265 
00280     virtual DOMNodeList    *getChildNodes() const = 0;
00287     virtual DOMNode        *getFirstChild() const = 0;
00288 
00295     virtual DOMNode        *getLastChild() const = 0;
00296 
00303     virtual DOMNode        *getPreviousSibling() const = 0;
00304 
00311     virtual DOMNode        *getNextSibling() const = 0;
00312 
00318     virtual DOMNamedNodeMap  *getAttributes() const = 0;
00319 
00331     virtual DOMDocument      *getOwnerDocument() const = 0;
00332 
00333     // -----------------------------------------------------------------------
00334     //  Node methods
00335     // -----------------------------------------------------------------------
00355     virtual DOMNode        * cloneNode(bool deep) const = 0;
00356 
00384     virtual DOMNode       *insertBefore(DOMNode *newChild,
00385                                           DOMNode *refChild) = 0;
00386 
00387 
00411     virtual DOMNode  *replaceChild(DOMNode *newChild,
00412                                      DOMNode *oldChild) = 0;
00425     virtual DOMNode        *removeChild(DOMNode *oldChild) = 0;
00426 
00447     virtual DOMNode        *appendChild(DOMNode *newChild) = 0;
00448 
00449     // -----------------------------------------------------------------------
00450     //  Query methods
00451     // -----------------------------------------------------------------------
00460     virtual bool             hasChildNodes() const = 0;
00461 
00462     // -----------------------------------------------------------------------
00463     //  Setter methods
00464     // -----------------------------------------------------------------------
00480     virtual void              setNodeValue(const XMLCh  *nodeValue) = 0;
00482 
00505     virtual void              normalize() = 0;
00506 
00522     virtual bool              isSupported(const XMLCh *feature,
00523                                                const XMLCh *version) const = 0;
00524 
00540     virtual const XMLCh *         getNamespaceURI() const = 0;
00541 
00548     virtual const XMLCh *          getPrefix() const = 0;
00549 
00559     virtual const XMLCh *          getLocalName() const = 0;
00560 
00594     virtual void              setPrefix(const XMLCh * prefix) = 0;
00595 
00602     virtual bool              hasAttributes() const = 0;
00604 
00622     virtual bool              isSameNode(const DOMNode* other) const = 0;
00623 
00664     virtual bool              isEqualNode(const DOMNode* arg) const = 0;
00665 
00666 
00692     virtual void*             setUserData(const XMLCh* key,
00693                                           void* data,
00694                                           DOMUserDataHandler* handler) = 0;
00695 
00707     virtual void*             getUserData(const XMLCh* key) const = 0;
00708 
00709 
00726     virtual const XMLCh*      getBaseURI() const = 0;
00727 
00738     virtual short             compareDocumentPosition(const DOMNode* other) const = 0;
00739 
00781     virtual const XMLCh*      getTextContent() const = 0;
00782 
00794     virtual void              setTextContent(const XMLCh* textContent) = 0;
00795 
00807     virtual const XMLCh*      lookupPrefix(const XMLCh* namespaceURI) const = 0;
00808 
00818     virtual bool              isDefaultNamespace(const XMLCh* namespaceURI) const = 0;
00819 
00831     virtual const XMLCh*      lookupNamespaceURI(const XMLCh* prefix) const  = 0;
00832 
00848     virtual void*             getFeature(const XMLCh* feature, const XMLCh* version) const = 0;
00850 
00851     // -----------------------------------------------------------------------
00852     //  Non-standard Extension
00853     // -----------------------------------------------------------------------
00869     virtual void              release() = 0;
00871 #if defined(XML_DOMREFCOUNT_EXPERIMENTAL)
00872     // -----------------------------------------------------------------------
00873     //  Non-standard Extension
00874     // -----------------------------------------------------------------------
00884     virtual void decRefCount() {}
00886 
00887     // -----------------------------------------------------------------------
00888     //  Non-standard Extension
00889     // -----------------------------------------------------------------------
00896     virtual void incRefCount() {}
00898 #endif
00899 };
00900 
00901 /***
00902  * Utilities macros for getting memory manager within DOM
00903 ***/
00904 #define GET_OWNER_DOCUMENT(ptr)      \
00905         ((DOMDocumentImpl*)(ptr->getOwnerDocument()))
00906 
00907 #define GET_DIRECT_MM(ptr)           \
00908         (ptr ? ((DOMDocumentImpl*)ptr)->getMemoryManager() : XMLPlatformUtils::fgMemoryManager)
00909 
00910 #define GET_INDIRECT_MM(ptr)                                                    \
00911         (!ptr ? XMLPlatformUtils::fgMemoryManager :                              \
00912         GET_OWNER_DOCUMENT(ptr) ? GET_OWNER_DOCUMENT(ptr)->getMemoryManager() : \
00913         XMLPlatformUtils::fgMemoryManager)
00914 
00915 /***
00916  * For DOMNode and its derivatives
00917 ***/
00918 #define GetDOMNodeMemoryManager GET_INDIRECT_MM(this)
00919 
00920 XERCES_CPP_NAMESPACE_END
00921 
00922 #endif