+extern "C" CAMLprim value caml_xml_tree_save(value tree,value fd){
+ CAMLparam2(tree,fd);
+ XMLTREE(tree)->Save(Int_val(fd));
+ CAMLreturn (Val_unit);
+}
+
+extern "C" CAMLprim value caml_xml_tree_load(value fd){
+ CAMLparam1(fd);
+ CAMLlocal1(doc);
+ XMLTree * tree;
+ try {
+ tree = XMLTree::Load(Int_val(fd));
+ doc = caml_alloc_custom(&ops,sizeof(XMLTree*),1,2);
+ memcpy(Data_custom_val(doc),&tree,sizeof(XMLTree*));
+ CAMLreturn(doc);
+ }
+ catch (const xmlpp::internal_error& e){ CAMLRAISEMSG(e.what()); }
+ catch (const std::exception& e){ CAMLRAISEMSG(e.what()); }
+ catch (string msg){ CAMLRAISEMSG(msg.c_str()); }
+ 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);
+}
+
+extern "C" CAMLprim value caml_text_collection_get_cached_text(value tree, value id){
+ CAMLparam2(tree,id);
+ CAMLlocal1(str);
+ char* txt = (char*) XMLTREE(tree)->GetCachedText((DocID) Int_val(id));
+ str = caml_copy_string(txt);
+ free(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))));
+}
+
+extern "C" CAMLprim value caml_text_collection_is_contains(value tree,value str){
+ CAMLparam2(tree,str);
+ uchar * cstr = (uchar *) String_val(str);
+ CAMLreturn ( Val_bool((int) XMLTREE(tree)->IsContains(cstr)));
+}
+
+extern "C" CAMLprim value caml_text_collection_count_contains(value tree,value str){
+ CAMLparam2(tree,str);
+ uchar * cstr = (uchar *) String_val(str);
+ CAMLreturn (Val_int((XMLTREE(tree)->CountContains(cstr))));
+
+}
+extern "C" CAMLprim value caml_text_collection_count(value tree,value str){
+ CAMLparam2(tree,str);
+ uchar * cstr = (uchar *) String_val(str);
+ CAMLreturn (Val_int((XMLTREE(tree)->Count(cstr))));
+ CAMLreturn (Val_unit);