You are viewing a plain text version of this content. The canonical link for it is here.
Posted to embperl-cvs@perl.apache.org by ri...@apache.org on 2001/10/19 09:18:09 UTC
cvs commit: embperl epdom.c epdom.h
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: embperl-cvs-unsubscribe@perl.apache.org
For additional commands, e-mail: embperl-cvs-help@perl.apache.org