Restored bottom up run
[SXSI/xpathcomp.git] / OCamlDriver.cpp
index e2c6f00..baf9698 100644 (file)
@@ -24,7 +24,7 @@ extern "C" {
 #include <caml/callback.h>
 #include <caml/fail.h>
 #include <caml/custom.h>
-
+#include "results.h"
 
 #define CAMLRAISEMSG(msg) (caml_raise_with_string(*cpp_exception,(msg) ))
 #define NOT_IMPLEMENTED(s)  (caml_failwith(s))
@@ -318,6 +318,10 @@ extern "C" CAMLprim value caml_xml_tree_subtree_tags(value tree,value id,value t
   return (Val_int(XMLTREE(tree)->SubtreeTags(TREENODEVAL(id),Int_val(tag))));
 }
 
+extern "C" CAMLprim value caml_xml_tree_subtree_size(value tree,value id){
+  return (Val_int(XMLTREE(tree)->SubtreeSize(TREENODEVAL(id))));
+}
+
 
 extern "C" CAMLprim value caml_xml_tree_register_tag(value tree,value str){
   CAMLparam2(tree,str);
@@ -379,3 +383,32 @@ extern "C" CAMLprim value caml_xml_tree_doc_ids(value tree, value node){
   caml_initialize(&Field(tuple,1),Val_int(r.max));
   CAMLreturn (tuple);
 }
+
+extern "C" CAMLprim value caml_result_set_create(value size){
+  CAMLparam1(size);
+  results* res = (results*) malloc(sizeof(results));
+  results r = createResults (Int_val(size));
+  res->n = r.n;
+  res->lgn = r.lgn;
+  res->tree = r.tree;
+  CAMLreturn ((value) (res));
+}
+
+extern "C" CAMLprim value caml_result_set_set(value result,value p){
+  CAMLparam2(result,p);
+  setResult (  *((results*) result), Int_val(p));
+  CAMLreturn (Val_unit);
+}
+
+extern "C" CAMLprim value caml_result_set_clear(value result,value p1,value p2){
+  CAMLparam3(result,p1,p2);
+  clearRange ( *((results*) result), Int_val(p1), Int_val(p2));
+  CAMLreturn (Val_unit);
+}
+
+extern "C" CAMLprim value caml_result_set_next(value result,value p){
+  CAMLparam2(result,p);
+  CAMLreturn (Val_int(nextResult(*((results*) result), Int_val(p))));
+}
+
+