X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=OCamlDriver.cpp;h=1c50a7b6c4be5597750b6ffd1777636aceef55ec;hb=705a37f90b2161deaae7d99cc6c95700613e2cb2;hp=48925b6cb3f117a7a22524acb2a3a3b2c5080a14;hpb=9c9764f2217221c6b2282d353233da958955cb97;p=SXSI%2Fxpathcomp.git diff --git a/OCamlDriver.cpp b/OCamlDriver.cpp index 48925b6..1c50a7b 100644 --- a/OCamlDriver.cpp +++ b/OCamlDriver.cpp @@ -18,8 +18,15 @@ extern "C" { } //extern C #include "XMLDocShredder.h" +#include "XMLTree.h" +#include "TextCollection/TextCollection.h" +#include "Utils.h" + #define CAMLRAISECPP(e) (caml_failwith( ((e).what()))) -#define NOT_IMPLEMENTED (caml_failwith("Not Implemented!!!")) +#define NOT_IMPLEMENTED(s) (caml_failwith(s)) +#define XMLTREE(x) ((XMLTree *)(x)) +#define TEXTCOLLECTION(x) +#define TREENODEVAL(i) ((treeNode) (Int_val(i))) extern "C" CAMLprim value caml_call_shredder_uri(value uri){ CAMLparam1(uri); @@ -60,75 +67,73 @@ extern "C" CAMLprim value caml_call_shredder_string(value data){ }; } -extern "C" CAMLprim value caml_text_collection_get_text(value tree, value id){ - CAMLparam2(tree,id); - - NOT_IMPLEMENTED; - CAMLreturn (Val_unit); +extern "C" CAMLprim value caml_text_collection_get_text(value tc, value id){ + CAMLparam2(tc,id); + + const char* txt = (const char*) ((TextCollection*) tc)->GetText((DocID) Int_val(id)); + CAMLreturn (caml_copy_string(txt)); } + extern "C" CAMLprim value caml_xml_tree_root(value tree){ CAMLparam1(tree); - - NOT_IMPLEMENTED; - CAMLreturn (Val_unit); + CAMLreturn (TREENODEVAL(XMLTREE(tree)->Root())); +} +extern "C" CAMLprim value caml_xml_tree_text_collection(value tree){ + CAMLparam1(tree); + CAMLreturn((value) XMLTREE(tree)->GetTextCollection()); } -extern "C" CAMLprim value caml_xml_tree_text_collection(value tree, value id){ - CAMLparam2(tree,id); - NOT_IMPLEMENTED; - CAMLreturn (Val_unit); +extern "C" CAMLprim value caml_xml_tree_first_child(value tree, value id){ + CAMLparam2(tree,id); + CAMLlocal1(res); + DPRINT("BEFORE!!!"); + DPRINT(XMLTREE(tree)->flag); + DPRINT("ID is " << Int_val(id)); + res = Val_int (XMLTREE(tree)->FirstChild(TREENODEVAL(id))); + DPRINT("AFTER!!!" << Int_val(res)); + CAMLreturn(res); } extern "C" CAMLprim value caml_xml_tree_next_sibling(value tree, value id){ CAMLparam2(tree,id); - - NOT_IMPLEMENTED; - CAMLreturn (Val_unit); + CAMLreturn(Val_int (XMLTREE(tree)->NextSibling(TREENODEVAL(id)))); } -extern "C" CAMLprim value caml_xml_tree_first_child(value tree, value id){ - CAMLparam2(tree,id); - NOT_IMPLEMENTED; - CAMLreturn (Val_unit); -} extern "C" CAMLprim value caml_xml_tree_prev_text(value tree, value id){ CAMLparam2(tree,id); - - NOT_IMPLEMENTED; - CAMLreturn (Val_unit); + CAMLlocal1(res); + res = Val_int((XMLTREE(tree)->PrevText(TREENODEVAL(id)))); + cerr << "AFTER PREV TEXT" << Int_val(res); + CAMLreturn(res); } extern "C" CAMLprim value caml_xml_tree_next_text(value tree, value id){ CAMLparam2(tree,id); - - NOT_IMPLEMENTED; - CAMLreturn (Val_unit); + CAMLreturn(Val_int((XMLTREE(tree)->NextText(TREENODEVAL(id))))); } extern "C" CAMLprim value caml_xml_tree_my_text(value tree, value id){ CAMLparam2(tree,id); - - NOT_IMPLEMENTED; - CAMLreturn (Val_unit); + CAMLreturn(Val_int((XMLTREE(tree)->MyText(TREENODEVAL(id))))); } extern "C" CAMLprim value caml_xml_tree_text_xml_id(value tree, value id){ CAMLparam2(tree,id); - NOT_IMPLEMENTED; + NOT_IMPLEMENTED("caml_xml_tree_text_xml_id"); CAMLreturn (Val_unit); } extern "C" CAMLprim value caml_xml_tree_node_xml_id(value tree, value id){ CAMLparam2(tree,id); - NOT_IMPLEMENTED; + NOT_IMPLEMENTED("caml_xml_tree_node_xml_id"); CAMLreturn (Val_unit); } extern "C" CAMLprim value caml_xml_tree_tag(value tree, value id){ CAMLparam2(tree,id); + const char* tag; + tag =(const char*) XMLTREE(tree)->GetTagName(XMLTREE(tree)->Tag(TREENODEVAL(id))); - NOT_IMPLEMENTED; - CAMLreturn (Val_unit); + CAMLreturn (caml_copy_string(tag)); } extern "C" CAMLprim value caml_xml_tree_nullt(value unit){ CAMLparam1(unit); - CAMLreturn (Val_int(-1)); - + CAMLreturn (NULLT); }