DOMNodeIteratorImpl.hpp
上传用户:zhuqijet
上传日期:2013-06-25
资源大小:10074k
文件大小:6k
源码类别:

词法分析

开发平台:

Visual C++

  1. #ifndef DOMNodeIteratorImpl_HEADER_GUARD_
  2. #define DOMNodeIteratorImpl_HEADER_GUARD_
  3. /*
  4.  * The Apache Software License, Version 1.1
  5.  *
  6.  * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
  7.  * reserved.
  8.  *
  9.  * Redistribution and use in source and binary forms, with or without
  10.  * modification, are permitted provided that the following conditions
  11.  * are met:
  12.  *
  13.  * 1. Redistributions of source code must retain the above copyright
  14.  *    notice, this list of conditions and the following disclaimer.
  15.  *
  16.  * 2. Redistributions in binary form must reproduce the above copyright
  17.  *    notice, this list of conditions and the following disclaimer in
  18.  *    the documentation and/or other materials provided with the
  19.  *    distribution.
  20.  *
  21.  * 3. The end-user documentation included with the redistribution,
  22.  *    if any, must include the following acknowledgment:
  23.  *       "This product includes software developed by the
  24.  *        Apache Software Foundation (http://www.apache.org/)."
  25.  *    Alternately, this acknowledgment may appear in the software itself,
  26.  *    if and wherever such third-party acknowledgments normally appear.
  27.  *
  28.  * 4. The names "Xerces" and "Apache Software Foundation" must
  29.  *    not be used to endorse or promote products derived from this
  30.  *    software without prior written permission. For written
  31.  *    permission, please contact apache@apache.org.
  32.  *
  33.  * 5. Products derived from this software may not be called "Apache",
  34.  *    nor may "Apache" appear in their name, without prior written
  35.  *    permission of the Apache Software Foundation.
  36.  *
  37.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  38.  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  39.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  40.  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  41.  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  42.  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  43.  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  44.  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  45.  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  46.  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  47.  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  48.  * SUCH DAMAGE.
  49.  * ====================================================================
  50.  *
  51.  * This software consists of voluntary contributions made by many
  52.  * individuals on behalf of the Apache Software Foundation, and was
  53.  * originally based on software copyright (c) 2001, International
  54.  * Business Machines, Inc., http://www.ibm.com .  For more information
  55.  * on the Apache Software Foundation, please see
  56.  * <http://www.apache.org/>.
  57.  */
  58. /*
  59.  * $Id: DOMNodeIteratorImpl.hpp,v 1.4 2003/01/16 19:10:41 tng Exp $
  60.  */
  61. //
  62. //  This file is part of the internal implementation of the C++ XML DOM.
  63. //  It should NOT be included or used directly by application programs.
  64. //
  65. //  Applications should include the file <xercesc/dom/DOM.hpp> for the entire
  66. //  DOM API, or xercesc/dom/DOM*.hpp for individual DOM classes, where the class
  67. //  name is substituded for the *.
  68. //
  69. //////////////////////////////////////////////////////////////////////
  70. // DOMNodeIteratorImpl.hpp: interface for the DOMNodeIteratorImpl class.
  71. //
  72. //////////////////////////////////////////////////////////////////////
  73. #include <xercesc/dom/DOMNode.hpp>
  74. #include <xercesc/dom/DOMNodeIterator.hpp>
  75. XERCES_CPP_NAMESPACE_BEGIN
  76. class CDOM_EXPORT DOMNodeIteratorImpl : public DOMNodeIterator {
  77.     private:
  78.         //
  79.         // Data
  80.         //
  81.         // The root.
  82.         DOMNode* fRoot;
  83.         // The Document used to create this iterator
  84.         DOMDocument* fDocument;
  85.         // The whatToShow mask.
  86.         unsigned long fWhatToShow;
  87.         // The NodeFilter reference.
  88.         DOMNodeFilter* fNodeFilter;
  89.         // The expandEntity reference flag.
  90.         bool  fExpandEntityReferences;
  91.         bool fDetached;
  92.         //
  93.         // Iterator state - current node and direction.
  94.         //
  95.         // Note: The current node and direction are sufficient to implement
  96.         // the desired behaviour of the current pointer being _between_
  97.         // two nodes. The fCurrentNode is actually the last node returned,
  98.         // and the
  99.         // direction is whether the pointer is in front or behind this node.
  100.         // (usually akin to whether the node was returned via nextNode())
  101.         // (eg fForward = true) or previousNode() (eg fForward = false).
  102.         // The last Node returned.
  103.         DOMNode* fCurrentNode;
  104.         // The direction of the iterator on the fCurrentNode.
  105.         //  <pre>
  106.         //  nextNode()  ==      fForward = true;
  107.         //  previousNode() ==   fForward = false;
  108.         //  </pre>
  109.         bool fForward;
  110.     public:
  111.         virtual ~DOMNodeIteratorImpl ();
  112.         DOMNodeIteratorImpl (
  113.             DOMDocument* fDocument,
  114.             DOMNode* root,
  115.             unsigned long whatToShow,
  116.             DOMNodeFilter* nodeFilter,
  117.             bool expandEntityRef);
  118.         DOMNodeIteratorImpl ( const DOMNodeIteratorImpl& toCopy);
  119.         DOMNodeIteratorImpl& operator= (const DOMNodeIteratorImpl& other);
  120.         virtual DOMNode* getRoot ();                
  121.         virtual unsigned long getWhatToShow ();
  122.         virtual DOMNodeFilter* getFilter ();
  123.         // Get the expandEntity reference flag.
  124.         virtual bool getExpandEntityReferences();
  125.         virtual DOMNode* nextNode ();
  126.         virtual DOMNode* previousNode ();
  127.         virtual void detach ();
  128.         virtual void release();
  129.         void removeNode (DOMNode* node);
  130.     private:
  131.         DOMNode* matchNodeOrParent (DOMNode* node);
  132.         DOMNode* nextNode (DOMNode* node, bool visitChildren);
  133.         DOMNode* previousNode (DOMNode* node);
  134.         bool acceptNode (DOMNode* node);
  135. };
  136. XERCES_CPP_NAMESPACE_END
  137. #endif