X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=OCamlDriver.cpp;h=85cc8137155f39ebab0e66bfb1a71df4b1d1b907;hb=329088598ab63bc2d67ff0dfc4f54e90f5d4f283;hp=a57e0c6c7ab04f692aa852d8b10ba4e303935674;hpb=f067dedce5a6b8386010aec45475ad42d24f1d5b;p=SXSI%2Fxpathcomp.git diff --git a/OCamlDriver.cpp b/OCamlDriver.cpp index a57e0c6..85cc813 100644 --- a/OCamlDriver.cpp +++ b/OCamlDriver.cpp @@ -25,6 +25,7 @@ extern "C" { #include #include #include "results.h" +#include #define CAMLRAISEMSG(msg) (caml_raise_with_string(*cpp_exception,(msg) )) #define NOT_IMPLEMENTED(s) (caml_failwith(s)) @@ -143,8 +144,6 @@ extern "C" CAMLprim value caml_xml_tree_load(value fd){ catch (char const * msg){ CAMLRAISEMSG(msg); }; } - - extern "C" CAMLprim value caml_text_collection_get_text(value tree, value id){ CAMLparam2(tree,id); CAMLlocal1(str); @@ -256,7 +255,7 @@ extern "C" CAMLprim value caml_xml_tree_is_open(value tree, value id){ } extern "C" CAMLprim value caml_xml_tree_first_element(value tree, value id){ - return(Val_int (XMLTREE(tree)->FirstElement(TREENODEVAL(id)))); + return(Val_int (XMLTREE(Field(tree,0))->FirstElement(TREENODEVAL(id)))); } extern "C" CAMLprim value caml_xml_tree_tagged_child(value tree, value id, value tag){ @@ -268,7 +267,7 @@ extern "C" CAMLprim value caml_xml_tree_next_sibling(value tree, value id){ } extern "C" CAMLprim value caml_xml_tree_next_element(value tree, value id){ - return(Val_int (XMLTREE(tree)->NextElement(TREENODEVAL(id)))); + return(Val_int (XMLTREE(Field(tree,0))->NextElement(TREENODEVAL(id)))); } extern "C" CAMLprim value caml_xml_tree_tagged_sibling(value tree, value id, value tag){ @@ -291,6 +290,9 @@ extern "C" CAMLprim value caml_xml_tree_tagged_foll(value tree, value id, value extern "C" CAMLprim value caml_xml_tree_tagged_foll_below(value tree, value id, value tag,value root){ return(Val_int (XMLTREE(tree)->TaggedFollBelow(TREENODEVAL(id),(TagType) Int_val(tag),TREENODEVAL(root)))); } +extern "C" CAMLprim value caml_xml_tree_tagged_foll_before(value tree, value id, value tag,value root){ + return(Val_int (XMLTREE(tree)->TaggedFollBefore(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))))); @@ -383,6 +385,11 @@ extern "C" CAMLprim value caml_xml_tree_select_foll_below(value tree, value node HSET(tags), TREENODEVAL(ctx)))); } +extern "C" CAMLprim value caml_xml_tree_select_foll_before(value tree, value node, value tags,value ctx){ + return (Val_int (XMLTREE(tree)->SelectFollBelow(TREENODEVAL(node), + HSET(tags), + TREENODEVAL(ctx)))); +} extern "C" CAMLprim value caml_xml_tree_doc_ids(value tree, value node){ @@ -406,7 +413,6 @@ extern "C" value caml_result_set_create(value size){ extern "C" CAMLprim value caml_result_set_set(value result,value p){ CAMLparam1(p); - results r; setResult ( *((results*) result), Int_val(p)); CAMLreturn (Val_unit); } @@ -430,3 +436,21 @@ extern "C" CAMLprim value caml_xml_tree_print(value tree,value node,value fd){ CAMLreturn(Val_unit); } +extern "C" CAMLprim value caml_set_tag_bits(value result, value tag, value tree, value node) +{ + CAMLparam3(tag,tree,node); + results r; + XMLTree *t = XMLTREE(Field(tree,0)); + treeNode opening = TREENODEVAL(node); + treeNode closing = t->Closing(opening); + TagType target_tag = Int_val(tag); + treeNode first = t->TaggedDesc(opening,target_tag); + r = *( (results *) result); + opening = first; + while (opening != NULLT){ + setResult(r,opening); + opening = t->TaggedFollBefore(opening,target_tag,closing); + }; + CAMLreturn(Val_int(first)); +} +