You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by tn...@apache.org on 2001/06/04 22:11:55 UTC
cvs commit: xml-xerces/c/tests/IDom/ITraversal ITraversal.cpp Makefile.in
tng 01/06/04 13:11:55
Modified: c/Projects/OS2/VACPP40 xerces_idom.icc
c/Projects/Win32/VC6/xerces-all xerces-all.dsw
c/Projects/Win32/VC6/xerces-all/XercesLib XercesLib.dsp
c/src/idom IDDeepNodeListImpl.cpp IDDocumentImpl.cpp
IDDocumentImpl.hpp IDNodeIteratorImpl.cpp
IDNodeIteratorImpl.hpp IDOM.hpp IDOM_NodeFilter.hpp
IDOM_NodeIterator.hpp IDOM_TreeWalker.hpp
IDTreeWalkerImpl.cpp IDTreeWalkerImpl.hpp
Makefile.in
c/src/util/Compilers VCPPDefs.hpp
c/tests Makefile.in configure configure.in
c/tests/IDom/IRangeTest IRangeTest.cpp
Added: c/Projects/Win32/VC6/xerces-all/IDOMTraversalTest
IDOMTraversalTest.dsp
c/tests/IDom/ITraversal ITraversal.cpp Makefile.in
Log:
IDOM: Complete IDNodeIterator, IDTreeWalker, IDNodeFilter.
Revision Changes Path
1.3 +2 -0 xml-xerces/c/Projects/OS2/VACPP40/xerces_idom.icc
Index: xerces_idom.icc
===================================================================
RCS file: /home/cvs/xml-xerces/c/Projects/OS2/VACPP40/xerces_idom.icc,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- xerces_idom.icc 2001/06/04 15:00:08 1.2
+++ xerces_idom.icc 2001/06/04 20:11:50 1.3
@@ -18,6 +18,7 @@
BASE_DIR "\\src\\idom\\IDNamedNodeMapImpl.cpp",
BASE_DIR "\\src\\idom\\IDNodeIDMap.cpp",
BASE_DIR "\\src\\idom\\IDNodeImpl.cpp",
+ BASE_DIR "\\src\\idom\\IDNodeIteratorImpl.cpp",
BASE_DIR "\\src\\idom\\IDNodeListImpl.cpp",
BASE_DIR "\\src\\idom\\IDNodeVector.cpp",
BASE_DIR "\\src\\idom\\IDNotationImpl.cpp",
@@ -28,4 +29,5 @@
BASE_DIR "\\src\\idom\\IDRangeImpl.cpp",
BASE_DIR "\\src\\idom\\IDStringPool.cpp",
BASE_DIR "\\src\\idom\\IDTextImpl.cpp",
+ BASE_DIR "\\src\\idom\\IDTreeWalkerImpl.cpp",
BASE_DIR "\\src\\idom\\IDXMLDeclImpl.cpp"
1.25 +12 -0 xml-xerces/c/Projects/Win32/VC6/xerces-all/xerces-all.dsw
Index: xerces-all.dsw
===================================================================
RCS file: /home/cvs/xml-xerces/c/Projects/Win32/VC6/xerces-all/xerces-all.dsw,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -r1.24 -r1.25
--- xerces-all.dsw 2001/06/04 14:55:28 1.24
+++ xerces-all.dsw 2001/06/04 20:11:51 1.25
@@ -165,6 +165,18 @@
###############################################################################
+Project: "IDOM_Traver sal Test"=".\IDOMTraversalTest\IDOMTraversalTest.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
Project: "IRangeTest"=".\IRangeTest\IRangeTest.dsp" - Package Owner=<4>
Package=<5>
1.1 xml-xerces/c/Projects/Win32/VC6/xerces-all/IDOMTraversalTest/IDOMTraversalTest.dsp
Index: IDOMTraversalTest.dsp
===================================================================
# Microsoft Developer Studio Project File - Name="IDOM_TraversalTest" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
CFG=IDOM_Traver sal Test - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "IDOM_TraversalTest.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "IDOM_TraversalTest.mak" CFG="IDOM_TraversalTest - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "IDOM_TraversalTest - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "IDOM_TraversalTest - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "IDOM_TraversalTest - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "..\..\..\..\..\Build\Win32\VC6\Release"
# PROP Intermediate_Dir "..\..\..\..\..\Build\Win32\VC6\Release\obj"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /G6 /MD /Za /W3 /GX /O2 /Ob2 /I "..\..\..\..\..\src" /D "NDEBUG" /D "_CONSOLE" /D "WIN32" /D "_WINDOWS" /D "PLATFORM_WIN32" /FD /c
# SUBTRACT CPP /YX
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib xerces-c_1.lib /nologo /version:1.0 /subsystem:console /machine:I386 /libpath:"..\..\..\..\..\Build\Win32\VC6\Release"
!ELSEIF "$(CFG)" == "IDOM_TraversalTest - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "..\..\..\..\..\Build\Win32\VC6\Debug"
# PROP Intermediate_Dir "..\..\..\..\..\Build\Win32\VC6\Debug\obj"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD CPP /nologo /G6 /MDd /Za /W3 /Gm /GX /ZI /Od /I "..\..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "WIN32" /D "_WINDOWS" /D "PLATFORM_WIN32" /FD /GZ /c
# SUBTRACT CPP /YX
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib xerces-c_1D.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\..\..\Build\Win32\VC6\Debug"
!ENDIF
# Begin Target
# Name "IDOM_TraversalTest - Win32 Release"
# Name "IDOM_TraversalTest - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=..\..\..\..\..\tests\IDOM\ITraversal\ITraversal.cpp
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# End Target
# End Project
1.63 +16 -0 xml-xerces/c/Projects/Win32/VC6/xerces-all/XercesLib/XercesLib.dsp
Index: XercesLib.dsp
===================================================================
RCS file: /home/cvs/xml-xerces/c/Projects/Win32/VC6/xerces-all/XercesLib/XercesLib.dsp,v
retrieving revision 1.62
retrieving revision 1.63
diff -u -r1.62 -r1.63
--- XercesLib.dsp 2001/06/04 14:55:30 1.62
+++ XercesLib.dsp 2001/06/04 20:11:52 1.63
@@ -2112,6 +2112,14 @@
# End Source File
# Begin Source File
+SOURCE=..\..\..\..\..\src\idom\IDNodeIteratorImpl.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\src\idom\IDNodeIteratorImpl.hpp
+# End Source File
+# Begin Source File
+
SOURCE=..\..\..\..\..\src\idom\IDNodeListImpl.cpp
# End Source File
# Begin Source File
@@ -2281,6 +2289,14 @@
# Begin Source File
SOURCE=..\..\..\..\..\src\idom\IDTextImpl.hpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\src\idom\IDTreeWalkerImpl.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\src\idom\IDTreeWalkerImpl.hpp
# End Source File
# Begin Source File
1.4 +3 -4 xml-xerces/c/src/idom/IDDeepNodeListImpl.cpp
Index: IDDeepNodeListImpl.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/idom/IDDeepNodeListImpl.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- IDDeepNodeListImpl.cpp 2001/06/04 14:55:32 1.3
+++ IDDeepNodeListImpl.cpp 2001/06/04 20:11:52 1.4
@@ -56,6 +56,9 @@
/*
* $Log: IDDeepNodeListImpl.cpp,v $
+ * Revision 1.4 2001/06/04 20:11:52 tng
+ * IDOM: Complete IDNodeIterator, IDTreeWalker, IDNodeFilter.
+ *
* Revision 1.3 2001/06/04 14:55:32 tng
* IDOM: Add IRange and IDeepNodeList Support.
*
@@ -118,8 +121,6 @@
IDOM_NodeList *IDDeepNodeListImpl::getDeepNodeList(const IDOM_Node *rootNode, const XMLCh *tagName)
{
- // idom_revisit - need to recycle NodeList objects from a free list
- // or allocate them from the regular heap
if(!fNodeListPool) {
fNodeListPool = new ((IDDocumentImpl*)rootNode->getOwnerDocument()) IDDeepNodeListPool<IDDeepNodeListImpl>(109);
}
@@ -139,8 +140,6 @@
const XMLCh *namespaceURI,
const XMLCh *localName)
{
- // idom_revisit - need to recycle NodeList objects from a free list
- // or allocate them from the regular heap
if(!fNodeListPool) {
fNodeListPool = new ((IDDocumentImpl*)rootNode->getOwnerDocument()) IDDeepNodeListPool<IDDeepNodeListImpl>(109);
}
1.6 +18 -24 xml-xerces/c/src/idom/IDDocumentImpl.cpp
Index: IDDocumentImpl.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/idom/IDDocumentImpl.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- IDDocumentImpl.cpp 2001/06/04 14:55:32 1.5
+++ IDDocumentImpl.cpp 2001/06/04 20:11:52 1.6
@@ -55,7 +55,7 @@
*/
/*
- * $Id: IDDocumentImpl.cpp,v 1.5 2001/06/04 14:55:32 tng Exp $
+ * $Id: IDDocumentImpl.cpp,v 1.6 2001/06/04 20:11:52 tng Exp $
*/
#include <util/XMLUniDefs.hpp>
@@ -87,12 +87,12 @@
#include "IDXMLDeclImpl.hpp"
#include "IDStringPool.hpp"
-#include <internal/XMLReader.hpp>
-//#include "IDTreeWalkerImpl.hpp"
-//#include "IDNodeIteratorImpl.hpp"
+#include "IDTreeWalkerImpl.hpp"
+#include "IDNodeIteratorImpl.hpp"
#include "IDNodeIDMap.hpp"
-#include <util/HashPtr.hpp>
#include "IDRangeImpl.hpp"
+#include <internal/XMLReader.hpp>
+#include <util/HashPtr.hpp>
//idom_revisit. These can go away once all of the include files above are really there.
@@ -345,51 +345,45 @@
// The vector of fIterators is kept in the "owner document" if there is one. If there isn't one, I assume that root is the
// owner document.
-#ifdef idom_revisit
- NodeIteratorImpl* iter = new NodeIteratorImpl(root, whatToShow, filter, entityReferenceExpansion);
- DOM_Document doc = root.getOwnerDocument();
+ IDNodeIteratorImpl* iter = new (this) IDNodeIteratorImpl(root, whatToShow, filter, entityReferenceExpansion);
+ IDOM_Document* doc = root->getOwnerDocument();
IDDocumentImpl* impl;
- if (! doc.isNull()) {
- impl = (IDDocumentImpl *) doc.fImpl;
+ if (doc != 0) {
+ impl = (IDDocumentImpl *) doc;
}
else
- impl = (IDDocumentImpl *) root.fImpl;
+ impl = (IDDocumentImpl *) root;
if (impl->fIterators == 0L) {
- impl->fIterators = new NodeIterators(1, false);
+ impl->fIterators = new (this) NodeIterators(1, false);
impl->fIterators->addElement(iter);
}
return iter;
-#endif
- return 0;
}
IDOM_TreeWalker* IDDocumentImpl::createTreeWalker (IDOM_Node *root, unsigned long whatToShow, IDOM_NodeFilter* filter, bool entityReferenceExpansion)
{
-#ifdef idom_revisit
- // See notes for createNodeIterator...
+ // See notes for createNodeIterator...
- TreeWalkerImpl* twi = new TreeWalkerImpl(root, whatToShow, filter, entityReferenceExpansion);
- DOM_Document doc = root.getOwnerDocument();
+ IDTreeWalkerImpl* twi = new (this) IDTreeWalkerImpl(root, whatToShow, filter, entityReferenceExpansion);
+ IDOM_Document* doc = root->getOwnerDocument();
IDDocumentImpl* impl;
- if (! doc.isNull()) {
- impl = (IDDocumentImpl *) doc.fImpl;
+ if ( doc != 0) {
+ impl = (IDDocumentImpl *) doc;
}
else
- impl = (IDDocumentImpl *) root.fImpl;
+ impl = (IDDocumentImpl *) root;
if (impl->fTreeWalkers == 0L) {
- impl->fTreeWalkers = new TreeWalkers(1, false);
+ impl->fTreeWalkers = new (this) TreeWalkers(1, false);
impl->fTreeWalkers->addElement(twi);
}
return twi;
-#endif
- return 0;
}
1.9 +6 -5 xml-xerces/c/src/idom/IDDocumentImpl.hpp
Index: IDDocumentImpl.hpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/idom/IDDocumentImpl.hpp,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- IDDocumentImpl.hpp 2001/06/04 14:55:32 1.8
+++ IDDocumentImpl.hpp 2001/06/04 20:11:52 1.9
@@ -58,7 +58,7 @@
*/
/*
- * $Id: IDDocumentImpl.hpp,v 1.8 2001/06/04 14:55:32 tng Exp $
+ * $Id: IDDocumentImpl.hpp,v 1.9 2001/06/04 20:11:52 tng Exp $
*/
//
@@ -126,8 +126,9 @@
NodeIterators *fIterators;
TreeWalkers *fTreeWalkers;
- RefHashTableOf<void> *fUserData;
Ranges *fRanges;
+
+ RefHashTableOf<void> *fUserData;
int fChanges;
bool errorChecking; // Bypass error checking.
@@ -202,17 +203,17 @@
unsigned long whatToShow,
IDOM_NodeFilter* filter,
bool entityReferenceExpansion);
- virtual IDOM_TreeWalker* createTreeWalker(IDOM_Node *root,
+ virtual IDOM_TreeWalker *createTreeWalker(IDOM_Node *root,
unsigned long whatToShow,
IDOM_NodeFilter* filter,
bool entityReferenceExpansion);
- virtual IDOM_XMLDecl* createXMLDecl(const XMLCh * version,
+ virtual IDOM_XMLDecl *createXMLDecl(const XMLCh * version,
const XMLCh * encoding,
const XMLCh * standalone);
virtual void* getUserData() const;
virtual void setUserData(void* value);
- virtual IDOM_Range* createRange();
+ virtual IDOM_Range *createRange();
virtual Ranges* getRanges() const; //non-standard api
virtual void removeRange(IDRangeImpl* range); //non-standard api
1.3 +91 -124 xml-xerces/c/src/idom/IDNodeIteratorImpl.cpp
Index: IDNodeIteratorImpl.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/idom/IDNodeIteratorImpl.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- IDNodeIteratorImpl.cpp 2001/05/11 13:25:45 1.2
+++ IDNodeIteratorImpl.cpp 2001/06/04 20:11:52 1.3
@@ -56,6 +56,9 @@
/*
* $Log: IDNodeIteratorImpl.cpp,v $
+ * Revision 1.3 2001/06/04 20:11:52 tng
+ * IDOM: Complete IDNodeIterator, IDTreeWalker, IDNodeFilter.
+ *
* Revision 1.2 2001/05/11 13:25:45 tng
* Copyright update.
*
@@ -64,41 +67,41 @@
*
*/
-// NodeIteratorImpl.cpp: implementation of the NodeIteratorImpl class.
+// IDNodeIteratorImpl.cpp: implementation of the IDNodeIteratorImpl class.
//
//////////////////////////////////////////////////////////////////////
-#include "NodeIteratorImpl.hpp"
-#include "DOM_Document.hpp"
-#include "DOM_DOMException.hpp"
-#include "DocumentImpl.hpp"
+#include "IDNodeIteratorImpl.hpp"
+#include "IDOM_Document.hpp"
+#include "IDOM_DOMException.hpp"
+#include "IDDocumentImpl.hpp"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
-NodeIteratorImpl::NodeIteratorImpl ()
+IDNodeIteratorImpl::IDNodeIteratorImpl ()
: fDetached(false),
fNodeFilter(0)
{
}
-NodeIteratorImpl::~NodeIteratorImpl ()
+IDNodeIteratorImpl::~IDNodeIteratorImpl ()
{
fDetached = false;
}
-void NodeIteratorImpl::detach ()
+void IDNodeIteratorImpl::detach ()
{
fDetached = true;
}
-NodeIteratorImpl::NodeIteratorImpl (
- DOM_Node root,
+IDNodeIteratorImpl::IDNodeIteratorImpl (
+ IDOM_Node* root,
unsigned long whatToShow,
- DOM_NodeFilter* nodeFilter,
+ IDOM_NodeFilter* nodeFilter,
bool expandEntityRef)
: fDetached(false),
fRoot(root),
@@ -112,7 +115,7 @@
}
-NodeIteratorImpl::NodeIteratorImpl ( const NodeIteratorImpl& toCopy)
+IDNodeIteratorImpl::IDNodeIteratorImpl ( const IDNodeIteratorImpl& toCopy)
: fDetached(toCopy.fDetached),
fRoot(toCopy.fRoot),
fCurrentNode(toCopy.fCurrentNode),
@@ -124,13 +127,13 @@
}
-NodeIteratorImpl& NodeIteratorImpl::operator= (const NodeIteratorImpl& other) {
+IDNodeIteratorImpl& IDNodeIteratorImpl::operator= (const IDNodeIteratorImpl& other) {
fRoot = other.fRoot;
fCurrentNode = other.fRoot;
fWhatToShow = other.fWhatToShow;
fNodeFilter = other.fNodeFilter;
fForward = other.fForward;
- fDetached = other.fDetached;
+ fDetached = other.fDetached;
fExpandEntityReferences = other.fExpandEntityReferences;
return *this;
}
@@ -143,45 +146,43 @@
/** Return the whatToShow value */
-unsigned long NodeIteratorImpl::getWhatToShow () {
+unsigned long IDNodeIteratorImpl::getWhatToShow () {
return fWhatToShow;
}
/** Return the filter */
-DOM_NodeFilter* NodeIteratorImpl::getFilter () {
+IDOM_NodeFilter* IDNodeIteratorImpl::getFilter () {
return fNodeFilter;
}
/** Get the expandEntity reference flag. */
-bool NodeIteratorImpl::getExpandEntityReferences()
+bool IDNodeIteratorImpl::getExpandEntityReferences()
{
return fExpandEntityReferences;
}
-/** Return the next DOM_Node in the Iterator. The node is the next node in
+/** Return the next IDOM_Node* in the Iterator. The node is the next node in
* depth-first order which also passes the filter, and whatToShow.
- * A null return means either that
+ * A 0 return means either that
*/
-DOM_Node NodeIteratorImpl::nextNode () {
+IDOM_Node* IDNodeIteratorImpl::nextNode () {
if (fDetached)
- throw DOM_DOMException(DOM_DOMException::INVALID_STATE_ERR, null);
-
- DOM_Node result;
+ throw IDOM_DOMException(IDOM_DOMException::INVALID_STATE_ERR, 0);
- // if root is null there is no next node.
- if (fRoot.isNull())
- return result;
+ // if root is 0 there is no next node->
+ if (!fRoot)
+ return 0;
- DOM_Node aNextNode = fCurrentNode;
+ IDOM_Node* aNextNode = fCurrentNode;
bool accepted = false; // the next node has not been accepted.
while (!accepted) {
- // if last direction is not forward, repeat node.
- if (!fForward && !aNextNode.isNull()) {
+ // if last direction is not forward, repeat node->
+ if (!fForward && (aNextNode != 0)) {
//System.out.println("nextNode():!fForward:"+fCurrentNode.getNodeName());
aNextNode = fCurrentNode;
} else {
@@ -189,24 +190,22 @@
aNextNode = nextNode(aNextNode, true);
}
- fForward = true; //REVIST: should direction be set forward before null check?
+ fForward = true; //REVIST: should direction be set forward before 0 check?
- // nothing in the list. return null.
- if (aNextNode.isNull())
- return result;
+ // nothing in the list. return 0.
+ if (!aNextNode) return 0;
// does node pass the filters and whatToShow?
accepted = acceptNode(aNextNode);
if (accepted) {
- // if so, then the node is the current node.
+ // if so, then the node is the current node->
fCurrentNode = aNextNode;
return fCurrentNode;
- }
-
+ }
}
// no nodes, or no accepted nodes.
- return result;
+ return 0;
}
@@ -214,24 +213,20 @@
* _backwards_ depth-first order which also passes the filter, and whatToShow.
*/
-DOM_Node NodeIteratorImpl::previousNode () {
+IDOM_Node* IDNodeIteratorImpl::previousNode () {
if (fDetached)
- throw DOM_DOMException(DOM_DOMException::INVALID_STATE_ERR, null);
+ throw IDOM_DOMException(IDOM_DOMException::INVALID_STATE_ERR, 0);
- DOM_Node result;
+ // if the root is 0, or the current node is 0, return 0.
+ if (!fRoot || !fCurrentNode) return 0;
- // if the root is null, or the current node is null, return null.
- if (fRoot.isNull() || fCurrentNode.isNull())
- return result;
-
- DOM_Node aPreviousNode = fCurrentNode;
+ IDOM_Node* aPreviousNode = fCurrentNode;
bool accepted = false;
while (!accepted) {
-
- if (fForward && ! aPreviousNode.isNull()) {
- //repeat last node.
+ if (fForward && (aPreviousNode != 0)) {
+ //repeat last node->
aPreviousNode = fCurrentNode;
} else {
// get previous node in backwards depth first order.
@@ -241,10 +236,9 @@
// we are going backwards
fForward = false;
- // if the new previous node is null, we're at head or past the root,
- // so return null.
- if (aPreviousNode.isNull())
- return result;
+ // if the new previous node is 0, we're at head or past the root,
+ // so return 0.
+ if (!aPreviousNode) return 0;
// check if node passes filters and whatToShow.
accepted = acceptNode(aPreviousNode);
@@ -255,109 +249,107 @@
}
}
// there are no nodes?
- return result;
+ return 0;
}
/** The node is accepted if it passes the whatToShow and the filter. */
-bool NodeIteratorImpl::acceptNode (DOM_Node node) {
+bool IDNodeIteratorImpl::acceptNode (IDOM_Node* node) {
if (fDetached)
- throw DOM_DOMException(DOM_DOMException::INVALID_STATE_ERR, null);
+ throw IDOM_DOMException(IDOM_DOMException::INVALID_STATE_ERR, 0);
if (fNodeFilter == 0) {
- return ((fWhatToShow & (1 << (node.getNodeType() - 1))) != 0);
+ return ((fWhatToShow & (1 << (node->getNodeType() - 1))) != 0);
} else {
- return ((fWhatToShow & (1 << (node.getNodeType() - 1))) != 0)
- && fNodeFilter->acceptNode(node) == DOM_NodeFilter::FILTER_ACCEPT;
+ return ((fWhatToShow & (1 << (node->getNodeType() - 1))) != 0)
+ && fNodeFilter->acceptNode(node) == IDOM_NodeFilter::FILTER_ACCEPT;
}
}
/** Return node, if matches or any parent if matches. */
-DOM_Node NodeIteratorImpl::matchNodeOrParent (DOM_Node node) {
- DOM_Node result;
+IDOM_Node* IDNodeIteratorImpl::matchNodeOrParent (IDOM_Node* node) {
- for (DOM_Node n = node; n != fRoot; n = n.getParentNode()) {
+ for (IDOM_Node* n = node; n != fRoot; n = n->getParentNode()) {
if (node == n) return n;
}
- return result;
+ return 0;
}
-/** The method nextNode(DOM_Node, bool) returns the next node
+/** The method nextNode(IDOM_Node, bool) returns the next node
* from the actual DOM tree.
*
* The bool visitChildren determines whether to visit the children.
* The result is the nextNode.
*/
-DOM_Node NodeIteratorImpl::nextNode (DOM_Node node, bool visitChildren) {
+IDOM_Node* IDNodeIteratorImpl::nextNode (IDOM_Node* node, bool visitChildren) {
if (fDetached)
- throw DOM_DOMException(DOM_DOMException::INVALID_STATE_ERR, null);
+ throw IDOM_DOMException(IDOM_DOMException::INVALID_STATE_ERR, 0);
- if (node.isNull()) return fRoot;
+ if (!node) return fRoot;
- DOM_Node result;
+ IDOM_Node* result = 0;
// only check children if we visit children.
if (visitChildren) {
//if hasChildren, return 1st child.
- if (node.hasChildNodes()) {
- result = node.getFirstChild();
+ if (node->hasChildNodes()) {
+ result = node->getFirstChild();
return result;
}
}
// if hasSibling, return sibling
if (node != fRoot) {
- result = node.getNextSibling();
- if (! result.isNull()) return result;
+ result = node->getNextSibling();
+ if (result != 0) return result;
// return parent's 1st sibling.
- DOM_Node parent = node.getParentNode();
- while (!parent.isNull() && parent != fRoot) {
- result = parent.getNextSibling();
- if (!result.isNull()) {
+ IDOM_Node* parent = node->getParentNode();
+ while ((parent != 0) && parent != fRoot) {
+ result = parent->getNextSibling();
+ if (result != 0) {
return result;
} else {
- parent = parent.getParentNode();
+ parent = parent->getParentNode();
}
- } // while (parent != null && parent != fRoot) {
+ } // while (parent != 0 && parent != fRoot) {
}
- // end of list, return null
- DOM_Node aNull;
- return aNull;
+ // end of list, return 0
+ return 0;
}
-/** The method previousNode(DOM_Node) returns the previous node
+/** The method previousNode(IDOM_Node) returns the previous node
* from the actual DOM tree.
*/
-DOM_Node NodeIteratorImpl::previousNode (DOM_Node node) {
+IDOM_Node* IDNodeIteratorImpl::previousNode (IDOM_Node* node) {
if (fDetached)
- throw DOM_DOMException(DOM_DOMException::INVALID_STATE_ERR, null);
+ throw IDOM_DOMException(IDOM_DOMException::INVALID_STATE_ERR, 0);
- DOM_Node result;
+ IDOM_Node* result = 0;
- // if we're at the root, return null.
+ // if we're at the root, return 0.
if (node == fRoot)
- return result;
+ return 0;
// get sibling
- result = node.getPreviousSibling();
- if (result.isNull()) {
+ result = node->getPreviousSibling();
+ if (!result) {
//if 1st sibling, return parent
- result = node.getParentNode();
+ result = node->getParentNode();
return result;
}
// if sibling has children, keep getting last child of child.
- if (result.hasChildNodes()) {
- while (result.hasChildNodes()) {
- result = result.getLastChild();
+ if (result->hasChildNodes()) {
+ while (result->hasChildNodes()) {
+ result = result->getLastChild();
}
}
@@ -369,27 +361,26 @@
* before an actual DOM remove.
*/
-void NodeIteratorImpl::removeNode (DOM_Node node) {
+void IDNodeIteratorImpl::removeNode (IDOM_Node* node) {
if (fDetached)
- throw DOM_DOMException(DOM_DOMException::INVALID_STATE_ERR, null);
+ throw IDOM_DOMException(IDOM_DOMException::INVALID_STATE_ERR, 0);
// Implementation note: Fix-up means setting the current node properly
// after a remove.
- if (node.isNull())
- return;
+ if (!node) return;
- DOM_Node deleted = matchNodeOrParent(node);
+ IDOM_Node* deleted = matchNodeOrParent(node);
- if (deleted.isNull()) return;
+ if (!deleted) return;
if (fForward) {
fCurrentNode = previousNode(deleted);
} else
// if (!fForward)
{
- DOM_Node next = nextNode(deleted, false);
- if (! next.isNull()) {
+ IDOM_Node* next = nextNode(deleted, false);
+ if (next != 0) {
// normal case: there _are_ nodes following this in the iterator.
fCurrentNode = next;
} else {
@@ -403,27 +394,3 @@
}
-
-void NodeIteratorImpl::unreferenced()
-{
- DOM_Document doc = fRoot.getOwnerDocument();
- DocumentImpl* impl;
-
- if (! doc.isNull()) {
- impl = (DocumentImpl *) doc.fImpl;
- }
- else
- impl = (DocumentImpl *) fRoot.fImpl;
-
- if (impl->iterators != 0L) {
- int i;
- int sz = impl->iterators->size();
- for (i = 0; i < sz; i++)
- if (impl->iterators->elementAt(i) == this) {
- impl->iterators->removeElementAt(i);
- break;
- }
- }
-
- delete this;
-}
1.3 +68 -71 xml-xerces/c/src/idom/IDNodeIteratorImpl.hpp
Index: IDNodeIteratorImpl.hpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/idom/IDNodeIteratorImpl.hpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- IDNodeIteratorImpl.hpp 2001/05/11 13:25:45 1.2
+++ IDNodeIteratorImpl.hpp 2001/06/04 20:11:52 1.3
@@ -56,6 +56,9 @@
/*
* $Log: IDNodeIteratorImpl.hpp,v $
+ * Revision 1.3 2001/06/04 20:11:52 tng
+ * IDOM: Complete IDNodeIterator, IDTreeWalker, IDNodeFilter.
+ *
* Revision 1.2 2001/05/11 13:25:45 tng
* Copyright update.
*
@@ -64,93 +67,87 @@
*
*/
-#ifndef NodeIteratorImpl_HEADER_GUARD_
-#define NodeIteratorImpl_HEADER_GUARD_
+#ifndef IDNodeIteratorImpl_HEADER_GUARD_
+#define IDNodeIteratorImpl_HEADER_GUARD_
-// NodeIteratorImpl.hpp: interface for the NodeIteratorImpl class.
+// IDNodeIteratorImpl.hpp: interface for the IDNodeIteratorImpl class.
//
//////////////////////////////////////////////////////////////////////
-
-#include "DOM_Node.hpp"
-#include "DOM_NodeIterator.hpp"
-#include "RefCountedImpl.hpp"
+#include "IDOM_Node.hpp"
+#include "IDOM_NodeIterator.hpp"
-class CDOM_EXPORT NodeIteratorImpl : public RefCountedImpl {
- protected:
- NodeIteratorImpl ();
-
- public:
- virtual ~NodeIteratorImpl ();
- NodeIteratorImpl (
- DOM_Node root,
- unsigned long whatToShow,
- DOM_NodeFilter* nodeFilter,
- bool expandEntityRef);
- NodeIteratorImpl ( const NodeIteratorImpl& toCopy);
-
- NodeIteratorImpl& operator= (const NodeIteratorImpl& other);
-
- unsigned long getWhatToShow ();
- DOM_NodeFilter* getFilter ();
-
- DOM_Node nextNode ();
- DOM_Node previousNode ();
- bool acceptNode (DOM_Node node);
- DOM_Node matchNodeOrParent (DOM_Node node);
- DOM_Node nextNode (DOM_Node node, bool visitChildren);
- DOM_Node previousNode (DOM_Node node);
- void removeNode (DOM_Node node);
+class CDOM_EXPORT IDNodeIteratorImpl : public IDOM_NodeIterator {
+ private:
+ //
+ // Data
+ //
+ // The root.
+ IDOM_Node* fRoot;
- void unreferenced();
-
- void detach ();
-
- // Get the expandEntity reference flag.
- bool getExpandEntityReferences();
+ // The whatToShow mask.
+ unsigned long fWhatToShow;
+ // The NodeFilter reference.
+ IDOM_NodeFilter* fNodeFilter;
- private:
- //
- // Data
- //
- // The root.
- DOM_Node fRoot;
- // The whatToShow mask.
- unsigned long fWhatToShow;
-
- // The NodeFilter reference.
- DOM_NodeFilter* fNodeFilter;
-
// The expandEntity reference flag.
bool fExpandEntityReferences;
+ bool fDetached;
+
- bool fDetached;
+ //
+ // Iterator state - current node and direction.
+ //
+ // Note: The current node and direction are sufficient to implement
+ // the desired behaviour of the current pointer being _between_
+ // two nodes. The fCurrentNode is actually the last node returned,
+ // and the
+ // direction is whether the pointer is in front or behind this node.
+ // (usually akin to whether the node was returned via nextNode())
+ // (eg fForward = true) or previousNode() (eg fForward = false).
+ // The last Node returned.
+ IDOM_Node* fCurrentNode;
+
+ // The direction of the iterator on the fCurrentNode.
+ // <pre>
+ // nextNode() == fForward = true;
+ // previousNode() == fForward = false;
+ // </pre>
+ bool fForward;
+
+ protected:
+ IDNodeIteratorImpl ();
+
+ public:
+ virtual ~IDNodeIteratorImpl ();
+ IDNodeIteratorImpl (
+ IDOM_Node* root,
+ unsigned long whatToShow,
+ IDOM_NodeFilter* nodeFilter,
+ bool expandEntityRef);
- //
- // Iterator state - current node and direction.
- //
- // Note: The current node and direction are sufficient to implement
- // the desired behaviour of the current pointer being _between_
- // two nodes. The fCurrentNode is actually the last node returned,
- // and the
- // direction is whether the pointer is in front or behind this node.
- // (usually akin to whether the node was returned via nextNode())
- // (eg fForward = true) or previousNode() (eg fForward = false).
-
- // The last Node returned.
- DOM_Node fCurrentNode;
-
- // The direction of the iterator on the fCurrentNode.
- // <pre>
- // nextNode() == fForward = true;
- // previousNode() == fForward = false;
- // </pre>
- bool fForward;
+ IDNodeIteratorImpl ( const IDNodeIteratorImpl& toCopy);
+ IDNodeIteratorImpl& operator= (const IDNodeIteratorImpl& other);
+
+ virtual unsigned long getWhatToShow ();
+ virtual IDOM_NodeFilter* getFilter ();
+ // Get the expandEntity reference flag.
+ virtual bool getExpandEntityReferences();
+ virtual IDOM_Node* nextNode ();
+ virtual IDOM_Node* previousNode ();
+ virtual void detach ();
+
+ private:
+ IDOM_Node* matchNodeOrParent (IDOM_Node* node);
+ IDOM_Node* nextNode (IDOM_Node* node, bool visitChildren);
+ IDOM_Node* previousNode (IDOM_Node* node);
+ void removeNode (IDOM_Node* node);
+ bool acceptNode (IDOM_Node* node);
};
1.3 +10 -3 xml-xerces/c/src/idom/IDOM.hpp
Index: IDOM.hpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/idom/IDOM.hpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- IDOM.hpp 2001/05/11 13:25:48 1.2
+++ IDOM.hpp 2001/06/04 20:11:53 1.3
@@ -1,5 +1,5 @@
-#ifndef DOM_HEADER_GUARD_
-#define DOM_HEADER_GUARD_
+#ifndef IDOM_HEADER_GUARD_HPP
+#define IDOM_HEADER_GUARD_HPP
/*
@@ -60,6 +60,9 @@
/*
* $Log: IDOM.hpp,v $
+ * Revision 1.3 2001/06/04 20:11:53 tng
+ * IDOM: Complete IDNodeIterator, IDTreeWalker, IDNodeFilter.
+ *
* Revision 1.2 2001/05/11 13:25:48 tng
* Copyright update.
*
@@ -87,11 +90,15 @@
#include <idom/IDOM_EntityReference.hpp>
#include <idom/IDOM_NamedNodeMap.hpp>
#include <idom/IDOM_Node.hpp>
+#include <idom/IDOM_NodeFilter.hpp>
+#include <idom/IDOM_NodeIterator.hpp>
#include <idom/IDOM_NodeList.hpp>
#include <idom/IDOM_Notation.hpp>
#include <idom/IDOM_ProcessingInstruction.hpp>
+#include <idom/IDOM_Range.hpp>
+#include <idom/IDOM_RangeException.hpp>
#include <idom/IDOM_Text.hpp>
+#include <idom/IDOM_TreeWalker.hpp>
#include <idom/IDOM_XMLDecl.hpp>
-
#endif
1.3 +50 -63 xml-xerces/c/src/idom/IDOM_NodeFilter.hpp
Index: IDOM_NodeFilter.hpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/idom/IDOM_NodeFilter.hpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- IDOM_NodeFilter.hpp 2001/05/11 13:25:53 1.2
+++ IDOM_NodeFilter.hpp 2001/06/04 20:11:53 1.3
@@ -56,6 +56,9 @@
/*
* $Log: IDOM_NodeFilter.hpp,v $
+ * Revision 1.3 2001/06/04 20:11:53 tng
+ * IDOM: Complete IDNodeIterator, IDTreeWalker, IDNodeFilter.
+ *
* Revision 1.2 2001/05/11 13:25:53 tng
* Copyright update.
*
@@ -64,21 +67,21 @@
*
*/
-// DOM_NodeFilter.h: interface for the DOM_NodeFilter class.
+// IDOM_NodeFilter.h: interface for the IDOM_NodeFilter class.
//
//////////////////////////////////////////////////////////////////////
-#ifndef DOM_NodeFilter_HEADER_GUARD_
-#define DOM_NodeFilter_HEADER_GUARD_
+#ifndef IDOM_NodeFilter_HEADER_GUARD_
+#define IDOM_NodeFilter_HEADER_GUARD_
-#include "DOM_Node.hpp"
+#include "IDOM_Node.hpp"
-class NodeFilterImpl;
+class IDNodeFilterImpl;
/**
* Filters are objects that know how to "filter out" nodes. If a
- * <code>DOM_NodeIterator</code> or <code>DOM_TreeWalker</code> is given a
+ * <code>IDOM_NodeIterator</code> or <code>IDOM_TreeWalker</code> is given a
* filter, it applies the filter before it returns the next node.
*
* If the filter says to accept the node, the iterator returns it; otherwise, the
@@ -97,33 +100,38 @@
* <p><b>"Experimental - subject to change"</b></p>
*
*/
-class CDOM_EXPORT DOM_NodeFilter
+class CDOM_EXPORT IDOM_NodeFilter
{
+ protected:
+ IDOM_NodeFilter() {};
+ IDOM_NodeFilter(const IDOM_NodeFilter &other) {};
+ IDOM_NodeFilter & operator = (const IDOM_NodeFilter &other) {return *this;};
+
public:
- /** @name Enumerators for Node Filter */
+ /** @name Enumerators for Node Filter */
//@{
- /*
- * <table><tr><td>FILTER_ACCEPT</td>
- * <td>Accept the node. Navigation methods defined for
- * NodeIterator or TreeWalker will return this node.</td>
- * </tr>
- * <tr><td>
- * FILTER_REJECT</td>
- * <td>Reject the node. Navigation methods defined for
- * NodeIterator or TreeWalker will not return this
- * node. For TreeWalker, the children of this node will
- * also be rejected. Iterators treat this as a synonym
- * for FILTER_SKIP.</td>
- * </tr>
- * <tr><td>FILTER_SKIP</td>
- * <td>Reject the node. Navigation methods defined for
- * NodeIterator or TreeWalker will not return this
- * node. For both NodeIterator and Treewalker, the
- * children of this node will still be considered.</td>
- * </tr>
- * </table>
- *
- */
+ /*
+ * <table><tr><td>FILTER_ACCEPT</td>
+ * <td>Accept the node. Navigation methods defined for
+ * NodeIterator or TreeWalker will return this node.</td>
+ * </tr>
+ * <tr>
+ * <td>FILTER_REJECT</td>
+ * <td>Reject the node. Navigation methods defined for
+ * NodeIterator or TreeWalker will not return this
+ * node. For TreeWalker, the children of this node will
+ * also be rejected. Iterators treat this as a synonym
+ * for FILTER_SKIP.</td>
+ * </tr>
+ * <tr><td>FILTER_SKIP</td>
+ * <td>Reject the node. Navigation methods defined for
+ * NodeIterator or TreeWalker will not return this
+ * node. For both NodeIterator and Treewalker, the
+ * children of this node will still be considered.</td>
+ * </tr>
+ * </table>
+ *
+ */
enum FilterAction {FILTER_ACCEPT = 1,
FILTER_REJECT = 2,
FILTER_SKIP = 3};
@@ -143,45 +151,24 @@
SHOW_DOCUMENT_FRAGMENT = 0x00000400,
SHOW_NOTATION = 0x00000800
};
- //@}
-
- /** @name Constructors */
- //@{
- /**
- * Default constructor for DOM_NodeFilter.
- */
- DOM_NodeFilter();
//@}
- /** @name Destructor. */
- //@{
- /**
- * Destructor for DOM_NodeFilter.
- */
- virtual ~DOM_NodeFilter();
- //@}
-
/** @name Test function. */
//@{
- /**
- * Test whether a specified node is visible in the logical view of a DOM_TreeWalker
- * or DOM_NodeIterator. This function will be called by the implementation of
- * DOM_TreeWalker and DOM_NodeIterator; it is not intended to be called directly from user
- * code.
- *
- * <p><b>"Experimental - subject to change"</b></p>
- *
- * @param node The node to check to see if it passes the filter or not.
- * @return A constant to determine whether the node is accepted, rejected, or skipped.
- */
- virtual short acceptNode (const DOM_Node &node) const =0;
+ /**
+ * Test whether a specified node is visible in the logical view of a IDOM_TreeWalker
+ * or IDOM_NodeIterator. This function will be called by the implementation of
+ * IDOM_TreeWalker and IDOM_NodeIterator; it is not intended to be called directly from user
+ * code.
+ *
+ * <p><b>"Experimental - subject to change"</b></p>
+ *
+ * @param node The node to check to see if it passes the filter or not.
+ * @return A constant to determine whether the node is accepted, rejected, or skipped.
+ */
+ virtual short acceptNode (const IDOM_Node* node) const =0;
//@}
- private:
- DOM_NodeFilter(const DOM_NodeFilter &other);
- DOM_NodeFilter & operator = (const DOM_NodeFilter &other);
- bool operator == (const DOM_NodeFilter &other) const;
- bool operator != (const DOM_NodeFilter &other) const;
};
#endif
1.3 +23 -91 xml-xerces/c/src/idom/IDOM_NodeIterator.hpp
Index: IDOM_NodeIterator.hpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/idom/IDOM_NodeIterator.hpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- IDOM_NodeIterator.hpp 2001/05/11 13:25:53 1.2
+++ IDOM_NodeIterator.hpp 2001/06/04 20:11:53 1.3
@@ -56,6 +56,9 @@
/*
* $Log: IDOM_NodeIterator.hpp,v $
+ * Revision 1.3 2001/06/04 20:11:53 tng
+ * IDOM: Complete IDNodeIterator, IDTreeWalker, IDNodeFilter.
+ *
* Revision 1.2 2001/05/11 13:25:53 tng
* Copyright update.
*
@@ -64,13 +67,13 @@
*
*/
-#ifndef DOM_NodeIterator_HEADER_GUARD_
-#define DOM_NodeIterator_HEADER_GUARD_
+#ifndef IDOM_NodeIterator_HEADER_GUARD_
+#define IDOM_NodeIterator_HEADER_GUARD_
-#include "DOM_NodeFilter.hpp"
-#include "DOM_Node.hpp"
+#include "IDOM_NodeFilter.hpp"
+#include "IDOM_Node.hpp"
-class NodeIteratorImpl;
+class IDNodeIteratorImpl;
/**
* NodeIterators are used to step through a set of nodes
@@ -85,87 +88,24 @@
* <p><b>"Experimental - subject to change"</b></p>
*
*/
-class CDOM_EXPORT DOM_NodeIterator
+class CDOM_EXPORT IDOM_NodeIterator
{
- public:
- /** @name Constructors and assignment operator */
- //@{
- /**
- * Default constructor.
- */
- DOM_NodeIterator ();
-
- /**
- * Copy constructor.
- *
- * @param other The object to be copied.
- */
- DOM_NodeIterator(const DOM_NodeIterator &other);
-
- /**
- * Assignment operator.
- *
- * @param other The object to be copied.
- */
- DOM_NodeIterator & operator = (const DOM_NodeIterator &other);
-
- /**
- * Assignment operator. This overloaded variant is provided for
- * the sole purpose of setting a DOM_NodeIterator to null.
- *
- * @param val. Only a value of 0, or null, is allowed.
- */
- DOM_NodeIterator & operator = (const DOM_NullPtr *val);
- //@}
-
- /** @name Destructor. */
- //@{
- /**
- * Destructor for DOM_NodeIterator.
- */
- ~DOM_NodeIterator();
- //@}
-
- /** @name Equality and Inequality operators. */
- //@{
- /**
- * The equality operator.
- *
- * @param other The object reference with which <code>this</code> object is compared
- * @returns True if both <code>DOM_NodeIterator</code>s refer to the same
- * actual node, or are both null; return false otherwise.
- */
- bool operator == (const DOM_NodeIterator & other)const;
-
- /**
- * Compare with a pointer. Intended only to allow a convenient
- * comparison with null.
- */
- bool operator == (const DOM_NullPtr *other) const;
-
- /**
- * The inequality operator. See operator ==.
- */
- bool operator != (const DOM_NodeIterator & other) const;
-
- /**
- * Compare with a pointer. Intended only to allow a convenient
- * comparison with null.
- *
- */
- bool operator != (const DOM_NullPtr * other) const;
- //@}
+ protected:
+ IDOM_NodeIterator() {};
+ IDOM_NodeIterator(const IDOM_NodeIterator &other) {};
+ IDOM_NodeIterator & operator = (const IDOM_NodeIterator &other) {return *this;};
+ public:
/** @name Get functions. */
//@{
/**
* Return which node types are presented via the iterator.
- * The available set of constants is defined in the DOM_NodeFilter interface.
+ * The available set of constants is defined in the IDOM_NodeFilter interface.
*
* <p><b>"Experimental - subject to change"</b></p>
*
*/
- unsigned long getWhatToShow();
+ virtual unsigned long getWhatToShow() = 0;
/**
* Return The filter used to screen nodes.
@@ -173,21 +113,21 @@
* <p><b>"Experimental - subject to change"</b></p>
*
*/
- DOM_NodeFilter* getFilter();
+ virtual IDOM_NodeFilter* getFilter() = 0;
/**
* Return the expandEntityReferences flag.
* The value of this flag determines whether the children of entity reference
- * nodes are visible to the DOM_NodeFilter. If false, they will be skipped over.
+ * nodes are visible to the IDOM_NodeFilter. If false, they will be skipped over.
*
* <p><b>"Experimental - subject to change"</b></p>
*
*/
- bool getExpandEntityReferences();
+ virtual bool getExpandEntityReferences() = 0;
/**
* Returns the next node in the set and advances the position of the iterator
- * in the set. After a DOM_NodeIterator is created, the first call to nextNode()
+ * in the set. After a IDOM_NodeIterator is created, the first call to nextNode()
* returns the first node in the set.
*
* <p><b>"Experimental - subject to change"</b></p>
@@ -196,7 +136,7 @@
* INVALID_STATE_ERR: Raised if this method is called after the
* <code>detach</code> method was invoked.
*/
- DOM_Node nextNode();
+ virtual IDOM_Node* nextNode() = 0;
/**
* Returns the previous node in the set and moves the position of the iterator
@@ -208,7 +148,7 @@
* INVALID_STATE_ERR: Raised if this method is called after the
* <code>detach</code> method was invoked.
*/
- DOM_Node previousNode();
+ virtual IDOM_Node* previousNode() = 0;
//@}
/** @name Detaching functions. */
@@ -222,16 +162,8 @@
* <p><b>"Experimental - subject to change"</b></p>
*
*/
- void detach();
+ virtual void detach() = 0;
//@}
-
- protected:
- DOM_NodeIterator (NodeIteratorImpl* impl);
-
- friend class DOM_Document;
-
- private:
- NodeIteratorImpl* fImpl;
};
#endif
1.3 +44 -115 xml-xerces/c/src/idom/IDOM_TreeWalker.hpp
Index: IDOM_TreeWalker.hpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/idom/IDOM_TreeWalker.hpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- IDOM_TreeWalker.hpp 2001/05/11 13:25:56 1.2
+++ IDOM_TreeWalker.hpp 2001/06/04 20:11:53 1.3
@@ -56,6 +56,9 @@
/*
* $Log: IDOM_TreeWalker.hpp,v $
+ * Revision 1.3 2001/06/04 20:11:53 tng
+ * IDOM: Complete IDNodeIterator, IDTreeWalker, IDNodeFilter.
+ *
* Revision 1.2 2001/05/11 13:25:56 tng
* Copyright update.
*
@@ -63,26 +66,24 @@
* IDOM
*
*/
-
-#ifndef DOM_TreeWalker_HEADER_GUARD_
-#define DOM_TreeWalker_HEADER_GUARD_
-#include "DOM_Node.hpp"
-#include "DOM_NodeFilter.hpp"
+#ifndef IDOM_TreeWalker_HEADER_GUARD_
+#define IDOM_TreeWalker_HEADER_GUARD_
-class TreeWalkerImpl;
+#include "IDOM_Node.hpp"
+#include "IDOM_NodeFilter.hpp"
/**
- * <code>DOM_TreeWalker</code> objects are used to navigate a document tree or
+ * <code>IDOM_TreeWalker</code> objects are used to navigate a document tree or
* subtree using the view of the document defined by its <code>whatToShow</code>
- * flags and any filters that are defined for the <code>DOM_TreeWalker</code>. Any
- * function which performs navigation using a <code>DOM_TreeWalker</code> will
- * automatically support any view defined by a <code>DOM_TreeWalker</code>.
+ * flags and any filters that are defined for the <code>IDOM_TreeWalker</code>. Any
+ * function which performs navigation using a <code>IDOM_TreeWalker</code> will
+ * automatically support any view defined by a <code>IDOM_TreeWalker</code>.
*
* Omitting nodes from the logical view of a subtree can result in a structure that is
* substantially different from the same subtree in the complete, unfiltered document. Nodes
- * that are siblings in the DOM_TreeWalker view may be children of different, widely separated
+ * that are siblings in the IDOM_TreeWalker view may be children of different, widely separated
* nodes in the original view. For instance, consider a Filter that skips all nodes except for
* Text nodes and the root node of a document. In the logical view that results, all text
* nodes will be siblings and appear as direct children of the root node, no matter how
@@ -91,86 +92,23 @@
* <p><b>"Experimental - subject to change"</b></p>
*
*/
-class CDOM_EXPORT DOM_TreeWalker {
- public:
- /** @name Constructors and assignment operator */
- //@{
- /**
- * Default constructor.
- */
- DOM_TreeWalker();
-
- /**
- * Copy constructor.
- *
- * @param other The object to be copied.
- */
- DOM_TreeWalker(const DOM_TreeWalker &other);
-
- /**
- * Assignment operator.
- *
- * @param other The object to be copied.
- */
- DOM_TreeWalker & operator = (const DOM_TreeWalker &other);
-
- /**
- * Assignment operator. This overloaded variant is provided for
- * the sole purpose of setting a DOM_NodeIterator to null.
- *
- * @param val. Only a value of 0, or null, is allowed.
- */
- DOM_TreeWalker & operator = (const DOM_NullPtr *val);
- //@}
-
- /** @name Destructor. */
- //@{
- /**
- * Destructor for DOM_TreeWalker.
- */
- ~DOM_TreeWalker();
- //@}
-
- /** @name Equality and Inequality operators. */
- //@{
- /**
- * The equality operator.
- *
- * @param other The object reference with which <code>this</code> object is compared
- * @returns True if both <code>DOM_TreeWalker</code>s refer to the same
- * actual node, or are both null; return false otherwise.
- */
- bool operator == (const DOM_TreeWalker & other)const;
-
- /**
- * Compare with a pointer. Intended only to allow a convenient
- * comparison with null.
- */
- bool operator == (const DOM_NullPtr *other) const;
-
- /**
- * The inequality operator. See operator ==.
- */
- bool operator != (const DOM_TreeWalker & other) const;
-
- /**
- * Compare with a pointer. Intended only to allow a convenient
- * comparison with null.
- *
- */
- bool operator != (const DOM_NullPtr * other) const;
- //@}
+class CDOM_EXPORT IDOM_TreeWalker {
+ protected:
+ IDOM_TreeWalker() {};
+ IDOM_TreeWalker(const IDOM_TreeWalker &other) {};
+ IDOM_TreeWalker & operator = (const IDOM_TreeWalker &other) {return *this;};
+ public:
/** @name Get functions. */
//@{
/**
- * Return which node types are presented via the DOM_TreeWalker.
- * These constants are defined in the DOM_NodeFilter interface.
+ * Return which node types are presented via the IDOM_TreeWalker.
+ * These constants are defined in the IDOM_NodeFilter interface.
*
* <p><b>"Experimental - subject to change"</b></p>
*
*/
- unsigned long getWhatToShow();
+ virtual unsigned long getWhatToShow()= 0;
/**
* Return The filter used to screen nodes.
@@ -178,121 +116,112 @@
* <p><b>"Experimental - subject to change"</b></p>
*
*/
- DOM_NodeFilter* getFilter();
+ virtual IDOM_NodeFilter* getFilter()= 0;
/**
* Return the expandEntityReferences flag.
* The value of this flag determines whether the children of entity reference
- * nodes are visible to the DOM_TreeWalker. If false, they will be skipped over.
+ * nodes are visible to the IDOM_TreeWalker. If false, they will be skipped over.
*
* <p><b>"Experimental - subject to change"</b></p>
*
*/
- bool getExpandEntityReferences();
+ virtual bool getExpandEntityReferences()= 0;
/**
- * Return the node at which the DOM_TreeWalker is currently positioned.
+ * Return the node at which the IDOM_TreeWalker is currently positioned.
*
* <p><b>"Experimental - subject to change"</b></p>
*
*/
- DOM_Node getCurrentNode();
+ virtual IDOM_Node* getCurrentNode()= 0;
/**
* Moves to and returns the closest visible ancestor node of the current node.
- * If the search for parentNode attempts to step upward from the DOM_TreeWalker's root
+ * If the search for parentNode attempts to step upward from the IDOM_TreeWalker's root
* node, or if it fails to find a visible ancestor node, this method retains the
* current position and returns null.
*
* <p><b>"Experimental - subject to change"</b></p>
*
*/
- DOM_Node parentNode();
+ virtual IDOM_Node* parentNode()= 0;
/**
- * Moves the <code>DOM_TreeWalker</code> to the first child of the current node,
+ * Moves the <code>IDOM_TreeWalker</code> to the first child of the current node,
* and returns the new node. If the current node has no children, returns
* <code>null</code>, and retains the current node.
*
* <p><b>"Experimental - subject to change"</b></p>
*
*/
- DOM_Node firstChild();
+ virtual IDOM_Node* firstChild()= 0;
/**
- * Moves the <code>DOM_TreeWalker</code> to the last child of the current node, and
+ * Moves the <code>IDOM_TreeWalker</code> to the last child of the current node, and
* returns the new node. If the current node has no children, returns
* <code>null</code>, and retains the current node.
*
* <p><b>"Experimental - subject to change"</b></p>
*
*/
- DOM_Node lastChild();
+ virtual IDOM_Node* lastChild()= 0;
/**
- * Moves the <code>DOM_TreeWalker</code> to the previous sibling of the current
+ * Moves the <code>IDOM_TreeWalker</code> to the previous sibling of the current
* node, and returns the new node. If the current node has no previous sibling,
* returns <code>null</code>, and retains the current node.
*
* <p><b>"Experimental - subject to change"</b></p>
*
*/
- DOM_Node previousSibling();
+ virtual IDOM_Node* previousSibling()= 0;
/**
- * Moves the <code>DOM_TreeWalker</code> to the next sibling of the current node,
+ * Moves the <code>IDOM_TreeWalker</code> to the next sibling of the current node,
* and returns the new node. If the current node has no next sibling, returns
* <code>null</code>, and retains the current node.
*
* <p><b>"Experimental - subject to change"</b></p>
*
*/
- DOM_Node nextSibling();
+ virtual IDOM_Node* nextSibling()= 0;
/**
- * Moves the <code>DOM_TreeWalker</code> to the previous visible node in document
+ * Moves the <code>IDOM_TreeWalker</code> to the previous visible node in document
* order relative to the current node, and returns the new node. If the current
* node has no previous node,
- * or if the search for previousNode attempts to step upward from the DOM_TreeWalker's
+ * or if the search for previousNode attempts to step upward from the IDOM_TreeWalker's
* root node, returns <code>null</code>, and retains the current node.
*
* <p><b>"Experimental - subject to change"</b></p>
*
*/
- DOM_Node previousNode();
+ virtual IDOM_Node* previousNode()= 0;
/**
- * Moves the <code>DOM_TreeWalker</code> to the next visible node in document order
+ * Moves the <code>IDOM_TreeWalker</code> to the next visible node in document order
* relative to the current node, and returns the new node. If the current node has
* no next node,
- * or if the search for nextNode attempts to step upward from the DOM_TreeWalker's
+ * or if the search for nextNode attempts to step upward from the IDOM_TreeWalker's
* root node, returns <code>null</code>, and retains the current node.
*
* <p><b>"Experimental - subject to change"</b></p>
*
*/
- DOM_Node nextNode();
+ virtual IDOM_Node* nextNode()= 0;
//@}
/** @name Set functions. */
//@{
/**
- * Set the node at which the DOM_TreeWalker is currently positioned.
+ * Set the node at which the IDOM_TreeWalker is currently positioned.
*
* <p><b>"Experimental - subject to change"</b></p>
*
*/
- void setCurrentNode(DOM_Node currentNode);
+ virtual void setCurrentNode(IDOM_Node* currentNode)= 0;
//@}
-
-
- protected:
- DOM_TreeWalker(TreeWalkerImpl* impl);
-
- friend class DOM_Document;
-
- private:
- TreeWalkerImpl* fImpl;
};
#endif
1.3 +132 -180 xml-xerces/c/src/idom/IDTreeWalkerImpl.cpp
Index: IDTreeWalkerImpl.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/idom/IDTreeWalkerImpl.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- IDTreeWalkerImpl.cpp 2001/05/11 13:26:00 1.2
+++ IDTreeWalkerImpl.cpp 2001/06/04 20:11:53 1.3
@@ -56,6 +56,9 @@
/*
* $Log: IDTreeWalkerImpl.cpp,v $
+ * Revision 1.3 2001/06/04 20:11:53 tng
+ * IDOM: Complete IDNodeIterator, IDTreeWalker, IDNodeFilter.
+ *
* Revision 1.2 2001/05/11 13:26:00 tng
* Copyright update.
*
@@ -64,17 +67,17 @@
*
*/
-#include "TreeWalkerImpl.hpp"
-#include "DOM_Document.hpp"
-#include "DOM_DOMException.hpp"
-#include "DocumentImpl.hpp"
+#include "IDTreeWalkerImpl.hpp"
+#include "IDOM_Document.hpp"
+#include "IDOM_DOMException.hpp"
+#include "IDDocumentImpl.hpp"
/** constructor */
-TreeWalkerImpl::TreeWalkerImpl (
- DOM_Node root,
+IDTreeWalkerImpl::IDTreeWalkerImpl (
+ IDOM_Node* root,
unsigned long whatToShow,
- DOM_NodeFilter* nodeFilter,
+ IDOM_NodeFilter* nodeFilter,
bool expandEntityRef)
: fCurrentNode(root),
fRoot(root),
@@ -86,7 +89,7 @@
}
-TreeWalkerImpl::TreeWalkerImpl (const TreeWalkerImpl& twi)
+IDTreeWalkerImpl::IDTreeWalkerImpl (const IDTreeWalkerImpl& twi)
: fCurrentNode(twi.fCurrentNode),
fRoot(twi.fRoot),
fWhatToShow(twi.fWhatToShow),
@@ -96,7 +99,7 @@
}
-TreeWalkerImpl& TreeWalkerImpl::operator= (const TreeWalkerImpl& twi) {
+IDTreeWalkerImpl& IDTreeWalkerImpl::operator= (const IDTreeWalkerImpl& twi) {
if (this != &twi)
{
fCurrentNode = twi.fCurrentNode;
@@ -111,58 +114,33 @@
-void TreeWalkerImpl::unreferenced()
-{
- DOM_Document doc = fRoot.getOwnerDocument();
- DocumentImpl* impl;
-
- if (! doc.isNull()) {
- impl = (DocumentImpl *) doc.fImpl;
- }
- else
- impl = (DocumentImpl *) fRoot.fImpl;
-
- if (impl->treeWalkers != 0L) {
- int i;
- int sz = impl->treeWalkers->size();
- for (i = 0; i < sz; i++)
- if (impl->treeWalkers->elementAt(i) == this) {
- impl->treeWalkers->removeElementAt(i);
- break;
- }
- }
-
- delete this;
-}
-
-
/** Return the whatToShow value */
-unsigned long TreeWalkerImpl::getWhatToShow () {
+unsigned long IDTreeWalkerImpl::getWhatToShow () {
return fWhatToShow;
}
/** Return the NodeFilter */
-DOM_NodeFilter* TreeWalkerImpl::getFilter () {
+IDOM_NodeFilter* IDTreeWalkerImpl::getFilter () {
return fNodeFilter;
}
/** Get the expandEntity reference flag. */
-bool TreeWalkerImpl::getExpandEntityReferences() {
+bool IDTreeWalkerImpl::getExpandEntityReferences() {
return fExpandEntityReferences;
}
/** Return the current Node. */
-DOM_Node TreeWalkerImpl::getCurrentNode () {
+IDOM_Node* IDTreeWalkerImpl::getCurrentNode () {
return fCurrentNode;
}
/** Return the current Node. */
-void TreeWalkerImpl::setCurrentNode (DOM_Node node) {
+void IDTreeWalkerImpl::setCurrentNode (IDOM_Node* node) {
fCurrentNode = node;
}
@@ -172,13 +150,11 @@
* after applying filter, whatToshow.
* If result is not null, set the current Node.
*/
-DOM_Node TreeWalkerImpl::parentNode () {
-
- DOM_Node result;
+IDOM_Node* IDTreeWalkerImpl::parentNode () {
- if (fCurrentNode.isNull()) return result;
+ if (!fCurrentNode) return 0;
- DOM_Node node = getParentNode(fCurrentNode);
+ IDOM_Node* node = getParentNode(fCurrentNode);
if (node != 0) {
fCurrentNode = node;
}
@@ -191,14 +167,13 @@
* after applying filter, whatToshow.
* If result is not null, set the current Node.
*/
-DOM_Node TreeWalkerImpl::firstChild () {
+IDOM_Node* IDTreeWalkerImpl::firstChild () {
- DOM_Node result;
+ if (!fCurrentNode) return 0;
- if (fCurrentNode.isNull()) return result;
+ IDOM_Node* node = getFirstChild(fCurrentNode);
- DOM_Node node = getFirstChild(fCurrentNode);
- if (! node.isNull()) {
+ if (node != 0) {
fCurrentNode = node;
}
return node;
@@ -209,14 +184,12 @@
* after applying filter, whatToshow.
* If result is not null, set the current Node.
*/
-DOM_Node TreeWalkerImpl::lastChild () {
-
- DOM_Node result;
+IDOM_Node* IDTreeWalkerImpl::lastChild () {
- if (fCurrentNode.isNull()) return result;
+ if (!fCurrentNode) return 0;
- DOM_Node node = getLastChild(fCurrentNode);
- if (! node.isNull()) {
+ IDOM_Node* node = getLastChild(fCurrentNode);
+ if (node != 0) {
fCurrentNode = node;
}
return node;
@@ -228,14 +201,12 @@
* If result is not null, set the current Node.
*/
-DOM_Node TreeWalkerImpl::previousSibling () {
+IDOM_Node* IDTreeWalkerImpl::previousSibling () {
- DOM_Node result;
-
- if (fCurrentNode.isNull()) return result;
+ if (!fCurrentNode) return 0;
- DOM_Node node = getPreviousSibling(fCurrentNode);
- if (! node.isNull()) {
+ IDOM_Node* node = getPreviousSibling(fCurrentNode);
+ if (node != 0) {
fCurrentNode = node;
}
return node;
@@ -247,14 +218,12 @@
* If result is not null, set the current Node.
*/
-DOM_Node TreeWalkerImpl::nextSibling () {
+IDOM_Node* IDTreeWalkerImpl::nextSibling () {
- DOM_Node result;
+ if (!fCurrentNode) return 0;
- if (fCurrentNode.isNull()) return result;
-
- DOM_Node node = getNextSibling(fCurrentNode);
- if (! node.isNull()) {
+ IDOM_Node* node = getNextSibling(fCurrentNode);
+ if (node != 0) {
fCurrentNode = node;
}
return node;
@@ -266,40 +235,33 @@
* If result is not null, set the current Node.
*/
-DOM_Node TreeWalkerImpl::previousNode () {
+IDOM_Node* IDTreeWalkerImpl::previousNode () {
- DOM_Node result;
+ if (!fCurrentNode) return 0;
- if (fCurrentNode.isNull()) return result;
-
// get sibling
- result = getPreviousSibling(fCurrentNode);
- if (result.isNull()) {
- result = getParentNode(fCurrentNode);
- if (! result.isNull()) {
- fCurrentNode = result;
- return fCurrentNode;
- }
- return result;
- }
-
- // get the lastChild of result.
- DOM_Node lastChild = getLastChild(result);
-
- // if there is a lastChild which passes filters return it.
- if (! lastChild.isNull()) {
- fCurrentNode = lastChild;
- return fCurrentNode;
+ IDOM_Node* node = getPreviousSibling(fCurrentNode);
+ if (node == 0) {
+ node = getParentNode(fCurrentNode);
+ if ( node != 0) {
+ fCurrentNode = node;
+ }
+ return node;
}
+ else {
- // otherwise return the previous sibling.
- if (! result.isNull()) {
- fCurrentNode = result;
+ // get the lastChild of result.
+ IDOM_Node* lastChild = getLastChild(node);
+
+ // if there is a lastChild which passes filters return it.
+ if (lastChild != 0) {
+ fCurrentNode = lastChild;
+ }
+ else {
+ fCurrentNode = node;
+ }
return fCurrentNode;
}
-
- // otherwise return null.
- return result;
}
@@ -308,40 +270,40 @@
* If result is not null, set the current Node.
*/
-DOM_Node TreeWalkerImpl::nextNode () {
+IDOM_Node* IDTreeWalkerImpl::nextNode () {
- DOM_Node result;
-
- if (fCurrentNode.isNull()) return result;
+ if (!fCurrentNode) return 0;
- result = getFirstChild(fCurrentNode);
+ IDOM_Node* node = getFirstChild(fCurrentNode);
- if (! result.isNull()) {
- fCurrentNode = result;
- return result;
+ if (node != 0) {
+ fCurrentNode = node;
+ return node;
}
+ else {
- result = getNextSibling(fCurrentNode);
+ node = getNextSibling(fCurrentNode);
- if (! result.isNull()) {
- fCurrentNode = result;
- return result;
- }
+ if (node != 0) {
+ fCurrentNode = node;
+ return node;
+ }
+ else {
- // return parent's 1st sibling.
- DOM_Node parent = getParentNode(fCurrentNode);
- while (! parent.isNull()) {
- result = getNextSibling(parent);
- if (! result.isNull()) {
- fCurrentNode = result;
- return result;
- } else {
- parent = getParentNode(parent);
+ // return parent's 1st sibling.
+ IDOM_Node* parent = getParentNode(fCurrentNode);
+ while ( parent != 0) {
+ node = getNextSibling(parent);
+ if (node != 0) {
+ fCurrentNode = node;
+ return node;
+ } else {
+ parent = getParentNode(parent);
+ }
+ }
+ return node;
}
}
-
- // end , return null
- return result;
}
@@ -351,18 +313,16 @@
* The current node is not consulted or set.
*/
-DOM_Node TreeWalkerImpl::getParentNode (DOM_Node node) {
+IDOM_Node* IDTreeWalkerImpl::getParentNode (IDOM_Node* node) {
- DOM_Node result;
+ if (!node || node == fRoot) return 0;
- if (node.isNull() || node == fRoot) return result;
+ IDOM_Node* newNode = node->getParentNode();
+ if (!newNode) return 0;
- DOM_Node newNode = node.getParentNode();
- if (newNode.isNull()) return result;
-
short accept = acceptNode(newNode);
- if (accept == DOM_NodeFilter::FILTER_ACCEPT)
+ if (accept == IDOM_NodeFilter::FILTER_ACCEPT)
return newNode;
return getParentNode(newNode);
@@ -376,36 +336,34 @@
* The current node is not consulted or set.
*/
-DOM_Node TreeWalkerImpl::getNextSibling (DOM_Node node) {
+IDOM_Node* IDTreeWalkerImpl::getNextSibling (IDOM_Node* node) {
- DOM_Node result;
-
- if (node.isNull() || node == fRoot) return result;
+ if (!node || node == fRoot) return 0;
- DOM_Node newNode = node.getNextSibling();
- if (newNode.isNull()) {
+ IDOM_Node* newNode = node->getNextSibling();
+ if (!newNode) {
- newNode = node.getParentNode();
+ newNode = node->getParentNode();
- if (newNode.isNull() || node == fRoot) return result;
+ if (!newNode || node == fRoot) return 0;
short parentAccept = acceptNode(newNode);
- if (parentAccept == DOM_NodeFilter::FILTER_SKIP) {
+ if (parentAccept == IDOM_NodeFilter::FILTER_SKIP) {
return getNextSibling(newNode);
}
- return result;
+ return 0;
}
short accept = acceptNode(newNode);
- if (accept == DOM_NodeFilter::FILTER_ACCEPT)
+ if (accept == IDOM_NodeFilter::FILTER_ACCEPT)
return newNode;
else
- if (accept == DOM_NodeFilter::FILTER_SKIP) {
- DOM_Node fChild = getFirstChild(newNode);
- if (fChild.isNull()) {
+ if (accept == IDOM_NodeFilter::FILTER_SKIP) {
+ IDOM_Node* fChild = getFirstChild(newNode);
+ if (!fChild) {
return getNextSibling(newNode);
}
return fChild;
@@ -421,35 +379,33 @@
* The current node is not consulted or set.
*/
-DOM_Node TreeWalkerImpl::getPreviousSibling (DOM_Node node) {
+IDOM_Node* IDTreeWalkerImpl::getPreviousSibling (IDOM_Node* node) {
- DOM_Node result;
-
- if (node.isNull() || node == fRoot) return result;
+ if (!node || node == fRoot) return 0;
- DOM_Node newNode = node.getPreviousSibling();
- if (newNode.isNull()) {
+ IDOM_Node* newNode = node->getPreviousSibling();
+ if (!newNode) {
- newNode = node.getParentNode();
- if (newNode.isNull() || node == fRoot) return result;
+ newNode = node->getParentNode();
+ if (!newNode || node == fRoot) return 0;
short parentAccept = acceptNode(newNode);
- if (parentAccept == DOM_NodeFilter::FILTER_SKIP) {
+ if (parentAccept == IDOM_NodeFilter::FILTER_SKIP) {
return getPreviousSibling(newNode);
}
- return result;
+ return 0;
}
short accept = acceptNode(newNode);
- if (accept == DOM_NodeFilter::FILTER_ACCEPT)
+ if (accept == IDOM_NodeFilter::FILTER_ACCEPT)
return newNode;
else
- if (accept == DOM_NodeFilter::FILTER_SKIP) {
- DOM_Node fChild = getLastChild(newNode);
- if (fChild.isNull()) {
+ if (accept == IDOM_NodeFilter::FILTER_SKIP) {
+ IDOM_Node* fChild = getLastChild(newNode);
+ if (!fChild) {
return getPreviousSibling(newNode);
}
return fChild;
@@ -465,22 +421,20 @@
* The current node is not consulted or set.
*/
-DOM_Node TreeWalkerImpl::getFirstChild (DOM_Node node) {
+IDOM_Node* IDTreeWalkerImpl::getFirstChild (IDOM_Node* node) {
- DOM_Node result;
+ if (!node) return 0;
- if (node.isNull()) return result;
+ IDOM_Node* newNode = node->getFirstChild();
+ if (!newNode) return 0;
- DOM_Node newNode = node.getFirstChild();
- if (newNode.isNull()) return result;
-
short accept = acceptNode(newNode);
- if (accept == DOM_NodeFilter::FILTER_ACCEPT)
+ if (accept == IDOM_NodeFilter::FILTER_ACCEPT)
return newNode;
else
- if (accept == DOM_NodeFilter::FILTER_SKIP
- && newNode.hasChildNodes())
+ if (accept == IDOM_NodeFilter::FILTER_SKIP
+ && newNode->hasChildNodes())
{
return getFirstChild(newNode);
}
@@ -494,22 +448,20 @@
* The current node is not consulted or set.
*/
-DOM_Node TreeWalkerImpl::getLastChild (DOM_Node node) {
+IDOM_Node* IDTreeWalkerImpl::getLastChild (IDOM_Node* node) {
- DOM_Node result;
-
- if (node.isNull()) return result;
+ if (!node) return 0;
- DOM_Node newNode = node.getLastChild();
- if (newNode.isNull()) return result;
+ IDOM_Node* newNode = node->getLastChild();
+ if (!newNode) return 0;
short accept = acceptNode(newNode);
- if (accept == DOM_NodeFilter::FILTER_ACCEPT)
+ if (accept == IDOM_NodeFilter::FILTER_ACCEPT)
return newNode;
else
- if (accept == DOM_NodeFilter::FILTER_SKIP
- && newNode.hasChildNodes())
+ if (accept == IDOM_NodeFilter::FILTER_SKIP
+ && newNode->hasChildNodes())
{
return getLastChild(newNode);
}
@@ -521,27 +473,27 @@
/** The node is accepted if it passes the whatToShow and the filter. */
-short TreeWalkerImpl::acceptNode (DOM_Node node) {
+short IDTreeWalkerImpl::acceptNode (IDOM_Node* node) {
if (fNodeFilter == 0) {
- if ( ( fWhatToShow & (1 << (node.getNodeType() - 1))) != 0)
+ if ( ( fWhatToShow & (1 << (node->getNodeType() - 1))) != 0)
{
- return DOM_NodeFilter::FILTER_ACCEPT;
+ return IDOM_NodeFilter::FILTER_ACCEPT;
}
else
{
- return DOM_NodeFilter::FILTER_SKIP;
+ return IDOM_NodeFilter::FILTER_SKIP;
}
} else {
// REVISIT: This logic is unclear from the spec!
- if ((fWhatToShow & (1 << (node.getNodeType() - 1))) != 0 ) {
+ if ((fWhatToShow & (1 << (node->getNodeType() - 1))) != 0 ) {
return fNodeFilter->acceptNode(node);
} else {
// what to show has failed!
- if (fNodeFilter->acceptNode(node) == DOM_NodeFilter::FILTER_REJECT) {
- return DOM_NodeFilter::FILTER_REJECT;
+ if (fNodeFilter->acceptNode(node) == IDOM_NodeFilter::FILTER_REJECT) {
+ return IDOM_NodeFilter::FILTER_REJECT;
} else {
- return DOM_NodeFilter::FILTER_SKIP;
+ return IDOM_NodeFilter::FILTER_SKIP;
}
}
}
1.3 +46 -46 xml-xerces/c/src/idom/IDTreeWalkerImpl.hpp
Index: IDTreeWalkerImpl.hpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/idom/IDTreeWalkerImpl.hpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- IDTreeWalkerImpl.hpp 2001/05/11 13:26:00 1.2
+++ IDTreeWalkerImpl.hpp 2001/06/04 20:11:53 1.3
@@ -56,6 +56,9 @@
/*
* $Log: IDTreeWalkerImpl.hpp,v $
+ * Revision 1.3 2001/06/04 20:11:53 tng
+ * IDOM: Complete IDNodeIterator, IDTreeWalker, IDNodeFilter.
+ *
* Revision 1.2 2001/05/11 13:26:00 tng
* Copyright update.
*
@@ -63,16 +66,30 @@
* IDOM
*
*/
+
+#ifndef IDTreeWalkerImpl_HEADER_GUARD_
+#define IDTreeWalkerImpl_HEADER_GUARD_
+
+
+#include "IDOM_TreeWalker.hpp"
+
-#ifndef TreeWalkerImpl_HEADER_GUARD_
-#define TreeWalkerImpl_HEADER_GUARD_
+class CDOM_EXPORT IDTreeWalkerImpl : public IDOM_TreeWalker {
+ private:
+ // The whatToShow mask.
+ unsigned long fWhatToShow;
+ // The NodeFilter reference.
+ IDOM_NodeFilter* fNodeFilter;
-#include "DOM_TreeWalker.hpp"
-#include "RefCountedImpl.hpp"
+ // The current Node.
+ IDOM_Node* fCurrentNode;
+ // The root Node.
+ IDOM_Node* fRoot;
-class CDOM_EXPORT TreeWalkerImpl : public RefCountedImpl {
+ // The expandEntity reference flag.
+ bool fExpandEntityReferences;
public:
// Implementation Note: No state is kept except the data above
@@ -81,66 +98,64 @@
// implementation will still work.
/** Public constructor */
- TreeWalkerImpl (
- DOM_Node root,
+ IDTreeWalkerImpl (
+ IDOM_Node* root,
unsigned long whatToShow,
- DOM_NodeFilter* nodeFilter,
+ IDOM_NodeFilter* nodeFilter,
bool expandEntityRef);
- TreeWalkerImpl (const TreeWalkerImpl& twi);
- TreeWalkerImpl& operator= (const TreeWalkerImpl& twi);
+ IDTreeWalkerImpl (const IDTreeWalkerImpl& twi);
+ IDTreeWalkerImpl& operator= (const IDTreeWalkerImpl& twi);
// Return the whatToShow value.
- unsigned long getWhatToShow ();
+ virtual unsigned long getWhatToShow ();
// Return the NodeFilter.
- DOM_NodeFilter* getFilter ();
+ virtual IDOM_NodeFilter* getFilter ();
- // Return the current DOM_Node.
- DOM_Node getCurrentNode ();
+ // Return the current IDOM_Node.
+ virtual IDOM_Node* getCurrentNode ();
// Return the current Node.
- void setCurrentNode (DOM_Node node);
+ virtual void setCurrentNode (IDOM_Node* node);
// Return the parent Node from the current node,
// after applying filter, whatToshow.
// If result is not null, set the current Node.
- DOM_Node parentNode ();
+ virtual IDOM_Node* parentNode ();
// Return the first child Node from the current node,
// after applying filter, whatToshow.
// If result is not null, set the current Node.
- DOM_Node firstChild ();
+ virtual IDOM_Node* firstChild ();
// Return the last child Node from the current node,
// after applying filter, whatToshow.
// If result is not null, set the current Node.
- DOM_Node lastChild ();
+ virtual IDOM_Node* lastChild ();
// Return the previous sibling Node from the current node,
// after applying filter, whatToshow.
// If result is not null, set the current Node.
- DOM_Node previousSibling ();
+ virtual IDOM_Node* previousSibling ();
// Return the next sibling Node from the current node,
// after applying filter, whatToshow.
// If result is not null, set the current Node.
- DOM_Node nextSibling ();
+ virtual IDOM_Node* nextSibling ();
// Return the previous Node from the current node,
// after applying filter, whatToshow.
// If result is not null, set the current Node.
- DOM_Node previousNode ();
+ virtual IDOM_Node* previousNode ();
// Return the next Node from the current node,
// after applying filter, whatToshow.
// If result is not null, set the current Node.
- DOM_Node nextNode ();
+ virtual IDOM_Node* nextNode ();
- void unreferenced ();
-
// Get the expandEntity reference flag.
- bool getExpandEntityReferences();
+ virtual bool getExpandEntityReferences();
protected:
@@ -148,51 +163,36 @@
// Return the parent Node, from the input node
// after applying filter, whatToshow.
// The current node is not consulted or set.
- DOM_Node getParentNode (DOM_Node node);
+ IDOM_Node* getParentNode (IDOM_Node* node);
// Internal function.
// Return the nextSibling Node, from the input node
// after applying filter, whatToshow.
// The current node is not consulted or set.
- DOM_Node getNextSibling (DOM_Node node);
+ IDOM_Node* getNextSibling (IDOM_Node* node);
// Internal function.
// Return the previous sibling Node, from the input node
// after applying filter, whatToshow.
// The current node is not consulted or set.
- DOM_Node getPreviousSibling (DOM_Node node);
+ IDOM_Node* getPreviousSibling (IDOM_Node* node);
// Internal function.
// Return the first child Node, from the input node
// after applying filter, whatToshow.
// The current node is not consulted or set.
- DOM_Node getFirstChild (DOM_Node node);
+ IDOM_Node* getFirstChild (IDOM_Node* node);
// Internal function.
// Return the last child Node, from the input node
// after applying filter, whatToshow.
// The current node is not consulted or set.
- DOM_Node getLastChild (DOM_Node node);
+ IDOM_Node* getLastChild (IDOM_Node* node);
// The node is accepted if it passes the whatToShow and the filter.
- short acceptNode (DOM_Node node);
+ short acceptNode (IDOM_Node* node);
-private:
- // The whatToShow mask.
- unsigned long fWhatToShow;
-
- // The NodeFilter reference.
- DOM_NodeFilter* fNodeFilter;
-
- // The current Node.
- DOM_Node fCurrentNode;
-
- // The root Node.
- DOM_Node fRoot;
-
- // The expandEntity reference flag.
- bool fExpandEntityReferences;
};
#endif
1.5 +5 -1 xml-xerces/c/src/idom/Makefile.in
Index: Makefile.in
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/idom/Makefile.in,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- Makefile.in 2001/06/04 14:55:36 1.4
+++ Makefile.in 2001/06/04 20:11:53 1.5
@@ -54,7 +54,7 @@
# <http://www.apache.org/>.
#
#
-# $Id: Makefile.in,v 1.4 2001/06/04 14:55:36 tng Exp $
+# $Id: Makefile.in,v 1.5 2001/06/04 20:11:53 tng Exp $
#
PLATFORM = @platform@
@@ -126,11 +126,13 @@
IDEntityReferenceImpl.hpp \
IDNamedNodeMapImpl.hpp \
IDNodeImpl.hpp \
+ IDNodeIteratorImpl.hpp \
IDNodeListImpl.hpp \
IDNotationImpl.hpp \
IDProcessingInstructionImpl.hpp \
IDRangeImpl.hpp \
IDTextImpl.hpp \
+ IDTreeWalker.hpp \
IDXMLDeclImpl.hpp
IDOM_C_FILES = \
@@ -157,6 +159,7 @@
IDNamedNodeMapImpl.$(TO) \
IDNodeIDMap.$(TO) \
IDNodeImpl.$(TO) \
+ IDNodeIteratorImpl.$(TO) \
IDNodeListImpl.$(TO) \
IDNodeVector.$(TO) \
IDNotationImpl.$(TO) \
@@ -167,6 +170,7 @@
IDRangeImpl.$(TO) \
IDStringPool.$(TO) \
IDTextImpl.$(TO) \
+ IDTreeWalker.$(TO) \
IDXMLDeclImpl.$(TO)
1.13 +11 -3 xml-xerces/c/src/util/Compilers/VCPPDefs.hpp
Index: VCPPDefs.hpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/util/Compilers/VCPPDefs.hpp,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- VCPPDefs.hpp 2001/06/04 13:45:06 1.12
+++ VCPPDefs.hpp 2001/06/04 20:11:54 1.13
@@ -56,6 +56,9 @@
/*
* $Log: VCPPDefs.hpp,v $
+ * Revision 1.13 2001/06/04 20:11:54 tng
+ * IDOM: Complete IDNodeIterator, IDTreeWalker, IDNodeFilter.
+ *
* Revision 1.12 2001/06/04 13:45:06 tng
* The "hash" argument clashes with STL hash. Fixed by Pei Yong Zhang.
*
@@ -173,9 +176,14 @@
// ---------------------------------------------------------------------------
// For IDOM:
-// Ignore compiler warning:
+// Bypass compiler warning:
// no matching operator delete found; memory will not be freed if initialization throws an exception
// ---------------------------------------------------------------------------
-#pragma warning( push )
-#pragma warning( disable : 4291 )
+#if _MSC_VER == 1200 /* VC++ 6.0 */
+class IDOM_Document;
+inline void operator delete(void* ptr, IDOM_Document *doc)
+{
+ return;
+}
+#endif
1.10 +11 -4 xml-xerces/c/tests/Makefile.in
Index: Makefile.in
===================================================================
RCS file: /home/cvs/xml-xerces/c/tests/Makefile.in,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- Makefile.in 2001/06/04 14:55:42 1.9
+++ Makefile.in 2001/06/04 20:11:54 1.10
@@ -54,13 +54,14 @@
# <http://www.apache.org/>.
#
#
-# $Id: Makefile.in,v 1.9 2001/06/04 14:55:42 tng Exp $
+# $Id: Makefile.in,v 1.10 2001/06/04 20:11:54 tng Exp $
#
DOMIDTest_DIR=DOM/DOMIDTest
DOMMemTest_DIR=DOM/DOMMemTest
DOMTest_DIR=DOM/DOMTest
Traversal_DIR=DOM/Traversal
+ITraversal_DIR=IDOM/ITraversal
ThreadTest_DIR=ThreadTest
IThreadTest_DIR=IThreadTest
EncodingTest_DIR=EncodingTest
@@ -78,12 +79,12 @@
ifeq (${PLATFORM},HPUX)
ifeq (${OSVER}, HPUX10)
- all: threadtest ithreadtest encodingtest traversal
+ all: threadtest ithreadtest encodingtest traversal itraversal
else
- all: domtest threadtest ithreadtest encodingtest traversal
+ all: domtest threadtest ithreadtest encodingtest traversal itraversal
endif
else
- all: domidtest dommemtest domtest threadtest ithreadtest encodingtest traversal rangetest irangetest
+ all: domidtest dommemtest domtest threadtest ithreadtest encodingtest traversal itraversal rangetest irangetest
endif
domidtest:
@@ -114,6 +115,10 @@
@echo Building "Traversal"
cd $(Traversal_DIR) ; $(MAKE) $(MAKE_FLAGS) ; cd ..
+itraversal:
+ @echo Building "ITraversal"
+ cd $(ITraversal_DIR) ; $(MAKE) $(MAKE_FLAGS) ; cd ..
+
rangetest:
@echo Building "Range"
cd $(DOMRange_DIR) ; $(MAKE) $(MAKE_FLAGS) ; cd ..
@@ -130,6 +135,7 @@
cd $(IThreadTest_DIR) && $(MAKE) $@ && cd ..
cd $(EncodingTest_DIR) && $(MAKE) $@ && cd ..
cd $(Traversal_DIR) && $(MAKE) $@ && cd ..
+ cd $(ITraversal_DIR) && $(MAKE) $@ && cd ..
cd $(DOMRange_DIR) && $(MAKE) $@ && cd ..
cd $(IDOMRange_DIR) && $(MAKE) $@ && cd ..
@@ -141,6 +147,7 @@
cd $(IThreadTest_DIR) && $(MAKE) $@ && cd ..
cd $(EncodingTest_DIR) && $(MAKE) $@ && cd ..
cd $(Traversal_DIR) && $(MAKE) $@ && cd ..
+ cd $(ITraversal_DIR) && $(MAKE) $@ && cd ..
cd $(DOMRange_DIR) && $(MAKE) $@ && cd ..
cd $(IDOMRange_DIR) && $(MAKE) $@ && cd ..
rm -f Makefile config.cache config.log config.status
1.8 +2 -0 xml-xerces/c/tests/configure
Index: configure
===================================================================
RCS file: /home/cvs/xml-xerces/c/tests/configure,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- configure 2001/06/04 14:55:42 1.7
+++ configure 2001/06/04 20:11:54 1.8
@@ -1451,6 +1451,7 @@
DOM/DOMIDTest/Makefile \
DOM/DOMMemTest/Makefile \
DOM/Traversal/Makefile \
+IDOM/ITraversal/Makefile \
EncodingTest/Makefile \
DOM/RangeTest/Makefile \
IDOM/IRangeTest/Makefile \
@@ -1552,6 +1553,7 @@
DOM/DOMIDTest/Makefile \
DOM/DOMMemTest/Makefile \
DOM/Traversal/Makefile \
+IDOM/ITraversal/Makefile \
EncodingTest/Makefile \
DOM/RangeTest/Makefile \
IDOM/IRangeTest/Makefile \
1.12 +2 -1 xml-xerces/c/tests/configure.in
Index: configure.in
===================================================================
RCS file: /home/cvs/xml-xerces/c/tests/configure.in,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- configure.in 2001/06/04 14:55:42 1.11
+++ configure.in 2001/06/04 20:11:54 1.12
@@ -1,4 +1,4 @@
-# $Id: configure.in,v 1.11 2001/06/04 14:55:42 tng Exp $
+# $Id: configure.in,v 1.12 2001/06/04 20:11:54 tng Exp $
#
#
@@ -73,6 +73,7 @@
DOM/DOMIDTest/Makefile \
DOM/DOMMemTest/Makefile \
DOM/Traversal/Makefile \
+IDOM/ITraversal/Makefile \
EncodingTest/Makefile \
DOM/RangeTest/Makefile \
IDOM/IRangeTest/Makefile \
1.2 +380 -378 xml-xerces/c/tests/IDom/IRangeTest/IRangeTest.cpp
Index: IRangeTest.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/tests/IDom/IRangeTest/IRangeTest.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- IRangeTest.cpp 2001/06/04 14:55:43 1.1
+++ IRangeTest.cpp 2001/06/04 20:11:54 1.2
@@ -57,7 +57,7 @@
/**
- * $Id: IRangeTest.cpp,v 1.1 2001/06/04 14:55:43 tng Exp $
+ * $Id: IRangeTest.cpp,v 1.2 2001/06/04 20:11:54 tng Exp $
*/
@@ -240,7 +240,9 @@
IDOM_Text* E210 = doc->createTextNode(xInsertedText);
+ delete doc;
+
}
@@ -580,387 +582,387 @@
//detaching the other range
aRange->detach();
range->detach();
-
- //***************************************************************
- //another set of test
- //TEST createRange, setStart and setEnd, insertnode
- //***************************************************************
- IDOM_DOMImplementation* impl2 = IDOM_DOMImplementation::getImplementation();
- IDOM_Document* doc2 = impl2->createDocument();
-
- IDOM_Element* root2 = doc2->createElement(xroot2);
- doc2->appendChild(root2);
- //case 1: simple text node, start==end
- // <body>text1</body>
- IDOM_Element* body = doc2->createElement(xBody);
- IDOM_Text* text1 = doc2->createTextNode(xtext1);
- body->appendChild(text1);
- root2->appendChild(body);
-
- //set range
- IDOM_Range* range1 = doc2->createRange();
- range1->setStart(text1,1);
- range1->setEnd(text1,3);
-
- TASSERT(!XMLString::compareString(range1->toString(),xex));
- TASSERT(range1->getStartOffset()==1);
- TASSERT(!XMLString::compareString(range1->getStartContainer()->getNodeValue(),xtext1));
- TASSERT(range1->getEndOffset()==3);
- TASSERT(!XMLString::compareString(range1->getEndContainer()->getNodeValue(),xtext1));
-
- //now insert a text node
- //<body>ttext2ext1</body>
- IDOM_Text* text2 = doc2->createTextNode(xtext2);
- range1->insertNode(text2);
-
- TASSERT(!XMLString::compareString(range1->toString(),xtext2ex));
- TASSERT(range1->getStartOffset()==1);
- TASSERT(!XMLString::compareString(range1->getStartContainer()->getNodeValue(),xt));
- TASSERT(range1->getEndOffset()==2);
- TASSERT(!XMLString::compareString(range1->getEndContainer()->getNodeValue(),xext1));
-
- //now insert a non-text node
- //<body>t<p1/>text2ext1</body>
- IDOM_Element* p1 = doc2->createElement(xp1);
- range1->insertNode(p1);
-
- TASSERT(!XMLString::compareString(range1->toString(),xtext2ex));
- TASSERT(range1->getStartOffset()==1);
- TASSERT(!XMLString::compareString(range1->getStartContainer()->getNodeValue(),xt));
- TASSERT(range1->getEndOffset()==2);
- TASSERT(!XMLString::compareString(range1->getEndContainer()->getNodeValue(),xext1));
-
- //case 2: non-text node, start==end
- // <head><h1/></head>
- IDOM_Element* head = doc2->createElement(xhead);
- IDOM_Element* h1 = doc2->createElement(xH1);
- head->appendChild(h1);
- root2->appendChild(head);
-
- //set range
- IDOM_Range* range2 = doc2->createRange();
- range2->setStart(head,0);
- range2->setEnd(head,1);
-
- TASSERT(!XMLString::compareString(range2->toString(),XMLUni::fgZeroLenString));
- TASSERT(range2->getStartOffset()==0);
- TASSERT(!XMLString::compareString(range2->getStartContainer()->getNodeName(),xhead));
- TASSERT(range2->getEndOffset()==1);
- TASSERT(!XMLString::compareString(range2->getEndContainer()->getNodeName(),xhead));
-
- //now insert a non-text node
- //<head><h2/><h1/></head>
- IDOM_Element* h2 = doc2->createElement(xh2);
- range2->insertNode(h2);
-
- TASSERT(!XMLString::compareString(range2->toString(),XMLUni::fgZeroLenString));
- TASSERT(range2->getStartOffset()==0);
- TASSERT(!XMLString::compareString(range2->getStartContainer()->getNodeName(),xhead));
- TASSERT(range2->getEndOffset()==2);
- TASSERT(!XMLString::compareString(range2->getEndContainer()->getNodeName(),xhead));
-
- //now insert a text node
- //<head>text5<h2/><h1/></head>
- IDOM_Text* text5 = doc2->createTextNode(xtext5);
- range2->insertNode(text5);
-
- TASSERT(!XMLString::compareString(range2->toString(),xtext5));
- TASSERT(range2->getStartOffset()==0);
- TASSERT(!XMLString::compareString(range2->getStartContainer()->getNodeName(),xhead));
- TASSERT(range2->getEndOffset()==3);
- TASSERT(!XMLString::compareString(range2->getEndContainer()->getNodeName(),xhead));
-
- //case 3: simple text node, start!=end
- // <body2>text3</body2>
- IDOM_Element* body2 = doc2->createElement(xbody2);
- IDOM_Text* text3 = doc2->createTextNode(xtext3);
- body2->appendChild(text3);
- root2->appendChild(body2);
-
- //set range
- IDOM_Range* range3 = doc2->createRange();
- range3->setStart(text3,1);
- range3->setEnd(body2,1);
-
- TASSERT(!XMLString::compareString(range3->toString(),xext3));
- TASSERT(range3->getStartOffset()==1);
- TASSERT(!XMLString::compareString(range3->getStartContainer()->getNodeValue(),xtext3));
- TASSERT(range3->getEndOffset()==1);
- TASSERT(!XMLString::compareString(range3->getEndContainer()->getNodeName(),xbody2));
-
- //now insert a textnode
- //<body2>ttext4ext3</body2>
- IDOM_Text* text4 = doc2->createTextNode(xtext4);
- range3->insertNode(text4);
-
- TASSERT(!XMLString::compareString(range3->toString(),XMLUni::fgZeroLenString));
- TASSERT(range3->getStartOffset()==1);
- TASSERT(!XMLString::compareString(range3->getStartContainer()->getNodeValue(),xt));
- TASSERT(range3->getEndOffset()==1);
- TASSERT(!XMLString::compareString(range3->getEndContainer()->getNodeName(),xbody2));
-
- //now insert a non-text node
- //<body2>t<p2/>text4ext3</body2>
- IDOM_Element* p2 = doc2->createElement(xp2);
- range3->insertNode(p2);
-
- //extra empty node caused by splitting 't'
- TASSERT(!XMLString::compareString(range3->toString(),XMLUni::fgZeroLenString));
- TASSERT(range3->getStartOffset()==1);
- TASSERT(!XMLString::compareString(range3->getStartContainer()->getNodeValue(),xt));
- TASSERT(range3->getEndOffset()==1);
- TASSERT(!XMLString::compareString(range3->getEndContainer()->getNodeName(),xbody2));
-
- //test toString a bit
- range3->setStart(body2,1);
- range3->setEnd(body2,5);
-
- TASSERT(!XMLString::compareString(range3->toString(),xtext4ext3));
-
- range3->setStart(body2,0);
- range3->setEnd(body2,5);
-
- TASSERT(!XMLString::compareString(range3->toString(),xttext4ext3));
-
- //case 4: non-text node, start!=end
- // <head2><h3/></head2>
- IDOM_Element* head2 = doc2->createElement(xhead2);
- IDOM_Element* h3 = doc2->createElement(xh3);
- head2->appendChild(h3);
- root2->appendChild(head2);
-
- //set range
- IDOM_Range* range4 = doc2->createRange();
- range4->setStart(head2,0);
- range4->setEnd(h3,0);
-
- TASSERT(!XMLString::compareString(range4->toString(),XMLUni::fgZeroLenString));
- TASSERT(range4->getStartOffset()==0);
- TASSERT(!XMLString::compareString(range4->getStartContainer()->getNodeName(),xhead2));
- TASSERT(range4->getEndOffset()==0);
- TASSERT(!XMLString::compareString(range4->getEndContainer()->getNodeName(),xh3));
-
- //now insert a non-text node
- //<head2><h4/><h3/></head2>
- IDOM_Element* h4 = doc2->createElement(xh4);
- range4->insertNode(h4);
-
- TASSERT(!XMLString::compareString(range4->toString(),XMLUni::fgZeroLenString));
- TASSERT(range4->getStartOffset()==0);
- TASSERT(!XMLString::compareString(range4->getStartContainer()->getNodeName(),xhead2));
- TASSERT(range4->getEndOffset()==0);
- TASSERT(!XMLString::compareString(range4->getEndContainer()->getNodeName(),xh3));
-
- //now insert a text node
- //<head2>text6<h4/><h3/></head2>
- IDOM_Text* text6 = doc2->createTextNode(xtext6);
- range4->insertNode(text6);
-
- TASSERT(!XMLString::compareString(range4->toString(),xtext6));
- TASSERT(range4->getStartOffset()==0);
- TASSERT(!XMLString::compareString(range4->getStartContainer()->getNodeName(),xhead2));
- TASSERT(range4->getEndOffset()==0);
- TASSERT(!XMLString::compareString(range4->getEndContainer()->getNodeName(),xh3));
-
- //***************************************************************
- // quick test of updating
- //***************************************************************
- // <upbody>text1</upbody>
- IDOM_Element* upbody = doc2->createElement(xupbody);
- IDOM_Text* uptext1 = doc2->createTextNode(xuptext1);
- upbody->appendChild(uptext1);
- root2->appendChild(upbody);
-
- IDOM_Range* uprange = doc2->createRange();
- uprange->setStart(upbody,0);
- uprange->setEnd(upbody,1);
-
- TASSERT(!XMLString::compareString(uprange->toString(),xuptext1));
- TASSERT(uprange->getStartOffset()==0);
- TASSERT(!XMLString::compareString(uprange->getStartContainer()->getNodeName(),xupbody));
- TASSERT(uprange->getEndOffset()==1);
- TASSERT(!XMLString::compareString(uprange->getEndContainer()->getNodeName(),xupbody));
-
- // split text
- uptext1->splitText(1);
-
- TASSERT(!XMLString::compareString(uprange->toString(),xu));
- TASSERT(uprange->getStartOffset()==0);
- TASSERT(!XMLString::compareString(uprange->getStartContainer()->getNodeName(),xupbody));
- TASSERT(uprange->getEndOffset()==1);
- TASSERT(!XMLString::compareString(uprange->getEndContainer()->getNodeName(),xupbody));
-
- //insert node
- IDOM_Element* upbody2 = doc2->createElement(xupbody2);
- IDOM_Text* uptext2 = doc2->createTextNode(xuptext2);
- upbody2->appendChild(uptext2);
- root2->appendChild(upbody2);
-
- IDOM_Range* uprange2 = doc2->createRange();
- uprange2->setStart(uptext2,1);
- uprange2->setEnd(upbody2,1);
-
- IDOM_Range* uprange3 = doc2->createRange();
- uprange3->setStart(uptext2,1);
- uprange3->setEnd(upbody2,1);
-
- TASSERT(!XMLString::compareString(uprange2->toString(),xptext2));
- TASSERT(uprange2->getStartOffset()==1);
- TASSERT(!XMLString::compareString(uprange2->getStartContainer()->getNodeValue(),xuptext2));
- TASSERT(uprange2->getEndOffset()==1);
- TASSERT(!XMLString::compareString(uprange2->getEndContainer()->getNodeName(),xupbody2));
-
- TASSERT(!XMLString::compareString(uprange3->toString(),xptext2));
- TASSERT(uprange3->getStartOffset()==1);
- TASSERT(!XMLString::compareString(uprange3->getStartContainer()->getNodeValue(),xuptext2));
- TASSERT(uprange3->getEndOffset()==1);
- TASSERT(!XMLString::compareString(uprange3->getEndContainer()->getNodeName(),xupbody2));
-
- IDOM_Element* upp1 = doc2->createElement(xupp1);
- uprange2->insertNode(upp1);
-
- TASSERT(!XMLString::compareString(uprange2->toString(),XMLUni::fgZeroLenString));
- TASSERT(uprange2->getStartOffset()==1);
- TASSERT(!XMLString::compareString(uprange2->getStartContainer()->getNodeValue(),xu));
- TASSERT(uprange2->getEndOffset()==1);
- TASSERT(!XMLString::compareString(uprange2->getEndContainer()->getNodeName(),xupbody2));
-
- TASSERT(!XMLString::compareString(uprange3->toString(),XMLUni::fgZeroLenString));
- TASSERT(uprange3->getStartOffset()==1);
- TASSERT(!XMLString::compareString(uprange3->getStartContainer()->getNodeValue(),xu));
- TASSERT(uprange3->getEndOffset()==1);
- TASSERT(!XMLString::compareString(uprange3->getEndContainer()->getNodeName(),xupbody2));
-
- //***************************************************************
- //another set of test
- //<foo><c/><moo><b/></moo>ab<a>Hello cd</a><cool>ef</cool></foo>
- //
- // ______________________foo_____________________
- // | | | | |
- // c moo "ab" a cool
- // | | |
- // b "Hello cd" "ef"
- //
- IDOM_DOMImplementation* impl3 = IDOM_DOMImplementation::getImplementation();
- IDOM_Document* doc3 = impl3->createDocument();
-
- IDOM_Element* root3 = doc3->createElement(xroot);
- doc3->appendChild(root3);
-
- IDOM_Element* foo = doc3->createElement(xfoo);
- IDOM_Element* moo = doc3->createElement(xmoo);
- IDOM_Element* cool = doc3->createElement(xcool);
- IDOM_Text* ab = doc3->createTextNode(xab);
- IDOM_Text* cd = doc3->createTextNode(xHellocd);
- IDOM_Text* ef = doc3->createTextNode(xef);
-
- IDOM_Element* a = doc3->createElement(xa);
- IDOM_Element* b = doc3->createElement(xb);
- IDOM_Element* c = doc3->createElement(xc);
-
- root3->appendChild(foo);
- foo->appendChild(c);
- foo->appendChild(moo);
- foo->appendChild(ab);
- foo->appendChild(a);
- foo->appendChild(cool);
- moo->appendChild(b);
- a->appendChild(cd);
- cool->appendChild(ef);
-
- //***************************************************************
- //TEST toString
- //***************************************************************
- IDOM_Range* newtestrange = doc3->createRange();
- //case 1:
- //start container is text node
- // i) end container is also text node
- // a) start==end
- // b) start!=end
- // ii) end container is not text node
- // a) start==end => impossible
- // b) start!=end
- //
- //case 2:
- //start container is not text node
- // i) end container is text node
- // a) start==end => impossible
- // b) start!=end
- // ii) end container is not text node
- // a) start==end
- // b) start!=end
-
- //case 1, i, a
- newtestrange->setStart( cd, 1 );
- newtestrange->setEnd( cd, 4 );
-
- TASSERT(!XMLString::compareString(newtestrange->toString(),xell));
-
- //case 1, i, b
- newtestrange->setStart( cd, 1 );
- newtestrange->setEnd( ef, 2 );
-
- TASSERT(!XMLString::compareString(newtestrange->toString(),xellocdef));
-
- //case 1, ii, b
- newtestrange->setStart( cd, 1 );
- newtestrange->setEnd( foo, 4 );
-
- TASSERT(!XMLString::compareString(newtestrange->toString(),xellocd));
-
- //case 2, i, b
- newtestrange->setStart( foo, 1 );
- newtestrange->setEnd( cd, 5 );
-
- TASSERT(!XMLString::compareString(newtestrange->toString(),xabHello));
-
- //case 2, ii, a
- newtestrange->setStart( foo, 1 );
- newtestrange->setEnd( foo, 4 );
-
- TASSERT(!XMLString::compareString(newtestrange->toString(),xabHellocd));
-
- //case 2, ii, b
- newtestrange->setStart( moo, 1 );
- newtestrange->setEnd( foo, 4 );
-
- TASSERT(!XMLString::compareString(newtestrange->toString(),xabHellocd));
-
- //***************************************************************
- //test removeChild
- //***************************************************************
- IDOM_Range* newrange = doc3->createRange();
- newrange->setStart( moo, 0 );
- newrange->setEnd( foo, 4 );
-
- TASSERT(newrange->getStartOffset()==0);
- TASSERT(!XMLString::compareString(newrange->getStartContainer()->getNodeName(),xmoo));
- TASSERT(newrange->getEndOffset()==4);
- TASSERT(!XMLString::compareString(newrange->getEndContainer()->getNodeName(),xfoo));
- TASSERT(!XMLString::compareString(newrange->toString(),xabHellocd));
-
- IDOM_Node* n = newrange->cloneContents();
- IDOM_NodeList* nol = foo->getChildNodes();
-
- //removing moo
- foo->removeChild(nol->item(1));
- TASSERT(newrange->getStartOffset()==1);
- TASSERT(!XMLString::compareString(newrange->getStartContainer()->getNodeName(),xfoo));
- TASSERT(newrange->getEndOffset()==3);
- TASSERT(!XMLString::compareString(newrange->getEndContainer()->getNodeName(),xfoo));
- TASSERT(!XMLString::compareString(newrange->toString(),xabHellocd));
-
- TASSERT(newtestrange->getStartOffset()==1);
- TASSERT(!XMLString::compareString(newtestrange->getStartContainer()->getNodeName(),xfoo));
- TASSERT(newtestrange->getEndOffset()==3);
- TASSERT(!XMLString::compareString(newtestrange->getEndContainer()->getNodeName(),xfoo));
- TASSERT(!XMLString::compareString(newtestrange->toString(),xabHellocd));
- }
+ //***************************************************************
+ //another set of test
+ //TEST createRange, setStart and setEnd, insertnode
+ //***************************************************************
+ IDOM_DOMImplementation* impl2 = IDOM_DOMImplementation::getImplementation();
+ IDOM_Document* doc2 = impl2->createDocument();
+
+ IDOM_Element* root2 = doc2->createElement(xroot2);
+ doc2->appendChild(root2);
+ //case 1: simple text node, start==end
+ // <body>text1</body>
+ IDOM_Element* body = doc2->createElement(xBody);
+ IDOM_Text* text1 = doc2->createTextNode(xtext1);
+ body->appendChild(text1);
+ root2->appendChild(body);
+
+ //set range
+ IDOM_Range* range1 = doc2->createRange();
+ range1->setStart(text1,1);
+ range1->setEnd(text1,3);
+
+ TASSERT(!XMLString::compareString(range1->toString(),xex));
+ TASSERT(range1->getStartOffset()==1);
+ TASSERT(!XMLString::compareString(range1->getStartContainer()->getNodeValue(),xtext1));
+ TASSERT(range1->getEndOffset()==3);
+ TASSERT(!XMLString::compareString(range1->getEndContainer()->getNodeValue(),xtext1));
+
+ //now insert a text node
+ //<body>ttext2ext1</body>
+ IDOM_Text* text2 = doc2->createTextNode(xtext2);
+ range1->insertNode(text2);
+
+ TASSERT(!XMLString::compareString(range1->toString(),xtext2ex));
+ TASSERT(range1->getStartOffset()==1);
+ TASSERT(!XMLString::compareString(range1->getStartContainer()->getNodeValue(),xt));
+ TASSERT(range1->getEndOffset()==2);
+ TASSERT(!XMLString::compareString(range1->getEndContainer()->getNodeValue(),xext1));
+
+ //now insert a non-text node
+ //<body>t<p1/>text2ext1</body>
+ IDOM_Element* p1 = doc2->createElement(xp1);
+ range1->insertNode(p1);
+
+ TASSERT(!XMLString::compareString(range1->toString(),xtext2ex));
+ TASSERT(range1->getStartOffset()==1);
+ TASSERT(!XMLString::compareString(range1->getStartContainer()->getNodeValue(),xt));
+ TASSERT(range1->getEndOffset()==2);
+ TASSERT(!XMLString::compareString(range1->getEndContainer()->getNodeValue(),xext1));
+
+ //case 2: non-text node, start==end
+ // <head><h1/></head>
+ IDOM_Element* head = doc2->createElement(xhead);
+ IDOM_Element* h1 = doc2->createElement(xH1);
+ head->appendChild(h1);
+ root2->appendChild(head);
+
+ //set range
+ IDOM_Range* range2 = doc2->createRange();
+ range2->setStart(head,0);
+ range2->setEnd(head,1);
+
+ TASSERT(!XMLString::compareString(range2->toString(),XMLUni::fgZeroLenString));
+ TASSERT(range2->getStartOffset()==0);
+ TASSERT(!XMLString::compareString(range2->getStartContainer()->getNodeName(),xhead));
+ TASSERT(range2->getEndOffset()==1);
+ TASSERT(!XMLString::compareString(range2->getEndContainer()->getNodeName(),xhead));
+
+ //now insert a non-text node
+ //<head><h2/><h1/></head>
+ IDOM_Element* h2 = doc2->createElement(xh2);
+ range2->insertNode(h2);
+
+ TASSERT(!XMLString::compareString(range2->toString(),XMLUni::fgZeroLenString));
+ TASSERT(range2->getStartOffset()==0);
+ TASSERT(!XMLString::compareString(range2->getStartContainer()->getNodeName(),xhead));
+ TASSERT(range2->getEndOffset()==2);
+ TASSERT(!XMLString::compareString(range2->getEndContainer()->getNodeName(),xhead));
+
+ //now insert a text node
+ //<head>text5<h2/><h1/></head>
+ IDOM_Text* text5 = doc2->createTextNode(xtext5);
+ range2->insertNode(text5);
+
+ TASSERT(!XMLString::compareString(range2->toString(),xtext5));
+ TASSERT(range2->getStartOffset()==0);
+ TASSERT(!XMLString::compareString(range2->getStartContainer()->getNodeName(),xhead));
+ TASSERT(range2->getEndOffset()==3);
+ TASSERT(!XMLString::compareString(range2->getEndContainer()->getNodeName(),xhead));
+
+ //case 3: simple text node, start!=end
+ // <body2>text3</body2>
+ IDOM_Element* body2 = doc2->createElement(xbody2);
+ IDOM_Text* text3 = doc2->createTextNode(xtext3);
+ body2->appendChild(text3);
+ root2->appendChild(body2);
+
+ //set range
+ IDOM_Range* range3 = doc2->createRange();
+ range3->setStart(text3,1);
+ range3->setEnd(body2,1);
+
+ TASSERT(!XMLString::compareString(range3->toString(),xext3));
+ TASSERT(range3->getStartOffset()==1);
+ TASSERT(!XMLString::compareString(range3->getStartContainer()->getNodeValue(),xtext3));
+ TASSERT(range3->getEndOffset()==1);
+ TASSERT(!XMLString::compareString(range3->getEndContainer()->getNodeName(),xbody2));
+
+ //now insert a textnode
+ //<body2>ttext4ext3</body2>
+ IDOM_Text* text4 = doc2->createTextNode(xtext4);
+ range3->insertNode(text4);
+
+ TASSERT(!XMLString::compareString(range3->toString(),XMLUni::fgZeroLenString));
+ TASSERT(range3->getStartOffset()==1);
+ TASSERT(!XMLString::compareString(range3->getStartContainer()->getNodeValue(),xt));
+ TASSERT(range3->getEndOffset()==1);
+ TASSERT(!XMLString::compareString(range3->getEndContainer()->getNodeName(),xbody2));
+
+ //now insert a non-text node
+ //<body2>t<p2/>text4ext3</body2>
+ IDOM_Element* p2 = doc2->createElement(xp2);
+ range3->insertNode(p2);
+
+ //extra empty node caused by splitting 't'
+ TASSERT(!XMLString::compareString(range3->toString(),XMLUni::fgZeroLenString));
+ TASSERT(range3->getStartOffset()==1);
+ TASSERT(!XMLString::compareString(range3->getStartContainer()->getNodeValue(),xt));
+ TASSERT(range3->getEndOffset()==1);
+ TASSERT(!XMLString::compareString(range3->getEndContainer()->getNodeName(),xbody2));
+
+ //test toString a bit
+ range3->setStart(body2,1);
+ range3->setEnd(body2,5);
+
+ TASSERT(!XMLString::compareString(range3->toString(),xtext4ext3));
+
+ range3->setStart(body2,0);
+ range3->setEnd(body2,5);
+
+ TASSERT(!XMLString::compareString(range3->toString(),xttext4ext3));
+
+ //case 4: non-text node, start!=end
+ // <head2><h3/></head2>
+ IDOM_Element* head2 = doc2->createElement(xhead2);
+ IDOM_Element* h3 = doc2->createElement(xh3);
+ head2->appendChild(h3);
+ root2->appendChild(head2);
+
+ //set range
+ IDOM_Range* range4 = doc2->createRange();
+ range4->setStart(head2,0);
+ range4->setEnd(h3,0);
+
+ TASSERT(!XMLString::compareString(range4->toString(),XMLUni::fgZeroLenString));
+ TASSERT(range4->getStartOffset()==0);
+ TASSERT(!XMLString::compareString(range4->getStartContainer()->getNodeName(),xhead2));
+ TASSERT(range4->getEndOffset()==0);
+ TASSERT(!XMLString::compareString(range4->getEndContainer()->getNodeName(),xh3));
+
+ //now insert a non-text node
+ //<head2><h4/><h3/></head2>
+ IDOM_Element* h4 = doc2->createElement(xh4);
+ range4->insertNode(h4);
+
+ TASSERT(!XMLString::compareString(range4->toString(),XMLUni::fgZeroLenString));
+ TASSERT(range4->getStartOffset()==0);
+ TASSERT(!XMLString::compareString(range4->getStartContainer()->getNodeName(),xhead2));
+ TASSERT(range4->getEndOffset()==0);
+ TASSERT(!XMLString::compareString(range4->getEndContainer()->getNodeName(),xh3));
+
+ //now insert a text node
+ //<head2>text6<h4/><h3/></head2>
+ IDOM_Text* text6 = doc2->createTextNode(xtext6);
+ range4->insertNode(text6);
+
+ TASSERT(!XMLString::compareString(range4->toString(),xtext6));
+ TASSERT(range4->getStartOffset()==0);
+ TASSERT(!XMLString::compareString(range4->getStartContainer()->getNodeName(),xhead2));
+ TASSERT(range4->getEndOffset()==0);
+ TASSERT(!XMLString::compareString(range4->getEndContainer()->getNodeName(),xh3));
+
+ //***************************************************************
+ // quick test of updating
+ //***************************************************************
+ // <upbody>text1</upbody>
+ IDOM_Element* upbody = doc2->createElement(xupbody);
+ IDOM_Text* uptext1 = doc2->createTextNode(xuptext1);
+ upbody->appendChild(uptext1);
+ root2->appendChild(upbody);
+
+ IDOM_Range* uprange = doc2->createRange();
+ uprange->setStart(upbody,0);
+ uprange->setEnd(upbody,1);
+
+ TASSERT(!XMLString::compareString(uprange->toString(),xuptext1));
+ TASSERT(uprange->getStartOffset()==0);
+ TASSERT(!XMLString::compareString(uprange->getStartContainer()->getNodeName(),xupbody));
+ TASSERT(uprange->getEndOffset()==1);
+ TASSERT(!XMLString::compareString(uprange->getEndContainer()->getNodeName(),xupbody));
+
+ // split text
+ uptext1->splitText(1);
+
+ TASSERT(!XMLString::compareString(uprange->toString(),xu));
+ TASSERT(uprange->getStartOffset()==0);
+ TASSERT(!XMLString::compareString(uprange->getStartContainer()->getNodeName(),xupbody));
+ TASSERT(uprange->getEndOffset()==1);
+ TASSERT(!XMLString::compareString(uprange->getEndContainer()->getNodeName(),xupbody));
+
+ //insert node
+ IDOM_Element* upbody2 = doc2->createElement(xupbody2);
+ IDOM_Text* uptext2 = doc2->createTextNode(xuptext2);
+ upbody2->appendChild(uptext2);
+ root2->appendChild(upbody2);
+
+ IDOM_Range* uprange2 = doc2->createRange();
+ uprange2->setStart(uptext2,1);
+ uprange2->setEnd(upbody2,1);
+
+ IDOM_Range* uprange3 = doc2->createRange();
+ uprange3->setStart(uptext2,1);
+ uprange3->setEnd(upbody2,1);
+
+ TASSERT(!XMLString::compareString(uprange2->toString(),xptext2));
+ TASSERT(uprange2->getStartOffset()==1);
+ TASSERT(!XMLString::compareString(uprange2->getStartContainer()->getNodeValue(),xuptext2));
+ TASSERT(uprange2->getEndOffset()==1);
+ TASSERT(!XMLString::compareString(uprange2->getEndContainer()->getNodeName(),xupbody2));
+
+ TASSERT(!XMLString::compareString(uprange3->toString(),xptext2));
+ TASSERT(uprange3->getStartOffset()==1);
+ TASSERT(!XMLString::compareString(uprange3->getStartContainer()->getNodeValue(),xuptext2));
+ TASSERT(uprange3->getEndOffset()==1);
+ TASSERT(!XMLString::compareString(uprange3->getEndContainer()->getNodeName(),xupbody2));
+
+ IDOM_Element* upp1 = doc2->createElement(xupp1);
+ uprange2->insertNode(upp1);
+
+ TASSERT(!XMLString::compareString(uprange2->toString(),XMLUni::fgZeroLenString));
+ TASSERT(uprange2->getStartOffset()==1);
+ TASSERT(!XMLString::compareString(uprange2->getStartContainer()->getNodeValue(),xu));
+ TASSERT(uprange2->getEndOffset()==1);
+ TASSERT(!XMLString::compareString(uprange2->getEndContainer()->getNodeName(),xupbody2));
+
+ TASSERT(!XMLString::compareString(uprange3->toString(),XMLUni::fgZeroLenString));
+ TASSERT(uprange3->getStartOffset()==1);
+ TASSERT(!XMLString::compareString(uprange3->getStartContainer()->getNodeValue(),xu));
+ TASSERT(uprange3->getEndOffset()==1);
+ TASSERT(!XMLString::compareString(uprange3->getEndContainer()->getNodeName(),xupbody2));
+
+ //***************************************************************
+ //another set of test
+ //<foo><c/><moo><b/></moo>ab<a>Hello cd</a><cool>ef</cool></foo>
+ //
+ // ______________________foo_____________________
+ // | | | | |
+ // c moo "ab" a cool
+ // | | |
+ // b "Hello cd" "ef"
+ //
+ IDOM_DOMImplementation* impl3 = IDOM_DOMImplementation::getImplementation();
+ IDOM_Document* doc3 = impl3->createDocument();
+ IDOM_Element* root3 = doc3->createElement(xroot);
+ doc3->appendChild(root3);
+ IDOM_Element* foo = doc3->createElement(xfoo);
+ IDOM_Element* moo = doc3->createElement(xmoo);
+ IDOM_Element* cool = doc3->createElement(xcool);
+ IDOM_Text* ab = doc3->createTextNode(xab);
+ IDOM_Text* cd = doc3->createTextNode(xHellocd);
+ IDOM_Text* ef = doc3->createTextNode(xef);
+
+ IDOM_Element* a = doc3->createElement(xa);
+ IDOM_Element* b = doc3->createElement(xb);
+ IDOM_Element* c = doc3->createElement(xc);
+
+ root3->appendChild(foo);
+ foo->appendChild(c);
+ foo->appendChild(moo);
+ foo->appendChild(ab);
+ foo->appendChild(a);
+ foo->appendChild(cool);
+ moo->appendChild(b);
+ a->appendChild(cd);
+ cool->appendChild(ef);
+
+ //***************************************************************
+ //TEST toString
+ //***************************************************************
+ IDOM_Range* newtestrange = doc3->createRange();
+ //case 1:
+ //start container is text node
+ // i) end container is also text node
+ // a) start==end
+ // b) start!=end
+ // ii) end container is not text node
+ // a) start==end => impossible
+ // b) start!=end
+ //
+ //case 2:
+ //start container is not text node
+ // i) end container is text node
+ // a) start==end => impossible
+ // b) start!=end
+ // ii) end container is not text node
+ // a) start==end
+ // b) start!=end
+
+ //case 1, i, a
+ newtestrange->setStart( cd, 1 );
+ newtestrange->setEnd( cd, 4 );
+
+ TASSERT(!XMLString::compareString(newtestrange->toString(),xell));
+
+ //case 1, i, b
+ newtestrange->setStart( cd, 1 );
+ newtestrange->setEnd( ef, 2 );
+
+ TASSERT(!XMLString::compareString(newtestrange->toString(),xellocdef));
+
+ //case 1, ii, b
+ newtestrange->setStart( cd, 1 );
+ newtestrange->setEnd( foo, 4 );
+
+ TASSERT(!XMLString::compareString(newtestrange->toString(),xellocd));
+
+ //case 2, i, b
+ newtestrange->setStart( foo, 1 );
+ newtestrange->setEnd( cd, 5 );
+
+ TASSERT(!XMLString::compareString(newtestrange->toString(),xabHello));
+
+ //case 2, ii, a
+ newtestrange->setStart( foo, 1 );
+ newtestrange->setEnd( foo, 4 );
+
+ TASSERT(!XMLString::compareString(newtestrange->toString(),xabHellocd));
+
+ //case 2, ii, b
+ newtestrange->setStart( moo, 1 );
+ newtestrange->setEnd( foo, 4 );
+
+ TASSERT(!XMLString::compareString(newtestrange->toString(),xabHellocd));
+
+ //***************************************************************
+ //test removeChild
+ //***************************************************************
+ IDOM_Range* newrange = doc3->createRange();
+ newrange->setStart( moo, 0 );
+ newrange->setEnd( foo, 4 );
+
+ TASSERT(newrange->getStartOffset()==0);
+ TASSERT(!XMLString::compareString(newrange->getStartContainer()->getNodeName(),xmoo));
+ TASSERT(newrange->getEndOffset()==4);
+ TASSERT(!XMLString::compareString(newrange->getEndContainer()->getNodeName(),xfoo));
+ TASSERT(!XMLString::compareString(newrange->toString(),xabHellocd));
+
+ IDOM_Node* n = newrange->cloneContents();
+ IDOM_NodeList* nol = foo->getChildNodes();
+
+ //removing moo
+ foo->removeChild(nol->item(1));
+ TASSERT(newrange->getStartOffset()==1);
+ TASSERT(!XMLString::compareString(newrange->getStartContainer()->getNodeName(),xfoo));
+ TASSERT(newrange->getEndOffset()==3);
+ TASSERT(!XMLString::compareString(newrange->getEndContainer()->getNodeName(),xfoo));
+ TASSERT(!XMLString::compareString(newrange->toString(),xabHellocd));
+
+ TASSERT(newtestrange->getStartOffset()==1);
+ TASSERT(!XMLString::compareString(newtestrange->getStartContainer()->getNodeName(),xfoo));
+ TASSERT(newtestrange->getEndOffset()==3);
+ TASSERT(!XMLString::compareString(newtestrange->getEndContainer()->getNodeName(),xfoo));
+ TASSERT(!XMLString::compareString(newtestrange->toString(),xabHellocd));
+
+ delete doc;
+ delete doc2;
+ delete doc3;
+ }
} //creating the dom tree and tests
-
// And call the termination method
XMLPlatformUtils::Terminate();
1.1 xml-xerces/c/tests/IDom/ITraversal/ITraversal.cpp
Index: ITraversal.cpp
===================================================================
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Xerces" and "Apache Software Foundation" must
* not be used to endorse or promote products derived from this
* software without prior written permission. For written
* permission, please contact apache\@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* nor may "Apache" appear in their name, without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation, and was
* originally based on software copyright (c) 2001, International
* Business Machines, Inc., http://www.ibm.com . For more information
* on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
//
// Various IDOM tests.
// Contents include
// 1. NodeIterator tests
// 2. Tree Walker tests
// All individual are wrapped in a memory leak checker.
//
// This is NOT a complete test of DOM functionality.
//
/**
* $Log: ITraversal.cpp,v $
* Revision 1.1 2001/06/04 20:11:55 tng
* IDOM: Complete IDNodeIterator, IDTreeWalker, IDNodeFilter.
*
*
*/
#include <stdio.h>
#include <string.h>
#include <idom/IDOM.hpp>
#include <util/PlatformUtils.hpp>
#include <util/XMLException.hpp>
#include <util/XMLString.hpp>
#include <util/XMLUniDefs.hpp>
#define TASSERT(c) tassert((c), __FILE__, __LINE__)
void tassert(bool c, char *file, int line)
{
if (!c)
printf("Failure. Line %d, file %s\n", line, file);
};
#define EXCEPTION_TEST(operation, expected_exception) \
{ \
try { \
operation; \
printf(" Error: no exception thrown at line %d\n", __LINE__); \
} \
catch (IDOM_DOMException &e) { \
if (e.code != expected_exception) \
printf(" Wrong exception code: %d at line %d\n", e.code, __LINE__); \
} \
catch (...) { \
printf(" Wrong exception thrown at line %d\n", __LINE__); \
} \
}
class MyFilter : public IDOM_NodeFilter {
public:
MyFilter(short nodeType, bool reject=false) : IDOM_NodeFilter(), fNodeType(nodeType), fReject(reject) {};
virtual short acceptNode(const IDOM_Node* node) const;
private:
short fNodeType;
bool fReject;
};
/*
Node Types can be of the following:
ELEMENT_NODE = 1,
ATTRIBUTE_NODE = 2,
TEXT_NODE = 3,
CDATA_SECTION_NODE = 4,
ENTITY_REFERENCE_NODE = 5,
ENTITY_NODE = 6,
PROCESSING_INSTRUCTION_NODE = 7,
COMMENT_NODE = 8,
DOCUMENT_NODE = 9,
DOCUMENT_TYPE_NODE = 10,
DOCUMENT_FRAGMENT_NODE = 11,
NOTATION_NODE = 12
*/
short MyFilter::acceptNode(const IDOM_Node* node) const {
if (fNodeType == 0)
return IDOM_NodeFilter::FILTER_ACCEPT;
if (node->getNodeType() == fNodeType) {
return IDOM_NodeFilter::FILTER_ACCEPT;
} else {
return fReject ? IDOM_NodeFilter::FILTER_REJECT : IDOM_NodeFilter::FILTER_SKIP;
}
}
int main()
{
try {
XMLPlatformUtils::Initialize();
}
catch (const XMLException& toCatch) {
char *pMessage = XMLString::transcode(toCatch.getMessage());
fprintf(stderr, "Error during XMLPlatformUtils::Initialize(). \n"
" Message is: %s\n", pMessage);
delete [] pMessage;
return -1;
}
// Create a XMLCh buffer for string manipulation
XMLCh tempStr[4000];
//
// Doc - Create a small document tree
//
{
//creating a DOM Tree
/* Tests are based on the tree structure below
doc - root - E11 (attr01) - textNode1
- E111
- E112
- cdataSec
- E12 (attr02) - textNode2
- E121
- E122
- E13 - E131
- docPI
- comment
*/
IDOM_DOMImplementation* impl = IDOM_DOMImplementation::getImplementation();
IDOM_Document* doc = impl->createDocument();
//Creating a root element
XMLString::transcode("RootElement", tempStr, 3999);
IDOM_Element* root = doc->createElement(tempStr);
doc->appendChild(root);
//Creating the siblings of root
XMLString::transcode("FirstSibling", tempStr, 3999);
IDOM_Element* E11 = doc->createElement(tempStr);
root->appendChild(E11);
XMLString::transcode("SecondSibling", tempStr, 3999);
IDOM_Element* E12 = doc->createElement(tempStr);
root->appendChild(E12);
XMLString::transcode("ThirdSibling", tempStr, 3999);
IDOM_Element* E13 = doc->createElement(tempStr);
root->appendChild(E13);
//Attaching texts to few siblings
XMLString::transcode("Text1", tempStr, 3999);
IDOM_Text* textNode1 = doc->createTextNode(tempStr);
E11->appendChild(textNode1);
XMLString::transcode("Text2", tempStr, 3999);
IDOM_Text* textNode2 = doc->createTextNode(tempStr);
E12->appendChild(textNode2);
//creating child of siblings
XMLString::transcode("FirstSiblingChild1", tempStr, 3999);
IDOM_Element* E111 = doc->createElement(tempStr);
E11->appendChild(E111);
XMLString::transcode("Attr01", tempStr, 3999);
IDOM_Attr* attr01 = doc->createAttribute(tempStr);
E11->setAttributeNode(attr01);
XMLString::transcode("FirstSiblingChild2", tempStr, 3999);
IDOM_Element* E112 = doc->createElement(tempStr);
E11->appendChild(E112);
XMLString::transcode("SecondSiblingChild1", tempStr, 3999);
IDOM_Element* E121 = doc->createElement(tempStr);
E12->appendChild(E121);
XMLString::transcode("Attr01", tempStr, 3999);
IDOM_Attr* attr02 = doc->createAttribute(tempStr);
E12->setAttributeNode(attr02);
XMLString::transcode("SecondSiblingChild2", tempStr, 3999);
IDOM_Element* E122 = doc->createElement(tempStr);
E12->appendChild(E122);
XMLString::transcode("ThirdSiblingChild1", tempStr, 3999);
IDOM_Element* E131 = doc->createElement(tempStr);
E13->appendChild(E131);
XMLString::transcode("DocComment", tempStr, 3999);
IDOM_Comment* comment = doc->createComment(tempStr);
root->appendChild(comment);
XMLString::transcode("DocCDataSection", tempStr, 3999);
IDOM_CDATASection* cdataSec = doc->createCDATASection(tempStr);
E11->appendChild(cdataSec);
XMLString::transcode("DocPI", tempStr, 3999);
XMLCh piStr[] = {chLatin_D, chLatin_o, chLatin_c, chLatin_P, chLatin_I, chNull};
IDOM_ProcessingInstruction* docPI = doc->createProcessingInstruction(piStr, tempStr);
E13->appendChild(docPI);
/*
following are whatToShow types:
SHOW_ALL = 0x0000FFFF,
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
*/
////////// NodeIterator Test Cases ////////////////
{
// all node iterating test
IDOM_Node* node = doc->getFirstChild();
unsigned long whatToShow = IDOM_NodeFilter::SHOW_ALL;
MyFilter* filter = new MyFilter(0);
IDOM_NodeIterator* iter = doc->createNodeIterator(root, whatToShow, filter, true);
TASSERT(iter->getWhatToShow() == 65535);
TASSERT(iter->getExpandEntityReferences() == 1);
IDOM_Node* nd;
nd = iter->nextNode();
TASSERT (nd ==root);
nd = iter->nextNode();
TASSERT (nd ==E11);
nd = iter->nextNode();
TASSERT(nd == textNode1);
nd = iter->nextNode();
TASSERT(nd == E111);
nd = iter->nextNode();
TASSERT(nd == E112);
nd = iter->nextNode();
TASSERT(nd == cdataSec);
nd = iter->nextNode();
TASSERT(nd == E12);
nd = iter->nextNode();
TASSERT(nd == textNode2);
nd = iter->nextNode();
TASSERT(nd == E121);
nd = iter->nextNode();
TASSERT(nd == E122);
nd = iter->nextNode();
TASSERT(nd == E13);
nd = iter->nextNode();
TASSERT(nd == E131);
nd = iter->nextNode();
TASSERT(nd == docPI);
nd = iter->nextNode();
TASSERT(nd == comment);
nd = iter->previousNode();
TASSERT(nd == comment);
nd = iter->previousNode();
TASSERT(nd == docPI);
nd = iter->previousNode();
TASSERT(nd == E131);
}
{
//element node iterating test
IDOM_Node* node = doc->getFirstChild();
unsigned long whatToShow = IDOM_NodeFilter::SHOW_ELEMENT;
MyFilter* filter = new MyFilter(IDOM_Node::ELEMENT_NODE);
IDOM_NodeIterator* iter = doc->createNodeIterator(root, whatToShow, filter, true);
TASSERT(iter->getWhatToShow() == 1);
TASSERT(iter->getExpandEntityReferences() == 1);
IDOM_Node* nd;
nd = iter->nextNode();
TASSERT (nd ==root);
nd = iter->nextNode();
TASSERT (nd ==E11);
nd = iter->nextNode();
TASSERT(nd == E111);
nd = iter->nextNode();
TASSERT(nd == E112);
nd = iter->nextNode();
TASSERT(nd == E12);
nd = iter->nextNode();
TASSERT(nd == E121);
nd = iter->nextNode();
TASSERT(nd == E122);
nd = iter->nextNode();
TASSERT(nd == E13);
nd = iter->nextNode();
TASSERT(nd == E131);
nd = iter->previousNode();
TASSERT(nd == E131);
nd = iter->previousNode();
TASSERT(nd == E13);
nd = iter->previousNode();
TASSERT(nd == E122);
}
{
// Text node iterating test
IDOM_Node* node = doc->getFirstChild();
unsigned long whatToShow = IDOM_NodeFilter::SHOW_TEXT;
MyFilter* filter = new MyFilter(IDOM_Node::TEXT_NODE);
IDOM_NodeIterator* iter = doc->createNodeIterator(root, whatToShow, filter, true);
TASSERT(iter->getWhatToShow() == 4);
TASSERT(iter->getExpandEntityReferences() == 1);
IDOM_Node* nd;
nd = iter->nextNode();
TASSERT (nd ==textNode1);
nd = iter->nextNode();
TASSERT (nd ==textNode2);
nd = iter->previousNode();
TASSERT(nd == textNode2);
}
{
//CDataSection node itearating test
IDOM_Node* node = doc->getFirstChild();
unsigned long whatToShow = IDOM_NodeFilter::SHOW_CDATA_SECTION;
MyFilter* filter = new MyFilter(IDOM_Node::CDATA_SECTION_NODE);
IDOM_NodeIterator* iter = doc->createNodeIterator(root, whatToShow, filter, true);
TASSERT(iter->getWhatToShow() == 8);
TASSERT(iter->getExpandEntityReferences() == 1);
IDOM_Node* nd;
nd = iter->nextNode();
TASSERT(nd == cdataSec);
nd = iter->nextNode();
TASSERT(nd == 0);
}
{
// PI nodes iterating test
IDOM_Node* node = doc->getFirstChild();
unsigned long whatToShow = IDOM_NodeFilter::SHOW_PROCESSING_INSTRUCTION;
MyFilter* filter = new MyFilter(IDOM_Node::PROCESSING_INSTRUCTION_NODE);
IDOM_NodeIterator* iter = doc->createNodeIterator(root, whatToShow, filter, true);
TASSERT(iter->getWhatToShow() == 64);
TASSERT(iter->getExpandEntityReferences() == 1);
IDOM_Node* nd;
nd = iter->nextNode();
TASSERT(nd == docPI);
nd = iter->nextNode();
TASSERT(nd == 0);
}
{
IDOM_Node* node = doc->getFirstChild();
unsigned long whatToShow = IDOM_NodeFilter::SHOW_COMMENT;
MyFilter* filter = new MyFilter(IDOM_Node::COMMENT_NODE);
IDOM_NodeIterator* iter = doc->createNodeIterator(root, whatToShow, filter, true);
TASSERT(iter->getWhatToShow() == 128);
TASSERT(iter->getExpandEntityReferences() == 1);
IDOM_Node* nd;
nd = iter->nextNode();
TASSERT(nd == comment);
nd = iter->nextNode();
TASSERT(nd == 0);
}
////////// TreeWalker Test Cases ////////////////
{
unsigned long whatToShow = IDOM_NodeFilter::SHOW_ALL;
IDOM_TreeWalker* tw = doc->createTreeWalker(doc, whatToShow, 0, true);
TASSERT(tw->getCurrentNode() == doc);
TASSERT(tw->firstChild() == root);
TASSERT(tw->nextSibling() == 0);
TASSERT(tw->lastChild() == comment);
TASSERT(tw->firstChild() == 0);
TASSERT(tw->lastChild() == 0);
TASSERT(tw->nextSibling() == 0);
TASSERT(tw->nextNode() == 0);
TASSERT(tw->previousSibling() == E13);
TASSERT(tw->previousNode() == E122);
TASSERT(tw->parentNode() == E12);
TASSERT(tw->firstChild() == textNode2);
TASSERT(tw->previousSibling() == 0);
TASSERT(tw->nextSibling() == E121);
TASSERT(tw->nextNode() == E122);
TASSERT(tw->parentNode() == E12);
TASSERT(tw->previousSibling() == E11);
TASSERT(tw->previousNode() == root);
TASSERT(tw->previousNode() == doc);
TASSERT(tw->previousNode() == 0);
TASSERT(tw->parentNode() == 0);
TASSERT(tw->getCurrentNode() == doc);
}
{
MyFilter mf(IDOM_Node::ELEMENT_NODE);
unsigned long whatToShow = IDOM_NodeFilter::SHOW_ALL;
IDOM_TreeWalker* tw = doc->createTreeWalker(root, whatToShow, &mf, true);
TASSERT(tw->getCurrentNode() == root);
TASSERT(tw->parentNode() == 0); //should not change currentNode
TASSERT(tw->getCurrentNode() == root);
TASSERT(tw->nextNode() == E11);
TASSERT(tw->nextNode() == E111);
tw->setCurrentNode(E12);
//when first is not visible, should it go to its sibling?
TASSERT(tw->firstChild() == E121); //first visible child
TASSERT(tw->previousSibling() == 0);
}
{
MyFilter mf(IDOM_Node::ELEMENT_NODE, true);
unsigned long whatToShow = IDOM_NodeFilter::SHOW_ELEMENT;
IDOM_TreeWalker* tw = doc->createTreeWalker(root, whatToShow, &mf, true);
tw->setCurrentNode(E12);
TASSERT(tw->firstChild() == E121); //still first visible child
}
{
MyFilter mf(IDOM_Node::TEXT_NODE);
unsigned long whatToShow = IDOM_NodeFilter::SHOW_TEXT;
IDOM_TreeWalker* tw = doc->createTreeWalker(root, whatToShow, &mf, true);
//when first is not visible, should it go to its descendent?
TASSERT(tw->firstChild() == textNode1); //E11 skipped
TASSERT(tw->firstChild() == 0);
TASSERT(tw->nextNode() == textNode2);
TASSERT(tw->nextSibling() == 0);
TASSERT(tw->parentNode() == 0); //no visible ancestor
TASSERT(tw->getCurrentNode() == textNode2);
tw->setCurrentNode(root);
//when last is not visible, should it go to its sibling & descendent?
TASSERT(tw->lastChild() == textNode2); //last visible child
tw->setCurrentNode(E12);
//when next sibling is not visible, should it go to its descendent?
TASSERT(tw->nextSibling() == 0);
}
{
MyFilter mf(IDOM_Node::TEXT_NODE, true);
unsigned long whatToShow = IDOM_NodeFilter::SHOW_TEXT;
IDOM_TreeWalker* tw = doc->createTreeWalker(root, whatToShow, &mf, true);
TASSERT(tw->firstChild() == 0); //E11 rejected and no children is TEXT
TASSERT(tw->getCurrentNode() == root);
TASSERT(tw->nextNode() == 0); //E11 rejected so can't get to textNode1
}
};
return 0;
};
1.1 xml-xerces/c/tests/IDom/ITraversal/Makefile.in
Index: Makefile.in
===================================================================
#
# The Apache Software License, Version 1.1
#
# Copyright (c) 2001 The Apache Software Foundation. All rights
# reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
#
# 3. The end-user documentation included with the redistribution,
# if any, must include the following acknowledgment:
# "This product includes software developed by the
# Apache Software Foundation (http://www.apache.org/)."
# Alternately, this acknowledgment may appear in the software itself,
# if and wherever such third-party acknowledgments normally appear.
#
# 4. The names "Xerces" and "Apache Software Foundation" must
# not be used to endorse or promote products derived from this
# software without prior written permission. For written
# permission, please contact apache\@apache.org.
#
# 5. Products derived from this software may not be called "Apache",
# nor may "Apache" appear in their name, without prior written
# permission of the Apache Software Foundation.
#
# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
# ====================================================================
#
# This software consists of voluntary contributions made by many
# individuals on behalf of the Apache Software Foundation, and was
# originally based on software copyright (c) 2001, International
# Business Machines, Inc., http://www.ibm.com . For more information
# on the Apache Software Foundation, please see
# <http://www.apache.org/>.
#
#
# $Id: Makefile.in,v 1.1 2001/06/04 20:11:55 tng Exp $
#
#
###################################################################
# IMPORTANT NOTE #
###################################################################
# If you are going to do the OS390BATCH build, make sure you have #
# the OS390BATCH environment variable set. #
# #
# export OS390BATCH=1 #
# #
###################################################################
PLATFORM = @platform@
COMPILER = @compiler@
CXXFLAGS = @cxxflags@
CFLAGS = @cflags@
PREFIX = @prefix@
OSVER = @osver@
LIBS = @libs@
CC = @compiler@
include ../../../version.incl
include ../../Makefile.incl
APP_NAME=ITraversal
APP_DIR=IDOM/ITraversal
OUTDIR= ${XERCESCROOT}/tests/${APP_DIR}
EXEC= ${XERCESCROOT}/bin
OBJS= ${OUTDIR}/ITraversal.o
SRC= ${XERCESCROOT}/tests/${APP_DIR}
HEADER_FILES=
INCLUDE = ${INCLUDES}
## OS390BATCH
ifeq (${OS390BATCH},1)
BATCH_TARGET= "//'${LOADMOD}(TRAVERSA)'"
all: makedir ${BATCH_TARGET}
else
all: makedir ${EXEC}/${APP_NAME}
endif
makedir:
-mkdir -p $(OUTDIR)
${EXEC}/${APP_NAME}: ${OBJS}
${LINK} ${PLATFORM_LIB_LINK_OPTIONS} ${OBJS} -o $@ ${LIBRARY_SEARCH_PATHS} ${LIBRARY_NAMES} ${EXTRA_LINK_OPTIONS}
${BATCH_TARGET}: ${OBJS}
${LINK} ${PLATFORM_LIB_LINK_OPTIONS} ${OBJS} -o $@ ${LIBRARY_SEARCH_PATHS} ${LIBRARY_NAMES} ${EXTRA_LINK_OPTIONS}
$(OUTDIR)/ITraversal.o: ${SRC}/ITraversal.cpp ${HEADER_FILES}
${CC} ${CMP} $(INCLUDE) -o $(OUTDIR)/ITraversal.o ${SRC}/ITraversal.cpp
clean:
rm -f ${OBJS} ${EXEC}/${APP_NAME}
distclean: clean
rm -f Makefile
---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org