Added TaggedFollBelow
authorkim <kim@3cdefd35-fc62-479d-8e8d-bae585ffb9ca>
Wed, 11 Mar 2009 00:28:53 +0000 (00:28 +0000)
committerkim <kim@3cdefd35-fc62-479d-8e8d-bae585ffb9ca>
Wed, 11 Mar 2009 00:28:53 +0000 (00:28 +0000)
git-svn-id: svn+ssh://idea.nguyen.vg/svn/sxsi/trunk/XMLTree@243 3cdefd35-fc62-479d-8e8d-bae585ffb9ca

XMLTree.cpp
XMLTree.h

index 95546fd..8dcdaec 100644 (file)
@@ -753,6 +753,24 @@ treeNode XMLTree::TaggedFoll(treeNode x, TagType tag)
     else return tagpos2node(s);\r
  } \r
 \r
+// TaggedFoll(x,tag): returns the first node tagged tag with larger preorder than x and not in\r
+// the subtree of x. Returns NULLT if there is none.\r
+treeNode XMLTree::TaggedFollBelow(treeNode x, TagType tag, treeNode root)\r
+ {\r
+\r
+    int r, s;\r
+    int lim = node2tagpos(find_close(Par,root));\r
+    if (x ==NULLT || x == Root())\r
+       return NULLT;\r
+                   \r
+    r = (int) Tags->rank(tag,find_close(Par,x));\r
+    s = (int) Tags->select(tag, r+1);  // select returns -1 in case that there is no r+1-th tag.\r
+    if (s==-1 || s >= lim) \r
+      return NULLT;\r
+    else \r
+      return tagpos2node(s);\r
+ } \r
+\r
 \r
 // TaggedFollowingSibling(x,tag): returns the first node tagged tag with larger preorder than x and not in\r
 // the subtree of x. Returns NULLT if there is none.\r
index 1f8df57..80173a4 100644 (file)
--- a/XMLTree.h
+++ b/XMLTree.h
@@ -232,7 +232,8 @@ public:
     * preorder than x and not in the subtree of x. Returns NULLT if there \r
     * is none. */\r
    treeNode TaggedFoll(treeNode x, TagType tag);\r
-     \r
+\r
+   treeNode TaggedFollBelow(treeNode x, TagType tag,treeNode root);     \r
   \r
    /** TaggedFollowingSibling(x,tag) */\r
    treeNode TaggedFollowingSibling(treeNode x, TagType tag);\r