richter     01/10/19 00:18:09

  Modified:    .        Tag: Embperl2c epdom.c epdom.h
  Log:
  Embperl 2 - start rewrite of internal tree structure
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.4.2.48  +32 -1     embperl/Attic/epdom.c
  
  Index: epdom.c
  ===================================================================
  RCS file: /home/cvs/embperl/Attic/epdom.c,v
  retrieving revision 1.4.2.47
  retrieving revision 1.4.2.48
  diff -u -r1.4.2.47 -r1.4.2.48
  --- epdom.c   2001/09/13 08:13:02     1.4.2.47
  +++ epdom.c   2001/10/19 07:18:08     1.4.2.48
  @@ -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.47 2001/09/13 08:13:02 richter Exp $
  +#   $Id: epdom.c,v 1.4.2.48 2001/10/19 07:18:08 richter Exp $
   #
   
###################################################################################*/
   
  @@ -666,6 +666,37 @@
           }
        }          
       }
  +
  +
  +
  +tNodeData * Node_selfLevelItem (/*in*/ tDomTree *    pDomTree,
  +                             /*in*/ tNode     xNode,
  +                             /*in*/ tRepeatLevel  nLevel)
  +
  +    {
  +    tRepeatLevelLookup * pLookupLevelNode = pDomTree -> pLookupLevel[xNode] ;
  +    if (pLookupLevelNode)
  +     {
  +     register tRepeatLevelLookupItem * pLookupLevelNodeLevel = pLookupNodeLevel -> 
items[nLevel & pLookupNodeLevel -> nMask] ;
  +     register tNodeData *              pLnNode               = 
pLookupLevelNodeLevel -> pNode ;
  +     if (!pLnNode)
  +         return ((struct tNodeData *)(pDomTree -> pLookup[xNode])) ;
  +     if (pLnNode -> nLevel == nLevel)
  +         return pLnNode ;
  +     while (pLookupLevelNodeLevel = pLookupLevelNodeLevel -> pNext)
  +         {
  +         pLnNode = pLookupLevelNodeLevel -> pNode ;
  +         if (pLnNode -> nLevel == nLevel)
  +             return pLnNode ;
  +         }
  +     }
  +    return ((struct tNodeData *)(pDomTree -> pLookup[xNode])) ;
  +    }
  +
  +
  +#define Node_selfLevel(pDomTree,xNode,nLevel)  (!nLevel || !pDomTree -> 
pLookupLevel[xNode])?Node_selfLevelItem(pDomTree,xNode,nLevel):((struct tNodeData 
*)(pDomTree -> pLookup[xNode])))
  +
  +
   
   
   /* ------------------------------------------------------------------------ */
  
  
  
  1.4.2.26  +22 -1     embperl/Attic/epdom.h
  
  Index: epdom.h
  ===================================================================
  RCS file: /home/cvs/embperl/Attic/epdom.h,v
  retrieving revision 1.4.2.25
  retrieving revision 1.4.2.26
  diff -u -r1.4.2.25 -r1.4.2.26
  --- epdom.h   2001/10/16 11:51:23     1.4.2.25
  +++ epdom.h   2001/10/19 07:18:08     1.4.2.26
  @@ -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.25 2001/10/16 11:51:23 richter Exp $
  +#   $Id: epdom.h,v 1.4.2.26 2001/10/19 07:18:08 richter Exp $
   #
   
###################################################################################*/
   
  @@ -39,6 +39,7 @@
   typedef tUInt8          tNodeType ;
   typedef tIndex               tNode    ;
   typedef tIndex               tAttr    ;
  +typedef tUInt16         tRepeatLevel ;
   
   
   struct tNodeData
  @@ -54,6 +55,7 @@
       tNode            xPrev ;
       tNode            xNext ;
       tNode            xParent ;
  +    tRepeatLevel     nRepeatLevel ;
       } ;
   
   typedef struct tNodeData tNodeData ;
  @@ -158,9 +160,28 @@
   typedef struct tDomTreeOrder tDomTreeOrder ;
   
   
  +struct tRepeatLevelLookupItem
  +    {
  +    tNodeData        *           pNode ;     /* pointer to actual node data */
  +    tRepeatLevelLookup       *   pNode ;     /* next node with same node index but 
different nRepeatLevel */
  +    } ;
  +
  +typedef struct tRepeatLevelLookupItem tRepeatLevelLookupItem ;
  +
  +struct tRepeatLevelLookup
  +    {
  +    tRepeatLevel         numItems ;  /* size of table (must be 2^n) */
  +    tRepeatLevel         nMask ;     /* mask (usualy numItems - 1) */
  +    tRepeatLevelLookupItem  items[] ;        /* array with numItems items */
  +    } ;
  +
  +typedef struct tRepeatLevelLookupItem tRepeatLevelLookupItem ;
  +
  +
   struct tDomTree
       {
       void * *     pLookup ;   /* table for converting tNode and tAttr to pointers */
  +    tRepeatLevelLookup * * pLookupLevel ; /* hash table used to index 
xNode/nRepeatLevel */
       tDomTreeOrder * pOrder ; /* Order of dom tree after execution of code */
       tIndex       xNdx ;      /* Index of Dom Tree */
       tNode        xDocument ; /* root document node */
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to