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]

Reply via email to