X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=OCamlDriver.cpp;h=0d0a24cbbf04d8592ed95d566a31726428cacd65;hb=f0557f21878be17ddc75b1bc8f4f86da68c8e604;hp=e2c6f00b459eb899135e374b19ee8ebec14be0f0;hpb=d550133ad7afdf65c5e284c2bcf67a5bdde6faa7;p=SXSI%2Fxpathcomp.git diff --git a/OCamlDriver.cpp b/OCamlDriver.cpp index e2c6f00..0d0a24c 100644 --- a/OCamlDriver.cpp +++ b/OCamlDriver.cpp @@ -24,7 +24,7 @@ extern "C" { #include #include #include - +#include "results.h" #define CAMLRAISEMSG(msg) (caml_raise_with_string(*cpp_exception,(msg) )) #define NOT_IMPLEMENTED(s) (caml_failwith(s)) @@ -157,7 +157,7 @@ extern "C" CAMLprim value caml_text_collection_get_text(value tree, value id){ extern "C" CAMLprim value caml_text_collection_get_cached_text(value tree, value id){ CAMLparam2(tree,id); CAMLlocal1(str); - char* txt = (char*) XMLTREE(tree)->GetCachedText((DocID) Int_val(id)); + char* txt = (char*) XMLTREE(tree)->GetText((DocID) Int_val(id)); str = caml_copy_string(txt); free(txt); CAMLreturn (str); @@ -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)))); +} + +