documentimpl.hpp

来自「IBM的解析xml的工具Xerces的源代码」· HPP 代码 · 共 251 行

HPP
251
字号
#ifndef DocumentImpl_HEADER_GUARD_#define DocumentImpl_HEADER_GUARD_/* * Copyright 1999-2002,2004 The Apache Software Foundation. *  * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at *  *      http://www.apache.org/licenses/LICENSE-2.0 *  * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *//* * $Id: DocumentImpl.hpp,v 1.9 2004/09/08 13:55:43 peiyongz Exp $ */////  This file is part of the internal implementation of the C++ XML DOM.//  It should NOT be included or used directly by application programs.////  Applications should include the file <xercesc/dom/deprecated/DOM.hpp> for the entire//  DOM API, or DOM_*.hpp for individual DOM classes, where the class//  name is substituded for the *.//#include <xercesc/util/XercesDefs.hpp>#include "ParentNode.hpp"#include "DOM_Node.hpp"#include "DOM_Element.hpp"#include "xercesc/util/RefVectorOf.hpp"#include "xercesc/util/RefHashTableOf.hpp"#include "XMLDeclImpl.hpp"XERCES_CPP_NAMESPACE_BEGINclass DocumentTypeImpl;class ElementImpl;class AttrImpl;class CDATASectionImpl;class CommentImpl;class DeepNodeListImpl;class DocumentFragmentImpl;class DocumentTypeImpl;class DStringPool;class EntityImpl;class EntityReferenceImpl;class NotationImpl;class ProcessingInstructionImpl;class TextImpl;class NodeIteratorImpl;class TreeWalkerImpl;class DOM_NodeFilter;class NodeFilterImpl;class DOM_DOMImplementation;class DOMString;class NodeIDMap;class RangeImpl;typedef RefVectorOf<NodeIteratorImpl> NodeIterators;typedef RefVectorOf<TreeWalkerImpl> TreeWalkers;typedef RefVectorOf<RangeImpl> RangeImpls;class DEPRECATED_DOM_EXPORT DocumentImpl: public ParentNode {private:    // -----------------------------------------------------------------------    //  Private data types    // -----------------------------------------------------------------------   	void setDocumentType(DocumentTypeImpl *doctype);    DocumentTypeImpl            *docType;    ElementImpl                 *docElement;    DStringPool                 *namePool;    NodeIDMap                   *fNodeIDMap;      // for use by GetElementsById().    NodeIterators               *iterators;    TreeWalkers                 *treeWalkers;	RefHashTableOf<void>		*userData;    RangeImpls                  *ranges;    /**     * Number of alterations made to this document since its creation.     * Serves as a "dirty bit" so that live objects such as NodeList can     * recognize when an alteration has been made and discard its cached     * state information.     * <p>     * Any method that alters the tree structure MUST cause or be     * accompanied by a call to changed(), to inform it that any outstanding     * NodeLists may have to be updated.     * <p>     * (Required because NodeList is simultaneously "live" and integer-     * indexed -- a bad decision in the DOM's design.)     * <p>     * Note that changes which do not affect the tree's structure -- changing     * the node's name, for example -- do _not_ have to call changed().     * <p>     * Alternative implementation would be to use a cryptographic     * Digest value rather than a count. This would have the advantage that     * "harmless" changes (those producing equal() trees) would not force     * NodeList to resynchronize. Disadvantage is that it's slightly more prone     * to "false negatives", though that's the difference between "wildly     * unlikely" and "absurdly unlikely". IF we start maintaining digests,     * we should consider taking advantage of them.     *     * Note: This used to be done a node basis, so that we knew what     * subtree changed. But since only DeepNodeList really use this today,     * the gain appears to be really small compared to the cost of having     * an int on every (parent) node plus having to walk up the tree all the     * way to the root to mark the branch as changed everytime a node is     * changed.     * So we now have a single counter global to the document. It means that     * some objects may flush their cache more often than necessary, but this     * makes nodes smaller and only the document needs to be marked as changed.     */    int fChanges;    /** Bypass error checking. */    bool errorChecking;    MemoryManager               *fMemoryManager;    friend class NodeIteratorImpl;    friend class TreeWalkerImpl;    friend class RangeImpl;   	friend class DOMParser;public:    DocumentImpl(MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);    DocumentImpl(const DOMString &namespaceURI,	    //DOM Level 2	             const DOMString &qualifiedName,                 DocumentTypeImpl *doctype,                 MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);    virtual ~DocumentImpl();    virtual bool isDocumentImpl();   // RTTI replacement function    virtual NodeImpl            *cloneNode(bool deep);    virtual DOMString getNodeName();    virtual short getNodeType();    virtual DocumentImpl * getOwnerDocument();    virtual AttrImpl            *createAttribute(const DOMString &name);    virtual CDATASectionImpl    *createCDATASection(const DOMString &data);    virtual CommentImpl         *createComment(const DOMString &data);    virtual DocumentFragmentImpl *createDocumentFragment();    virtual DocumentTypeImpl    *createDocumentType(const DOMString &name);    virtual DocumentTypeImpl    *createDocumentType(const DOMString &qName,                                                    const DOMString &publicId,                                                    const DOMString &systemId);    virtual ElementImpl         *createElement(const DOMString & tagName);    virtual ElementImpl         *createElement(const XMLCh *tagName);    virtual EntityImpl          *createEntity(const DOMString & name);    virtual EntityReferenceImpl *createEntityReference(const DOMString & name);    virtual NotationImpl        *createNotation(const DOMString & name);    virtual ProcessingInstructionImpl *createProcessingInstruction(const DOMString & target, const DOMString & data);    virtual TextImpl            *createTextNode(const DOMString & data);    virtual DocumentTypeImpl    *getDoctype();    virtual ElementImpl         *getDocumentElement();    virtual DeepNodeListImpl    *getElementsByTagName(const DOMString & tagname);    virtual NodeImpl            *insertBefore(NodeImpl *newChild, NodeImpl *refChild);    bool                        isXMLName(const DOMString & s);    virtual void                referenced();    virtual NodeImpl            *removeChild(NodeImpl *oldChild);    virtual void                unreferenced();    static  NodeIteratorImpl*   createNodeIterator(DOM_Node root, unsigned long whatToShow, DOM_NodeFilter* filter, bool entityReferenceExpansion,                                                   MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);    static  TreeWalkerImpl*     createTreeWalker(DOM_Node root, unsigned long whatToShow, DOM_NodeFilter* filter, bool entityReferenceExpansion,                                                 MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);    virtual XMLDeclImpl*        createXMLDecl(const DOMString& version, const DOMString& encoding, const DOMString& standalone);    virtual void*				getUserData();    virtual void				setUserData(void* value);    virtual RangeImpl*          createRange();    virtual RangeImpls*         getRanges();  //non-standard api    virtual void                removeRange(RangeImpl* range); //non-standard api	// helper functions to prevent storing userdata pointers on every node.    virtual void setUserData(NodeImpl* n, void* data);    virtual void* getUserData(NodeImpl* n);    //Introduced in DOM Level 2    virtual NodeImpl            *importNode(NodeImpl *source, bool deep);    virtual ElementImpl         *createElementNS(const DOMString &namespaceURI,	                                             const DOMString &qualifiedName);    virtual AttrImpl            *createAttributeNS(const DOMString &namespaceURI,	                                             const DOMString &qualifiedName);    virtual DeepNodeListImpl    *getElementsByTagNameNS(const DOMString &namespaceURI,	                                              const DOMString &localName);    virtual ElementImpl         *getElementById(const DOMString &elementId);    //Return the index > 0 of ':' in the given qualified name qName="prefix:localName".    //Return 0 if there is no ':', or -1 if qName is malformed such as ":abcd".    static  int                 indexofQualifiedName(const DOMString & qName);    static  bool                isKidOK(NodeImpl *parent, NodeImpl *child);    inline NodeIDMap *          getNodeIDMap() {return fNodeIDMap;};    virtual void changed();    virtual int changes();    /**     * Sets whether the DOM implementation performs error checking     * upon operations. Turning off error checking only affects     * the following DOM checks:     * <ul>     * <li>Checking strings to make sure that all characters are     *     legal XML characters     * <li>Hierarchy checking such as allowed children, checks for     *     cycles, etc.     * </ul>     * <p>     * Turning off error checking does <em>not</em> turn off the     * following checks:     * <ul>     * <li>Read only checks     * <li>Checks related to DOM events     * </ul>     */    inline void setErrorChecking(bool check) {        errorChecking = check;    }    /**     * Returns true if the DOM implementation performs error checking.     */    inline bool getErrorChecking() {        return errorChecking;    }    inline MemoryManager* getMemoryManager() const {        return fMemoryManager;    }    // -----------------------------------------------------------------------    //  Notification that lazy data has been deleted    // -----------------------------------------------------------------------	static void reinitDocumentImpl();};XERCES_CPP_NAMESPACE_END#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?