X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=OCamlDriver.cpp;h=09175ba1c3dff3d84f81c9b05d9345c4ae2248fa;hb=4680fa5b41156d70f0fde69981f0d241184b19d9;hp=38d660b13f4cad84e49287e3b14e9e6c8f588e51;hpb=eebef30070a951d852ce5811b289d8131a5300eb;p=SXSI%2Fxpathcomp.git diff --git a/OCamlDriver.cpp b/OCamlDriver.cpp index 38d660b..09175ba 100644 --- a/OCamlDriver.cpp +++ b/OCamlDriver.cpp @@ -125,10 +125,23 @@ extern "C" CAMLprim value caml_cpp_traversal(value tree){ } extern "C" CAMLprim value caml_text_collection_get_text(value tree, value id){ - CAMLparam2(tree,id); - const char* txt = (const char*) (XMLTREE(tree)->GetText((DocID) Int_val(id))); - CAMLreturn (caml_copy_string(txt)); + CAMLparam2(tree,id); + CAMLlocal1(str); + uchar* txt = XMLTREE(tree)->GetText((DocID) Int_val(id)); + str = caml_copy_string((const char*)txt); + delete (txt); + CAMLreturn (str); +} + +extern "C" CAMLprim value caml_text_collection_get_cached_text(value tree, value id){ + CAMLparam2(tree,id); + CAMLlocal1(str); + const char* txt = (const char*) XMLTREE(tree)->GetCachedText((DocID) Int_val(id)); + str = caml_copy_string(txt); + CAMLreturn (str); } + + extern "C" CAMLprim value caml_text_collection_empty_text(value tree,value id){ CAMLparam2(tree,id); CAMLreturn ( Val_int((XMLTREE(tree))->EmptyText((DocID) Int_val(id)))); @@ -153,7 +166,7 @@ extern "C" CAMLprim value caml_text_collection_contains(value tree,value str){ uchar * cstr = (uchar *) String_val(str); std::vector results; results = XMLTREE(tree)->Contains(cstr); - + //free(cstr); resarray = caml_alloc_tuple(results.size()); for (unsigned int i=0; iParentNode(TREENODEVAL(id)))); + CAMLreturn(Val_int (XMLTREE(tree)->ParentNode((DocID) Int_val(id)))); } extern "C" CAMLprim value caml_xml_tree_is_ancestor(value tree,value id1, value id2) { @@ -208,6 +221,25 @@ extern "C" CAMLprim value caml_xml_tree_is_leaf(value tree, value id){ CAMLreturn(Val_bool (XMLTREE(tree)->IsLeaf(TREENODEVAL(id)))); } +extern "C" CAMLprim value caml_xml_tree_tagged_desc(value tree, value id, value tag){ + CAMLparam3(tree,id,tag); + CAMLreturn(Val_int (XMLTREE(tree)->TaggedDesc(TREENODEVAL(id),(TagType) Int_val(tag)))); +} + +extern "C" CAMLprim value caml_xml_tree_tagged_next(value tree, value id, value tag){ + CAMLparam3(tree,id,tag); + CAMLreturn(Val_int (XMLTREE(tree)->TaggedNext(TREENODEVAL(id),(TagType) Int_val(tag)))); +} + + + + +extern "C" CAMLprim value caml_xml_tree_tagged_foll(value tree, value id, value tag){ + CAMLparam3(tree,id,tag); + CAMLreturn(Val_int (XMLTREE(tree)->TaggedFoll(TREENODEVAL(id),(TagType) Int_val(tag)))); +} + + extern "C" CAMLprim value caml_xml_tree_next_sibling(value tree, value id){ CAMLparam2(tree,id); CAMLreturn(Val_int (XMLTREE(tree)->NextSibling(TREENODEVAL(id)))); @@ -236,20 +268,14 @@ extern "C" CAMLprim value caml_xml_tree_node_xml_id(value tree, value id){ CAMLparam2(tree,id); CAMLreturn(Val_int((XMLTREE(tree)->NodeXMLId(TREENODEVAL(id))))); } -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))); - - CAMLreturn (caml_copy_string(tag)); -} extern "C" CAMLprim value caml_xml_tree_tag_name(value tree, value tagid){ CAMLparam2(tree,tagid); - const char* tag; - tag = (const char*) XMLTREE(tree)->GetTagName((TagType) (Int_val(tagid))); - - CAMLreturn (caml_copy_string(tag)); + CAMLlocal1(str); + char* tag; + tag = (char*) XMLTREE(tree)->GetTagNameByRef((TagType) (Int_val(tagid))); + str = caml_copy_string((const char*) tag); + CAMLreturn (str); } @@ -258,6 +284,12 @@ extern "C" CAMLprim value caml_xml_tree_tag_id(value tree,value id){ CAMLreturn (Val_int(XMLTREE(tree)->Tag(TREENODEVAL(id)))); } +extern "C" CAMLprim value caml_xml_tree_subtree_tags(value tree,value id,value tag){ + CAMLparam3(tree,id,tag); + CAMLreturn (Val_int(XMLTREE(tree)->SubtreeTags(TREENODEVAL(id),Int_val(tag)))); +} + + extern "C" CAMLprim value caml_xml_tree_register_tag(value tree,value str){ CAMLparam2(tree,str); CAMLlocal1(id); @@ -271,3 +303,20 @@ extern "C" CAMLprim value caml_xml_tree_nullt(value unit){ CAMLparam1(unit); CAMLreturn (NULLT); } + +extern "C" CAMLprim value caml_xml_tree_save(value tree,value filename){ + CAMLparam2(tree,filename); + XMLTREE(tree)->Save((unsigned char *) String_val(filename)); + CAMLreturn (Val_unit); +} + +extern "C" CAMLprim value caml_xml_tree_load(value filename,value samplerate){ + CAMLparam2(filename,samplerate); + CAMLlocal1(doc); + XMLTree * tree; + tree = XMLTree::Load((unsigned char *) String_val(filename),Int_val(samplerate)); + caml_init_ops(); + doc = caml_alloc_custom(&ops,sizeof(XMLTree*),1,2); + memcpy(Data_custom_val(doc),&tree,sizeof(XMLTree*)); + CAMLreturn(doc); +}