Various cleanups
authorkim <kim@3cdefd35-fc62-479d-8e8d-bae585ffb9ca>
Fri, 21 Aug 2009 00:29:10 +0000 (00:29 +0000)
committerkim <kim@3cdefd35-fc62-479d-8e8d-bae585ffb9ca>
Fri, 21 Aug 2009 00:29:10 +0000 (00:29 +0000)
git-svn-id: svn+ssh://idea.nguyen.vg/svn/sxsi/trunk/xpathcomp@558 3cdefd35-fc62-479d-8e8d-bae585ffb9ca

ata.ml
results.c
tree.ml

diff --git a/ata.ml b/ata.ml
index 77d5008..4ea2067 100644 (file)
--- a/ata.ml
+++ b/ata.ml
@@ -528,13 +528,13 @@ let tags_of_state a q =
     module GResult(Doc : sig val doc : Tree.t end) = struct
       type bits
       type elt = [` Tree] Tree.node
-      external create_empty : int -> bits = "caml_result_set_create"
-      external set : bits -> int -> unit = "caml_result_set_set"
-      external next : bits -> int -> int = "caml_result_set_next"
-      external count : bits -> int  = "caml_result_set_count"
-      external clear : bits -> elt -> elt -> unit = "caml_result_set_clear"
+      external create_empty : int -> bits = "caml_result_set_create" "noalloc"
+      external set : bits -> int -> unit = "caml_result_set_set" "noalloc"
+      external next : bits -> int -> int = "caml_result_set_next" "noalloc"
+      external count : bits -> int  = "caml_result_set_count" "noalloc"
+      external clear : bits -> elt -> elt -> unit = "caml_result_set_clear" "noalloc"
         
-      external set_tag_bits : bits -> Tag.t -> Tree.t -> elt -> elt = "caml_set_tag_bits"
+      external set_tag_bits : bits -> Tag.t -> Tree.t -> elt -> elt = "caml_set_tag_bits" "noalloc"
       type t = 
         { segments : elt list;
           bits : bits;
@@ -1075,10 +1075,10 @@ END
                          (fun t _ -> eval_fold2_slist fl_list t (Tree.tag tree t) empty_res empty_res)
                      |  _,`NIL -> (
                            match f_kind with
-                             |`TAG(tag') ->                            
+                             (*|`TAG(tag') ->                          
                                let default = fun t _ -> eval_fold2_slist fl_list t (Tree.tag tree t) empty_res
                                   (loop_tag tag' (first t) llist t )
-                               in
+                               in default (*
                                let cf = SList.hd llist in
                                if (slot_size == 1) && StateSet.is_singleton cf
                                then
@@ -1088,7 +1088,7 @@ END
                                then 
                                RS.mk_quick_tag_loop default llist 1 tree tag' 
                                else default
-                               else default
+                               else default *) *)
                             | _ ->
                                 (fun t _ -> eval_fold2_slist fl_list t (Tree.tag tree t) empty_res
                                   (loop (first t) llist t ))
@@ -1096,13 +1096,13 @@ END
                       | `NIL,_ -> (
                           match n_kind with
                             |`TAG(tag') ->
-                              (*if SList.equal rlist slist && tag == tag' then
+                              if SList.equal rlist slist && tag == tag' then
                               let rec loop t ctx = 
                                 if t == Tree.nil then empty_res else 
                                 let res2 = loop (next t ctx) ctx in                               
                                 eval_fold2_slist fl_list t tag res2 empty_res            
                               in loop
-                              else *)
+                              else 
                                (fun t ctx -> eval_fold2_slist fl_list t (Tree.tag tree t)
                                  (loop_tag tag' (next t ctx) rlist ctx ) empty_res)
                                                                                             
index 1f1deda..19480fd 100644 (file)
--- a/results.c
+++ b/results.c
@@ -184,9 +184,9 @@ static int nextLarger (int *tree, int n, int p, int pos, int pot)
 \r
   { int answ;\r
     if (!getBit(tree,pos)) return -1; // no answer\r
-    pot--;\r
     pos = (pos<<1)+1;\r
     if (pos >= n) return 0; // when n is not a power of 2, missing leaves\r
+    pot--;\r
     if ((p>>pot) == 0) // p goes left\r
        { answ = nextLarger(tree,n,p&~(1<<pot),pos,pot);\r
         if (answ != -1) return answ;\r
diff --git a/tree.ml b/tree.ml
index 86f7e5b..b1b1d15 100644 (file)
--- a/tree.ml
+++ b/tree.ml
@@ -507,13 +507,16 @@ let id t n = tree_node_xml_id t.doc n
        
 let tag t n = if n == nil then Tag.nullt else tree_tag t.doc n
 
-let tagged_descendant t tag = (); fun n -> tree_tagged_descendant t.doc n tag 
+let tagged_descendant t tag = 
+  let doc = t.doc in (); fun n -> tree_tagged_descendant doc n tag 
 
 let select_descendant t = fun ts -> 
   let v = (ptset_to_vector ts) in ();
     fun n -> tree_select_descendant t.doc n v
 
-let tagged_following_below  t tag = (); fun n ctx -> tree_tagged_following_below t.doc n tag ctx
+let tagged_following_below  t tag =
+  let doc = t.doc in
+  (); fun n ctx -> tree_tagged_following_below doc n tag ctx
 
 let select_following_below t = fun ts ->
   let v = (ptset_to_vector ts) in ();