fixed
[SXSI/XMLTree.git] / XMLTree.cpp
index 249143c..2a1da84 100644 (file)
@@ -566,13 +566,14 @@ treeNode XMLTree::TaggedDesc(treeNode x, TagType tag)
        exit(1);\r
     }\r
 \r
-    int r, s;\r
+    //int r, s;\r
     treeNode y;\r
     if (isleaf(Par,x))\r
       return NULLT;\r
 \r
-    r = (int) Tags->rank(tag, node2tagpos(x));\r
-    s = (int) Tags->select(tag, r+1);\r
+               int s = (int) Tags->select_next(tag,node2tagpos(x));\r
+    /*r = (int) Tags->rank(tag, node2tagpos(x));\r
+    s = (int) Tags->select(tag, r+1);*/\r
     if (s == -1) return NULLT; // there is no such node\r
     y = tagpos2node(s); // transforms the tag position into a node position\r
     if (!is_ancestor(Par, x, y)) return NULLT; // the next node tagged tag (in preorder) is not within the subtree of x.\r
@@ -659,14 +660,15 @@ treeNode XMLTree::TaggedDescOrFollOnly(treeNode x,TagType *folltags, unsigned in
 {\r
 \r
   treeNode res,y,lim;\r
-  int r,s;\r
+  //int r,s;\r
   lim = find_close(Par,root);   \r
   res=NULLT;\r
   for (unsigned int i = 0; i < ftlen; i ++ )\r
     {\r
 \r
-      r = (int) Tags->rank(folltags[i], node2tagpos(x));\r
-      s = (int) Tags->select(folltags[i], r+1);\r
+                       int s = (int) Tags->select_next(folltags[i],node2tagpos(x));\r
+      /*r = (int) Tags->rank(folltags[i], node2tagpos(x));\r
+      s = (int) Tags->select(folltags[i], r+1);*/\r
       if (s == -1) \r
        y = NULLT; // there is no such node\r
       else {\r
@@ -762,12 +764,13 @@ treeNode XMLTree::TaggedFoll(treeNode x, TagType tag)
        exit(1);\r
     }\r
 \r
-    int r, s;\r
+    //int r, s;\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
+     \r
+               int s = (int) Tags->select_next(tag,find_close(Par,x));\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) return NULLT;\r
     else return tagpos2node(s);\r
  } \r
@@ -777,13 +780,14 @@ treeNode XMLTree::TaggedFoll(treeNode x, TagType tag)
 treeNode XMLTree::TaggedFollBelow(treeNode x, TagType tag, treeNode root)\r
  {\r
 \r
-    int r, s;\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
+               int s = (int) Tags->select_next(tag,find_close(Par,x));\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
@@ -800,14 +804,15 @@ treeNode XMLTree::TaggedFollowingSibling(treeNode x, TagType tag)
        exit(1);\r
     }\r
 \r
-    int r, s;\r
+    //int r, s;\r
     treeNode ns = next_sibling(Par,x);\r
 \r
     if (x == NULLT || x == Root() || ns == -1)\r
       return NULLT;\r
 \r
-    r = (int) Tags->rank(tag, node2tagpos(ns)-1);\r
-    s = (int) Tags->select(tag, r+1);  // select returns -1 in case that there is no r+1-th tag.\r
+               int s = (int) Tags->select_next(tag,node2tagpos(ns)-1);\r
+    /*r = (int) Tags->rank(tag, node2tagpos(ns)-1);\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) return NULLT;\r
     else return tagpos2node(s);\r
  }\r