richter 01/10/19 06:54:07
Modified: . Tag: Embperl2c epdom.c epdom.h
Log:
Embperl 2 - tree structure rewrite
Revision Changes Path
No revision
No revision
1.4.2.49 +184 -92 embperl/Attic/epdom.c
Index: epdom.c
===================================================================
RCS file: /home/cvs/embperl/Attic/epdom.c,v
retrieving revision 1.4.2.48
retrieving revision 1.4.2.49
diff -u -r1.4.2.48 -r1.4.2.49
--- epdom.c 2001/10/19 07:18:08 1.4.2.48
+++ epdom.c 2001/10/19 13:54:07 1.4.2.49
@@ -9,7 +9,7 @@
# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
# WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
#
-# $Id: epdom.c,v 1.4.2.48 2001/10/19 07:18:08 richter Exp $
+# $Id: epdom.c,v 1.4.2.49 2001/10/19 13:54:07 richter Exp $
#
###################################################################################*/
@@ -694,7 +694,7 @@
}
-#define Node_selfLevel(pDomTree,xNode,nLevel) (!nLevel || !pDomTree ->
pLookupLevel[xNode])?Node_selfLevelItem(pDomTree,xNode,nLevel):((struct tNodeData
*)(pDomTree -> pLookup[xNode])))
+#define Node_selfLevel(pDomTree,xNode,nLevel) (((struct tNodeData *)(pDomTree ->
pLookup[xNode])) -> nRepeatLevel == nLevel || !pDomTree ->
pLookupLevel[xNode])?Node_selfLevelItem(pDomTree,xNode,nLevel):((struct tNodeData
*)(pDomTree -> pLookup[xNode])))
@@ -1203,6 +1203,7 @@
tNodeData * Node_selfCloneNode (/*in*/ tDomTree * pDomTree,
/*in*/ tNodeData * pNode,
+ /*in*/ tRepeatLevel nRepeatLevel,
/*in*/ int bDeep)
{
@@ -1221,6 +1222,7 @@
pNew -> xNdx = xNewNode ;
pNew -> bFlags &= ~nflgModified ;
pNew -> xDomTree = pDomTree -> xNdx ;
+ pNew -> nRepeatLevel = nRepeatLevel ;
if (pNew -> nText)
NdxStringRefcntInc (pNew -> nText) ;
@@ -1255,11 +1257,12 @@
tNode Node_cloneNode (/*in*/ tDomTree * pDomTree,
- /*in*/ tNode xNode,
- /*in*/ int bDeep)
+ /*in*/ tNode xNode,
+ /*in*/ tRepeatLevel nRepeatLevel,
+ /*in*/ int bDeep)
{
- tNodeData * pNew = Node_selfCloneNode (pDomTree, Node_self (pDomTree, xNode),
bDeep) ;
+ tNodeData * pNew = Node_selfCloneNode (pDomTree, Node_self (pDomTree, xNode),
nRepeatLevel, bDeep) ;
if (pNew)
return pNew -> xNdx ;
@@ -1271,14 +1274,15 @@
/* */
/* Node_selfCondCloneNode */
/* */
-/* clone a node if it's part of a different DomTree in preparation for */
-/* a change */
+/* clone a node if it's part of a different DomTree or has a different */
+/* repeat level in preparation for a modification */
/* */
/* ------------------------------------------------------------------------ */
tNodeData * Node_selfCondCloneNode (/*in*/ tDomTree * pDomTree,
- /*in*/ tNodeData * pNode)
+ /*in*/ tNodeData * pNode,
+ /*in*/ tRepeatLevel nRepeatLevel)
{
int len ;
@@ -1287,41 +1291,78 @@
int n ;
void * * pLookup ;
tNode xNdx ;
+ tRepeatLevelLookup * pLookupLevelNode ;
+ tRepeatLevelLookupItem * pLookupLevelNodeLevel ;
+
- if (pNode -> xDomTree == pDomTree -> xNdx)
+ if (pNode -> xDomTree == pDomTree -> xNdx && pNode -> nRepeatLevel ==
nRepeatLevel)
return pNode ;
- pLookup = pDomTree -> pLookup ;
- len = sizeof (tNodeData) + pNode -> numAttr * sizeof (tAttrData) ;
- xNdx = pNode -> xNdx ;
+ if (nRepeatLevel == 0)
+ {
+ pLookup = pDomTree -> pLookup ;
+ len = sizeof (tNodeData) + pNode -> numAttr * sizeof (tAttrData) ;
+ xNdx = pNode -> xNdx ;
- if ((pLookup[xNdx] = pNew = dom_malloc (len)) == NULL)
- return NULL ;
+ if ((pLookup[xNdx] = pNew = dom_malloc (len)) == NULL)
+ return NULL ;
- numNodes++ ;
+ numNodes++ ;
- memcpy (pNew, pNode, len) ;
+ memcpy (pNew, pNode, len) ;
- pNew -> bFlags &= ~nflgModified ;
- pNew -> xDomTree = pDomTree -> xNdx ;
+ pNew -> bFlags &= ~nflgModified ;
+ pNew -> xDomTree = pDomTree -> xNdx ;
- if (pNew -> nText)
- NdxStringRefcntInc (pNew -> nText) ;
+ if (pNew -> nText)
+ NdxStringRefcntInc (pNew -> nText) ;
- pAttr = (tAttrData * )(pNew + 1) ;
- n = pNew -> numAttr ;
+ pAttr = (tAttrData * )(pNew + 1) ;
+ n = pNew -> numAttr ;
- while (n)
- {
- pLookup[pAttr -> xNdx] = pAttr ;
- if (pAttr -> xName)
- NdxStringRefcntInc (pAttr -> xName) ;
- if (pAttr -> xValue && (pAttr -> bFlags & aflgAttrValue))
- NdxStringRefcntInc (pAttr -> xValue) ;
- n-- ;
- pAttr++ ;
- }
+ while (n)
+ {
+ pLookup[pAttr -> xNdx] = pAttr ;
+ if (pAttr -> xName)
+ NdxStringRefcntInc (pAttr -> xName) ;
+ if (pAttr -> xValue && (pAttr -> bFlags & aflgAttrValue))
+ NdxStringRefcntInc (pAttr -> xValue) ;
+ n-- ;
+ pAttr++ ;
+ }
+
+ return pNew ;
+ }
+
+ if (!(pNew = Node_selfCloneNode (pDomTree, pNode, nRepeatLevel, 1))
+ return NULL ;
+ pLookupLevelNode = pDomTree -> pLookupLevel[pNode -> xNdx] ;
+ if (!pLookupLevelNode)
+ {
+ if ((pLookupLevelNode = pDomTree -> pLookupLevel[pNode -> xNdx] =
dom_malloc (sizeof (tRepeatLevelLookup) + sizeof (tRepeatLevelLookupItem * 7))) ==
NULL)
+ return NULL ;
+ pLookupLevelNode -> nMask = 7 ;
+ pLookupLevelNode -> numItems = 8 ;
+ memset (pLookupLevelNode -> items, 0, sizeof (pLookupLevelNodeItem) * 8) ;
+ }
+ pLookupLevelNodeLevel= pLookupNodeLevel -> items[nLevel & pLookupNodeLevel ->
nMask] ;
+ if (pLookupLevelNodeLevel -> pNode)
+ {
+ tRepeatLevelLookupItem * pNewItem = dom_malloc (sizeof
(tRepeatLevelLookupItem)) ;
+ if (!pNewItem)
+ return NULL ;
+
+ pNewItem -> pNode = pLookupLevelNodeLevel -> pNode ;
+ pNewItem -> pNext = pLookupLevelNodeLevel -> pNext ;
+ pLookupLevelNodeLevel -> pNode = pNew ;
+ pLookupLevelNodeLevel -> pNext = pNewItem ;
+ }
+ else
+ {
+ pLookupLevelNodeLevel -> pNode = pNew ;
+ }
+
return pNew ;
}
@@ -1342,6 +1383,7 @@
tNodeData * Node_newAndAppend (/*in*/ tDomTree * pDomTree,
/*in*/ tIndex xParent,
/*in*/ tIndex * pxChilds,
+ /*in*/ tRepeatLevel nRepeatLevel,
/*in*/ tSInt32 nLinenumber,
/*in*/ tSInt32 nSize)
@@ -1362,6 +1404,7 @@
pNewChild -> nLinenumber = nLinenumber ;
pNewChild -> bFlags = nflgOK ;
pNewChild -> xDomTree = pDomTree -> xNdx ;
+ pNewChild -> nRepeatLevel = nRepeatLevel ;
if (xChilds)
{ /* --- attribute has already childs, get the first and last one --- */
@@ -1453,6 +1496,7 @@
/*in*/ const char * sText,
/*in*/ int nTextLen,
/*in*/ tNode xParent,
+ /*in*/ tRepeatLevel nRepeatLevel,
/*in*/ int nLevel,
/*in*/ int nLinenumber,
/*in*/ const char * sLogMsg)
@@ -1461,7 +1505,7 @@
tNodeData * pParent;
tIndex xText ;
- pParent = Node_self (pDomTree, xParent) ;
+ pParent = Node_selfLevel (pDomTree, xParent, nRepeatLevel) ;
/* --- clone node if it doesn't live in the current DomTree -- */
if (pParent)
@@ -1470,15 +1514,14 @@
{
tNodeData * pNode = Attr_selfNode (((tAttrData *)pParent)) ;
- if (pNode -> xDomTree != pDomTree -> xNdx)
- pNode = Node_selfCondCloneNode (pDomTree, pNode) ;
+ pNode = Node_selfCondCloneNode (pDomTree, pNode, nRepeatLevel) ;
- pParent = Node_self (pDomTree, xParent) ;
+ pParent = Node_selfLevel (pDomTree, xParent, nRepeatLevel) ;
}
else
{
if (pParent -> xDomTree != pDomTree -> xNdx)
- pParent = Node_selfCondCloneNode (pDomTree, pParent) ;
+ pParent = Node_selfCondCloneNode (pDomTree, pParent, nRepeatLevel) ;
}
}
@@ -1588,19 +1631,19 @@
xOldValue = ((tAttrData *)pParent) -> xValue ;
((tAttrData *)pParent) -> xValue = 0 ;
- pNew = Node_newAndAppend (pDomTree, xParent, &(((tAttrData
*)pParent) -> xValue), nLinenumber, 0) ;
+ pNew = Node_newAndAppend (pDomTree, xParent, &(((tAttrData
*)pParent) -> xValue), nRepeatLevel, nLinenumber, 0) ;
pNew -> nType = ntypAttrValue ;
pNew -> nText = xOldValue ;
}
((tAttrData *)pParent) -> bFlags &= ~aflgAttrValue ;
((tAttrData *)pParent) -> bFlags |= aflgAttrChilds ;
- pNew = Node_newAndAppend (pDomTree, xParent, &(((tAttrData *)pParent)
-> xValue), nLinenumber, 0) ;
+ pNew = Node_newAndAppend (pDomTree, xParent, &(((tAttrData *)pParent)
-> xValue), nRepeatLevel, nLinenumber, 0) ;
}
else
{
- pNew = Node_newAndAppend (pDomTree, xParent, pParent?&(pParent ->
xChilds):NULL, nLinenumber, 0) ;
+ pNew = Node_newAndAppend (pDomTree, xParent, pParent?&(pParent ->
xChilds):NULL, nRepeatLevel, nLinenumber, 0) ;
}
@@ -1633,9 +1676,9 @@
-tNodeData * Node_selfRemoveChild (/*in*/ tDomTree * pDomTree,
- /*in*/ tNode xParent,
- /*in*/ tNodeData * pChild)
+tNodeData * Node_selfRemoveChild (/*in*/ tDomTree * pDomTree,
+ /*in*/ tNode xParent,
+ /*in*/ tNodeData * pChild)
{
struct tNodeData * pParent = Node_self (pDomTree, pChild -> xParent) ;
@@ -1660,6 +1703,41 @@
pDomTree -> pLookup[pChild -> xNdx] = NULL ;
+
+
+ {
+ tRepeatLevelLookup * pLookupLevelNode = pDomTree -> pLookupLevel[xNode] ;
+ if (pLookupLevelNode)
+ {
+ register tRepeatLevelLookupItem * pLookupLevelNodeLevel = pLookupNodeLevel ->
items[nLevel & pLookupNodeLevel -> nMask] ;
+ tRepeatLevelLookupItem * pLast ;
+ while (pLookupLevelNodeLevel && pLookupLevelNodeLevel -> pNode != pChild)
+ {
+ pLast = pLookupLevelNodeLevel ;
+ pLookupLevelNodeLevel = pLookupLevelNodeLevel -> pNext ;
+ }
+
+ if (pLookupLevelNodeLevel)
+ {
+ if (pLast)
+ {
+ pLast -> pNext = pLookupLevelNodeLevel -> pNext ;
+ dom_free (pLookupLevelNodeLevel) ;
+ }
+ else if (pLookupLevelNodeLevel -> pNext)
+ {
+ pLast = pLookupLevelNodeLevel -> pNext ;
+ pLookupLevelNodeLevel -> pNode = pLast -> pNode ;
+ pLookupLevelNodeLevel -> pNext = pLast -> pNext ;
+ dom_free (pLast) ;
+ }
+ else
+ {
+ pLookupLevelNodeLevel -> pNode = NULL ;
+ }
+ }
+ }
+
dom_free (pChild) ;
numNodes-- ;
@@ -1679,10 +1757,11 @@
tNode Node_removeChild (/*in*/ tDomTree * pDomTree,
/*in*/ tNode xParent,
- /*in*/ tNode xChild)
+ /*in*/ tNode xChild,
+ /*in*/ tRepeatLevel nRepeatLevel)
{
- Node_selfRemoveChild (pDomTree, xParent, Node_self (pDomTree, xChild)) ;
+ Node_selfRemoveChild (pDomTree, xParent, Node_selfLevel (pDomTree, xChild,
nRepeatLevel)) ;
return 0 ;
}
@@ -1691,8 +1770,8 @@
/* */
/* Node_replaceChild */
/* */
-/* Replaces the node pointed by pOldChildDomTree/xOldChild, with the node */
-/* pointed by pDomTree/xNode */
+/* Replaces the node pointed by pOldChildDomTree/xOldChild/nOldRepeatLevel, */
+/* with the node pointed by pDomTree/xNode/nRepeatLevel */
/* */
/* ------------------------------------------------------------------------ */
@@ -1700,21 +1779,23 @@
tNode Node_replaceChildWithNode (/*in*/ tDomTree * pDomTree,
/*in*/ tNode xNode,
+ /*in*/ tRepeatLevel nRepeatLevel,
/*in*/ tDomTree * pOldChildDomTree,
- /*in*/ tNode xOldChild)
+ /*in*/ tNode xOldChild,
+ /*in*/ tRepeatLevel nOldRepeatLevel)
{
int bFlags = nflgModified | nflgReturn ;
tNode xOrgChild = xOldChild ;
- tNodeData * pNode = Node_self (pDomTree, xNode) ;
+ tNodeData * pNode = Node_selfLevel (pDomTree, xNode, nRepeatLevel) ;
tNodeData * pOldChild ;
- pOldChild = Node_selfCondCloneNode (pOldChildDomTree, Node_self
(pOldChildDomTree, xOldChild)) ;
+ pOldChild = Node_selfCondCloneNode (pOldChildDomTree, Node_selfLevel
(pOldChildDomTree, xOldChild, nOldRepeatLevel), nOldRepeatLevel) ;
if (pOldChild -> bFlags & nflgModified)
{
pOldChild -> bFlags |= bFlags ;
- pOldChild = Node_selfCloneNode (pOldChildDomTree, pNode, 1) ;
+ pOldChild = Node_selfCloneNode (pOldChildDomTree, pNode, nOldRepeatLevel, 1) ;
xOldChild = pOldChild -> xNdx ;
}
else
@@ -1826,20 +1907,22 @@
tNode Node_insertAfter (/*in*/ tDomTree * pNewNodeDomTree,
/*in*/ tNode xNewNode,
+ /*in*/ tRepeatLevel nNewRepeatLevel,
/*in*/ tDomTree * pRefNodeDomTree,
- /*in*/ tNode xRefNode)
+ /*in*/ tNode xRefNode,
+ /*in*/ tRepeatLevel nRefRepeatLevel)
{
int bFlags = nflgModified | nflgReturn ;
- tNodeData * pNewNode = Node_self (pNewNodeDomTree, xNewNode) ;
- tNodeData * pRefNode = Node_self (pRefNodeDomTree, xRefNode) ;
- tNodeData * pNxtNode = Node_selfNextSibling (pRefNodeDomTree,
pRefNode) ;
+ tNodeData * pNewNode = Node_selfLevel (pNewNodeDomTree, xNewNode,
nNewRepeatLevel) ;
+ tNodeData * pRefNode = Node_selfLevel (pRefNodeDomTree, xRefNode,
nRefRepeatLevel) ;
+ tNodeData * pNxtNode = Node_selfNextSibling (pRefNodeDomTree,
pRefNode, nRefRepeatLevel) ;
tNode xOrgNode ;
if (pNewNodeDomTree != pRefNodeDomTree)
{
- tNodeData * pNew = Node_newAndAppend (pRefNodeDomTree, pRefNode -> xParent,
NULL, pNewNode -> nLinenumber, sizeof (tNodeData) + pNewNode -> numAttr * sizeof
(tAttrData)) ;
+ tNodeData * pNew = Node_newAndAppend (pRefNodeDomTree, pRefNode -> xParent,
nRefRepeatLevel, NULL, pNewNode -> nLinenumber, sizeof (tNodeData) + pNewNode ->
numAttr * sizeof (tAttrData)) ;
pNew -> nText = pNewNode -> nText ;
pNew -> xChilds = pNewNode -> xChilds ;
@@ -1851,11 +1934,11 @@
pNewNode = pNew ;
}
- pRefNode = Node_selfCondCloneNode (pRefNodeDomTree, pRefNode) ;
+ pRefNode = Node_selfCondCloneNode (pRefNodeDomTree, pRefNode, nRefRepeatLevel)
;
if (pNxtNode)
- pNxtNode = Node_selfCondCloneNode (pRefNodeDomTree, pNxtNode) ;
+ pNxtNode = Node_selfCondCloneNode (pRefNodeDomTree, pNxtNode,
nRefRepeatLevel) ;
else
- pNxtNode = Node_self (pRefNodeDomTree, pRefNode -> xNext) ; /* first one */
+ pNxtNode = Node_selfLevel (pRefNodeDomTree, pRefNode -> xNext,
nRefRepeatLevel) ; /* first one */
if ((pNxtNode -> bFlags & nflgModified) == 0)
{
@@ -1905,15 +1988,16 @@
/*in*/ int nTextLen,
/*in*/ int nEscMode,
/*in*/ tDomTree * pRefNodeDomTree,
- /*in*/ tNode xRefNode)
+ /*in*/ tNode xRefNode,
+ /*in*/ tRepeatLevel nRefRepeatLevel)
{
- tNodeData * pRefNode = Node_self (pRefNodeDomTree, xRefNode) ;
- tNodeData * pNxtNode = Node_selfNextSibling (pRefNodeDomTree,
pRefNode) ;
+ tNodeData * pRefNode = Node_selfLevel (pRefNodeDomTree, xRefNode,
nRefRepeatLevel) ;
+ tNodeData * pNxtNode = Node_selfNextSibling (pRefNodeDomTree,
pRefNode, nRefRepeatLevel) ;
tNode xOrgNode ;
- tNodeData * pNew = Node_newAndAppend (pRefNodeDomTree, pRefNode -> xParent,
NULL, pRefNode -> nLinenumber, sizeof (tNodeData)) ;
+ tNodeData * pNew = Node_newAndAppend (pRefNodeDomTree, pRefNode -> xParent,
NULL, nRefRepeatLevel, pRefNode -> nLinenumber, sizeof (tNodeData)) ;
pNew -> xChilds = 0 ;
pNew -> bFlags = 0 ;
@@ -1930,11 +2014,11 @@
pNew -> nText = String2Ndx(sText, nTextLen) ;
- pRefNode = Node_selfCondCloneNode (pRefNodeDomTree, pRefNode) ;
+ pRefNode = Node_selfCondCloneNode (pRefNodeDomTree, pRefNode, nRefRepeatLevel)
;
if (pNxtNode)
- pNxtNode = Node_selfCondCloneNode (pRefNodeDomTree, pNxtNode) ;
+ pNxtNode = Node_selfCondCloneNode (pRefNodeDomTree, pNxtNode,
nRefRepeatLevel) ;
else
- pNxtNode = Node_self (pRefNodeDomTree, pRefNode -> xNext) ; /* first one */
+ pNxtNode = Node_selfLevel (pRefNodeDomTree, pRefNode -> xNext,
nRefRepeatLevel) ; /* first one */
/* if ((pNxtNode -> bFlags & nflgModified) == 0) */
{
@@ -1970,7 +2054,8 @@
tNode Node_replaceChildWithCDATA (/*in*/ tDomTree * pDomTree,
/*in*/ tNode xNode,
/*in*/ tNode xOldChild,
- /*in*/ const char * sText,
+ /*in*/ tRepeatLevel nRepeatLevel,
+ /*in*/ const char * sText,
/*in*/ int nTextLen,
/*in*/ int nEscMode,
/*in*/ int bFlags)
@@ -1984,14 +2069,14 @@
/* *** lprintf (pCurrReq, "rp1--> SVs=%d %s DomTree Old=%d\n", sv_count,
sText?sText:"<null>", Node_selfDomTree (Node_self (pDomTree, xOldChild))) ; */
- pOldChild = Node_selfCondCloneNode (pDomTree, Node_self (pDomTree, xOldChild))
;
+ pOldChild = Node_selfCondCloneNode (pDomTree, Node_selfLevel (pDomTree,
xOldChild, nRefRepeatLevel), nRefRepeatLevel) ;
xCheckpointCache[nCheckpointCache++] = xOldChild ;
if (pOldChild -> bFlags & nflgModified)
{
pOldChild -> bFlags |= bFlags ;
- pOldChild = Node_selfCloneNode (pDomTree, pOldChild, 0) ;
+ pOldChild = Node_selfCloneNode (pDomTree, pOldChild, nRefRepeatLevel, 0) ;
xOldChild = pOldChild -> xNdx ;
}
/* *** lprintf (pCurrReq, "rp2--> DomTree New=%d\n", Node_selfDomTree
(pOldChild)) ; */
@@ -2036,11 +2121,12 @@
tNodeData * Node_selfLastChild (/*in*/ tDomTree * pDomTree,
- /*in*/ tNodeData * pNode)
+ /*in*/ tNodeData * pNode,
+ /*in*/ tRepeatLevel nRepeatLevel)
{
if (pNode -> xChilds)
- return Node_self (pDomTree, Node_selfFirstChild (pDomTree, pNode) -> xPrev)
;
+ return Node_selfLevel (pDomTree, Node_selfFirstChild (pDomTree, pNode,
nRepeatLevel) -> xPrev, nRepeatLevel) ;
return 0 ;
}
@@ -2055,15 +2141,16 @@
/* ------------------------------------------------------------------------ */
-struct tNodeData * Node_selfNthChild (/*in*/ tDomTree * pDomTree,
+struct tNodeData * Node_selfNthChild (/*in*/ tDomTree * pDomTree,
/*in*/ struct tNodeData * pNode,
+ /*in*/ tRepeatLevel nRepeatLevel,
/*in*/ int nChildNo)
{
if (pNode -> xChilds)
{
tNodeData * pChild ;
- tNodeData * pFirstChild = Node_selfFirstChild (pDomTree, pNode) ;
+ tNodeData * pFirstChild = Node_selfFirstChild (pDomTree, pNode,
nRepeatLevel) ;
if (nChildNo == 0)
return pFirstChild ;
@@ -2073,7 +2160,7 @@
do
{
- pChild = Node_self (pDomTree, pChild -> xNext) ;
+ pChild = Node_selfLevel (pDomTree, pChild -> xNext, nRepeatLevel) ;
if (nChildNo-- < 2)
return pChild ;
}
@@ -2095,7 +2182,8 @@
tNodeData * Node_selfNextSibling (/*in*/ tDomTree * pDomTree,
- /*in*/ tNodeData * pNode)
+ /*in*/ tNodeData * pNode,
+ /*in*/ tRepeatLevel nRepeatLevel)
{
tNodeData * pParent ;
@@ -2104,13 +2192,13 @@
if (pNode -> xNext == pNode -> xNdx)
return NULL ;
- if ((pParent = Node_self (pDomTree, pNode -> xParent)) != NULL)
+ if ((pParent = Node_selfLevel (pDomTree, pNode -> xParent, nRepeatLevel)) !=
NULL)
{
if (pParent -> xChilds == pNode -> xNext)
return NULL ;
}
- pNxt = Node_self (pDomTree, pNode -> xNext) ;
+ pNxt = Node_selfLevel (pDomTree, pNode -> xNext, nRepeatLevel) ;
if (!pParent)
{
@@ -2130,18 +2218,19 @@
/* ------------------------------------------------------------------------ */
-tNode Node_nextSibling (/*in*/ tDomTree * pDomTree,
- /*in*/ tNode xNode)
+tNode Node_nextSibling (/*in*/ tDomTree * pDomTree,
+ /*in*/ tNode xNode,
+ /*in*/ tRepeatLevel nRepeatLevel)
{
- tNodeData * pNode = Node_self (pDomTree, xNode) ;
+ tNodeData * pNode = Node_selfLevel (pDomTree, xNode, nRepeatLevel) ;
tNodeData * pParent ;
if (pNode -> xNext == pNode -> xNdx)
return 0 ;
- pParent = Node_self (pDomTree, pNode -> xParent) ;
+ pParent = Node_selfLevel (pDomTree, pNode -> xParent, nRepeatLevel) ;
if (pParent -> xChilds == pNode -> xNext)
return 0 ;
@@ -2159,7 +2248,8 @@
tNodeData * Node_selfPreviousSibling (/*in*/ tDomTree * pDomTree,
- /*in*/ tNodeData * pNode)
+ /*in*/ tNodeData * pNode,
+ /*in*/ tRepeatLevel nRepeatLevel)
{
tNodeData * pParent ;
@@ -2167,11 +2257,11 @@
if (pNode -> xPrev == pNode -> xNdx)
return 0 ;
- pParent = Node_self (pDomTree, pNode -> xParent) ;
+ pParent = Node_selfLevel (pDomTree, pNode -> xParent, nRepeatLevel) ;
if (pParent -> xChilds == pNode -> xNdx)
return 0 ;
- return Node_self (pDomTree, pNode -> xPrev) ;
+ return Node_selfLevel (pDomTree, pNode -> xPrev, nRepeatLevel) ;
}
@@ -2184,18 +2274,19 @@
/* ------------------------------------------------------------------------ */
-tNode Node_previousSibling (/*in*/ tDomTree * pDomTree,
- /*in*/ tNode xNode)
+tNode Node_previousSibling (/*in*/ tDomTree * pDomTree,
+ /*in*/ tNode xNode,
+ /*in*/ tRepeatLevel nRepeatLevel)
{
- tNodeData * pNode = Node_self (pDomTree, xNode) ;
+ tNodeData * pNode = Node_selfLevel (pDomTree, xNode, nRepeatLevel) ;
tNodeData * pParent ;
if (pNode -> xPrev == pNode -> xNdx)
return 0 ;
- pParent = Node_self (pDomTree, pNode -> xParent) ;
+ pParent = Node_selfLevel (pDomTree, pNode -> xParent, nRepeatLevel) ;
if (pParent -> xChilds == pNode -> xNdx)
return 0 ;
@@ -2214,11 +2305,12 @@
char * Node_childsText (/*in*/ tDomTree * pDomTree,
/*in*/ tNode xNode,
+ /*in*/ tRepeatLevel nRepeatLevel,
/*i/o*/ char * * ppText,
/*in*/ int bDeep)
{
- tNodeData * pParent = Node_self (pDomTree, xNode) ;
+ tNodeData * pParent = Node_selfLevel (pDomTree, xNode, nRepeatLevel) ;
tNodeData * pNode ;
char * sNodeText ;
char * sText = ppText?*ppText:NULL ;
@@ -2227,16 +2319,16 @@
{
if (sText == NULL)
StringNew (&sText, 1024) ;
- pNode = Node_selfFirstChild (pDomTree, pParent) ;
+ pNode = Node_selfFirstChild (pDomTree, pParent, nRepeatLevel) ;
while (pNode)
{
sNodeText = Node_selfNodeName(pNode) ;
StringAdd (&sText, sNodeText, 0) ;
if (bDeep)
- Node_childsText (pDomTree, pNode -> xNdx, &sText, 1) ;
+ Node_childsText (pDomTree, pNode -> xNdx, nRepeatLevel, &sText, 1) ;
- pNode = Node_selfNextSibling (pDomTree, pNode) ;
+ pNode = Node_selfNextSibling (pDomTree, pNode, nRepeatLevel) ;
}
}
1.4.2.27 +3 -3 embperl/Attic/epdom.h
Index: epdom.h
===================================================================
RCS file: /home/cvs/embperl/Attic/epdom.h,v
retrieving revision 1.4.2.26
retrieving revision 1.4.2.27
diff -u -r1.4.2.26 -r1.4.2.27
--- epdom.h 2001/10/19 07:18:08 1.4.2.26
+++ epdom.h 2001/10/19 13:54:07 1.4.2.27
@@ -9,7 +9,7 @@
# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
# WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
#
-# $Id: epdom.h,v 1.4.2.26 2001/10/19 07:18:08 richter Exp $
+# $Id: epdom.h,v 1.4.2.27 2001/10/19 13:54:07 richter Exp $
#
###################################################################################*/
@@ -172,10 +172,10 @@
{
tRepeatLevel numItems ; /* size of table (must be 2^n) */
tRepeatLevel nMask ; /* mask (usualy numItems - 1) */
- tRepeatLevelLookupItem items[] ; /* array with numItems items */
+ tRepeatLevelLookupItem items[1] ; /* array with numItems items */
} ;
-typedef struct tRepeatLevelLookupItem tRepeatLevelLookupItem ;
+typedef struct tRepeatLevelLookup tRepeatLevelLookup ;
struct tDomTree
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]