#include <caml/fail.h>
#include <caml/custom.h>
#include "results.h"
+#include <stdio.h>
#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<int>*)((* (XMLTree**) Data_custom_val(x))))
+#define HSET(x) ((std::unordered_set<int>*)((* (std::unordered_set<int>**) Data_custom_val(x))))
#define TEXTCOLLECTION(x)
#define TREENODEVAL(i) ((treeNode) (Int_val(i)))
#define XMLTREE_ROOT 0
catch (char const * msg){ CAMLRAISEMSG(msg); };
}
-
-
extern "C" CAMLprim value caml_text_collection_get_text(value tree, value id){
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);
}
CAMLlocal1(str);
char* txt = (char*) XMLTREE(tree)->GetText((DocID) Int_val(id));
str = caml_copy_string(txt);
- free(txt);
CAMLreturn (str);
}
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))));
+ 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){
}
extern "C" CAMLprim value caml_xml_tree_next_element(value tree, value id){
- return(Val_int (XMLTREE(tree)->NextSibling(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){
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)))));
}
+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)))));
}
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);
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){
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);
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);
+}
+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));
+}
+