From 5db16dd3e0bf609bc0fa84ee7d067f6bbc58013e Mon Sep 17 00:00:00 2001 From: kim Date: Mon, 27 Apr 2009 09:18:24 +0000 Subject: [PATCH 1/1] 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 --- XMLTree.cpp | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) 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; } -- 2.17.1