X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=OCamlDriver.cpp;h=5b7e0b6ddf885706c06e42d365b4ea08322f77d5;hb=70ff0bfc463882ecf233f1b1a7ac4a8007fa4cc2;hp=78d3e15de8ceb4e53bcc9069a394f44ac16fd570;hpb=f98a8d98d86941a885f492d5cc134e34989c198a;p=SXSI%2Fxpathcomp.git diff --git a/OCamlDriver.cpp b/OCamlDriver.cpp index 78d3e15..5b7e0b6 100644 --- a/OCamlDriver.cpp +++ b/OCamlDriver.cpp @@ -49,6 +49,7 @@ extern "C" { #define XMLTREE(x) ((XMLTree *)(* (XMLTree**) Data_custom_val(x))) #define TEXTCOLLECTION(x) #define TREENODEVAL(i) ((treeNode) (Int_val(i))) +#define XMLTREE_ROOT 0 extern "C" { static struct custom_operations ops; @@ -143,7 +144,7 @@ void traversal_rec(XMLTree* tree, treeNode id){ extern "C" CAMLprim value caml_cpp_traversal(value tree){ CAMLparam1(tree); - traversal_rec(XMLTREE(tree),XMLTREE(tree)->Root()); + traversal_rec(XMLTREE(tree),XMLTREE_ROOT); CAMLreturn(Val_unit); } @@ -219,7 +220,7 @@ extern "C" CAMLprim value caml_text_collection_unsorted_contains(value tree,valu extern "C" CAMLprim value caml_xml_tree_root(value tree){ CAMLparam1(tree); - CAMLreturn (Val_int(TREENODEVAL(XMLTREE(tree)->Root()))); + CAMLreturn (Val_int(TREENODEVAL(XMLTREE_ROOT))); } extern "C" CAMLprim value caml_xml_tree_text_collection(value tree){ CAMLparam1(tree); @@ -276,6 +277,17 @@ extern "C" CAMLprim value caml_xml_tree_first_child(value tree, value id){ CAMLreturn(Val_int (XMLTREE(tree)->FirstChild(TREENODEVAL(id)))); } +extern "C" CAMLprim value caml_xml_tree_tagged_child(value tree, value id, value tag){ + CAMLparam3(tree,id,tag); + CAMLreturn(Val_int (XMLTREE(tree)->TaggedChild(TREENODEVAL(id),Int_val(tag)))); +} + +extern "C" CAMLprim value caml_xml_tree_tagged_sibling(value tree, value id, value tag){ + CAMLparam3(tree,id,tag); + CAMLreturn(Val_int (XMLTREE(tree)->TaggedFollSibling(TREENODEVAL(id),Int_val(tag)))); +} + + extern "C" CAMLprim value caml_xml_tree_is_leaf(value tree, value id){ CAMLparam2(tree,id); CAMLreturn(Val_bool (XMLTREE(tree)->IsLeaf(TREENODEVAL(id)))); @@ -397,14 +409,45 @@ extern "C" CAMLprim value caml_int_vector_alloc(value len){ } extern "C" CAMLprim value caml_int_vector_set(value vec, value i, value v){ - CAMLparam3(vec,i,v); - + CAMLparam3(vec,i,v); ((int*) vec)[Int_val(i)+1] = Int_val(v); CAMLreturn (Val_unit); } #define VECT(x) ((int*) (x)) +extern "C" CAMLprim value caml_xml_tree_select_desc(value tree, value node, value tags){ + CAMLparam3(tree,node,tags); + + CAMLreturn (Val_int (XMLTREE(tree)->SelectDesc(TREENODEVAL(node), + &(VECT(tags)[1]), + VECT(tags)[0]))); +} +extern "C" CAMLprim value caml_xml_tree_select_child(value tree, value node, value tags){ + CAMLparam3(tree,node,tags); + + CAMLreturn (Val_int (XMLTREE(tree)->SelectChild(TREENODEVAL(node), + &(VECT(tags)[1]), + VECT(tags)[0]))); +} +extern "C" CAMLprim value caml_xml_tree_select_foll_sibling(value tree, value node, value tags){ + CAMLparam3(tree,node,tags); + + CAMLreturn (Val_int (XMLTREE(tree)->SelectFollSibling(TREENODEVAL(node), + &(VECT(tags)[1]), + VECT(tags)[0]))); +} +extern "C" CAMLprim value caml_xml_tree_select_foll_below(value tree, value node, value tags,value ctx){ + CAMLparam4(tree,node,tags,ctx); + + CAMLreturn (Val_int (XMLTREE(tree)->SelectFollBelow(TREENODEVAL(node), + &(VECT(tags)[1]), + VECT(tags)[0],Int_val(ctx)))); +} + + + +/* extern "C" CAMLprim value caml_xml_tree_select_below(value tree, value node, value ctags, value dtags){ CAMLparam4(tree,node,ctags,dtags); @@ -414,8 +457,9 @@ extern "C" CAMLprim value caml_xml_tree_select_below(value tree, value node, val VECT(ctags)[0], &(VECT(dtags)[1]), VECT(dtags)[0])))); -} - + } +*/ +/* extern "C" CAMLprim value caml_xml_tree_select_next(value tree, value node, value ctags, value ftags,value root){ CAMLparam5(tree,node,ctags,ftags,root); CAMLreturn (Val_int ( @@ -426,7 +470,8 @@ extern "C" CAMLprim value caml_xml_tree_select_next(value tree, value node, valu VECT(ftags)[0], TREENODEVAL(root))))); } - +*/ +/* extern "C" CAMLprim value caml_xml_tree_select_desc_only(value tree, value node,value dtags){ CAMLparam3(tree,node,dtags); @@ -453,7 +498,7 @@ extern "C" CAMLprim value caml_xml_tree_select_desc_or_foll_only(value tree, val VECT(ftags)[0], TREENODEVAL(root))))); } - +*/ extern "C" CAMLprim value caml_xml_tree_doc_ids(value tree, value node){ CAMLparam2(tree,node); CAMLlocal1(tuple);