Eta expand (land) and (lor) to fun a b -> a land b
[SXSI/xpathcomp.git] / OCamlDriver.cpp
index 636a952..c906f0f 100644 (file)
@@ -17,7 +17,7 @@ extern "C" {
 #include <caml/fail.h>
 } //extern C
 
-#include "TextCollection/TextCollection.h"
+//#include "TextCollection/TextCollection.h"
 #include "XMLDocShredder.h"
 #include "XMLTree.h"
 #include "Utils.h"
@@ -71,7 +71,7 @@ void traversal_rec(XMLTree* tree, treeNode id){
  DocID tid; 
   if (id == NULLT)
     return;
-  int tag = tree->Tag(id);
+  //  int tag = tree->Tag(id);
    if (id) {
         tid = tree->PrevText(id);
        char * data = (char *) (tree->getTextCollection())->GetText(tid);
@@ -97,41 +97,39 @@ extern "C" CAMLprim value caml_cpp_traversal(value tree){
   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)); 
+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));
 }
-extern "C" CAMLprim value caml_text_collection_empty_text(value tc,value id){
-  CAMLparam2(tc,id);
-  CAMLreturn ( Val_int(((TextCollection*) tc)->EmptyText((DocID) Int_val(id))));
+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 tc,value str){
-  CAMLparam2(tc,str);
+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) ((TextCollection*) tc)->IsContains(cstr)));
+  CAMLreturn ( Val_bool((int) XMLTREE(tree)->IsContains(cstr)));
 }
 
-extern "C" CAMLprim value caml_text_collection_count_contains(value tc,value str){
-  CAMLparam2(tc,str);
+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(((TextCollection*) tc)->CountContains(cstr)));
+  CAMLreturn (Val_int((XMLTREE(tree)->CountContains(cstr))));
   
 }
 
-extern "C" CAMLprim value caml_text_collection_contains(value tc,value str){
-  CAMLparam2(tc,str);
+extern "C" CAMLprim value caml_text_collection_contains(value tree,value str){
+  CAMLparam2(tree,str);
   CAMLlocal1(resarray);
   uchar * cstr = (uchar *) String_val(str);  
   std::vector<DocID> results;
-  results = ((TextCollection*) tc)->Contains(cstr);
+  results = XMLTREE(tree)->Contains(cstr);
 
   resarray = caml_alloc_tuple(results.size());
 
-  for (int i=0; i<results.size();i++){
+  for (unsigned int i=0; i<results.size();i++){
     caml_initialize(&Field(resarray,i),Val_int(results[i]));
   };
   CAMLreturn (resarray);  
@@ -219,12 +217,20 @@ extern "C" CAMLprim value caml_xml_tree_tag(value tree, value id){
   CAMLreturn (caml_copy_string(tag));
 }
 extern "C" CAMLprim value caml_xml_tree_tag_id(value tree,value id){
-  CAMLparam2(tree,id);
-  
-  int tag =XMLTREE(tree)->Tag(TREENODEVAL(id));
+  CAMLparam2(tree,id);  
+  CAMLreturn (Val_int(XMLTREE(tree)->Tag(TREENODEVAL(id))));
+}
 
-  CAMLreturn (Val_unit);
+extern "C" CAMLprim value caml_xml_tree_register_tag(value tree,value str){
+  CAMLparam2(tree,str);
+  CAMLlocal1(id);
+  unsigned char* tag;
+  tag = (unsigned char*) (String_val(str));
+  id = Val_int(XMLTREE(tree)->RegisterTag(tag));
+  free(tag);
+  CAMLreturn (id);
 }
+
 extern "C" CAMLprim value caml_xml_tree_nullt(value unit){
   CAMLparam1(unit);
   CAMLreturn (NULLT);