X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=OCamlDriver.cpp;h=a57e0c6c7ab04f692aa852d8b10ba4e303935674;hb=be1caa5c46009c13241cc48ed34a36ee2936ef87;hp=9df73d608bffb330c9c90a664aacb2cd494f27cd;hpb=6a7025fee3c050eff58baa536a14d80baf5c1b87;p=SXSI%2Fxpathcomp.git diff --git a/OCamlDriver.cpp b/OCamlDriver.cpp index 9df73d6..a57e0c6 100644 --- a/OCamlDriver.cpp +++ b/OCamlDriver.cpp @@ -29,7 +29,7 @@ extern "C" { #define CAMLRAISEMSG(msg) (caml_raise_with_string(*cpp_exception,(msg) )) #define NOT_IMPLEMENTED(s) (caml_failwith(s)) #define XMLTREE(x) ((XMLTree *)(* (XMLTree**) Data_custom_val(x))) -#define HSET(x) ((std::unordered_set*)((* (XMLTree**) Data_custom_val(x)))) +#define HSET(x) ((std::unordered_set*)((* (std::unordered_set**) Data_custom_val(x)))) #define TEXTCOLLECTION(x) #define TREENODEVAL(i) ((treeNode) (Int_val(i))) #define XMLTREE_ROOT 0 @@ -248,6 +248,13 @@ extern "C" CAMLprim value caml_xml_tree_is_first_child(value tree, value id){ extern "C" CAMLprim value caml_xml_tree_first_child(value tree, value id){ return(Val_int (XMLTREE(tree)->FirstChild(TREENODEVAL(id)))); } +extern "C" CAMLprim value caml_xml_tree_closing(value tree, value id){ + return(Val_int (XMLTREE(tree)->Closing(TREENODEVAL(id)))); +} +extern "C" CAMLprim value caml_xml_tree_is_open(value tree, value id){ + return(Val_bool (XMLTREE(tree)->IsOpen(TREENODEVAL(id)))); +} + extern "C" CAMLprim value caml_xml_tree_first_element(value tree, value id){ return(Val_int (XMLTREE(tree)->FirstElement(TREENODEVAL(id)))); } @@ -285,12 +292,14 @@ extern "C" CAMLprim value caml_xml_tree_tagged_foll_below(value tree, value id, return(Val_int (XMLTREE(tree)->TaggedFollBelow(TREENODEVAL(id),(TagType) Int_val(tag),TREENODEVAL(root)))); } - - extern "C" CAMLprim value caml_xml_tree_my_text(value tree, value id){ return(Val_int((XMLTREE(tree)->MyText(TREENODEVAL(id))))); } +extern "C" CAMLprim value caml_xml_tree_my_text_unsafe(value tree, value id){ + return(Val_int((XMLTREE(tree)->MyTextUnsafe(TREENODEVAL(id))))); +} + extern "C" CAMLprim value caml_xml_tree_text_xml_id(value tree, value id){ return(Val_int((XMLTREE(tree)->TextXMLId(TREENODEVAL(id))))); } @@ -320,6 +329,10 @@ 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_subtree_elements(value tree,value id){ + return (Val_int(XMLTREE(tree)->SubtreeElements(TREENODEVAL(id)))); +} + extern "C" CAMLprim value caml_xml_tree_register_tag(value tree,value str){ CAMLparam2(tree,str); @@ -382,31 +395,38 @@ extern "C" CAMLprim value caml_xml_tree_doc_ids(value tree, value node){ CAMLreturn (tuple); } -extern "C" CAMLprim value caml_result_set_create(value size){ - CAMLparam1(size); +extern "C" value caml_result_set_create(value size){ results* res = (results*) malloc(sizeof(results)); - results r = createResults (Int_val(size)); + results r = createResults (Int_val(size)); res->n = r.n; res->lgn = r.lgn; res->tree = r.tree; - CAMLreturn ((value) (res)); + return ((value) (res)); } extern "C" CAMLprim value caml_result_set_set(value result,value p){ - CAMLparam2(result,p); + CAMLparam1(p); + results r; 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); + CAMLparam2(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)))); + CAMLparam1(p); + results r; + r = *( (results *) result); + CAMLreturn (Val_int(nextResult(r, Int_val(p)))); } +extern "C" CAMLprim value caml_xml_tree_print(value tree,value node,value fd){ + CAMLparam3(tree,node,fd); + XMLTREE(tree)->Print(Int_val(fd),TREENODEVAL(node)); + CAMLreturn(Val_unit); +}