From: kim Date: Mon, 27 Apr 2009 09:18:24 +0000 (+0000) Subject: TaggedFollBelow was complete crap (by me). Rewrote it more efficiently. X-Git-Url: http://git.nguyen.vg/gitweb/?a=commitdiff_plain;h=5db16dd3e0bf609bc0fa84ee7d067f6bbc58013e;hp=dc02a833a150dbef202bc14aca74c51360d4a631;p=SXSI%2FXMLTree.git TaggedFollBelow was complete crap (by me). Rewrote it more efficiently. git-svn-id: svn+ssh://idea.nguyen.vg/svn/sxsi/trunk/XMLTree@361 3cdefd35-fc62-479d-8e8d-bae585ffb9ca --- diff --git a/XMLTree.cpp b/XMLTree.cpp index 2a1da84..bd728af 100644 --- a/XMLTree.cpp +++ b/XMLTree.cpp @@ -780,18 +780,15 @@ treeNode XMLTree::TaggedFoll(treeNode x, TagType tag) treeNode XMLTree::TaggedFollBelow(treeNode x, TagType tag, treeNode root) { - //int r, s; - int lim = node2tagpos(find_close(Par,root)); - if (x ==NULLT || x == Root()) - return NULLT; - - int s = (int) Tags->select_next(tag,find_close(Par,x)); - /*r = (int) Tags->rank(tag,find_close(Par,x)); - s = (int) Tags->select(tag, r+1); // select returns -1 in case that there is no r+1-th tag.*/ - if (s==-1 || s >= lim) - return NULLT; - else - return tagpos2node(s); + if (x == NULLT || x == Root()) return NULLT; + treeNode s = (treeNode) Tags->select_next(tag,find_close(Par,x)); + /*int r = (int) Tags->rank(tag, find_close(Par, x)); + int s = (int) Tags->select(tag, r+1); */ + if (root == Root()) + return s; + + if (s == NULLT || s >= find_close(Par,root)) return NULLT; + return s; }