.
[SXSI/xpathcomp.git] / OCamlDriver.cpp
index 1898d5a..490e007 100644 (file)
@@ -17,9 +17,9 @@ extern "C" {
 #include <caml/fail.h>
 } //extern C
 
+#include "TextCollection/TextCollection.h"
 #include "XMLDocShredder.h"
 #include "XMLTree.h"
-#include "TextCollection/TextCollection.h"
 #include "Utils.h"
 
 #define CAMLRAISECPP(e) (caml_failwith( ((e).what())))
@@ -67,12 +67,51 @@ extern "C" CAMLprim value caml_call_shredder_string(value data){
   };
 }
 
+void traversal_rec(XMLTree* tree, treeNode id){
+  if (id == NULLT)
+    return;
+  char * tag = (char*)tree->GetTagName(tree->Tag(id));
+  if (id) {
+  DocID tid = tree->PrevText(id);
+  char * data = (char *) (tree->getTextCollection())->GetText(tid);
+  if (tree->IsLeaf(id)){
+    tid = tree->MyText(id);
+    data = (char*) (tree->getTextCollection())->GetText(tid);
+  };
+  
+  if (tree->NextSibling(id) == NULLT){
+    tid = tree->NextText(id);
+    data = (char*) (tree->getTextCollection())->GetText(tid);
+  };
+    }
+  traversal_rec(tree,tree->FirstChild(id));
+  traversal_rec(tree,tree->NextSibling(id));
+  return;
+}
+
+void traversal (XMLTree* tree){ 
+  traversal_rec(tree, tree->Root());
+  return;
+}
+
+
+extern "C" CAMLprim value caml_cpp_traversal(value tree){
+  CAMLparam1(tree);
+  traversal(XMLTREE(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)); 
   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_xml_tree_root(value tree){
   CAMLparam1(tree);
@@ -80,7 +119,7 @@ extern "C" CAMLprim value caml_xml_tree_root(value tree){
 }
 extern "C" CAMLprim value caml_xml_tree_text_collection(value tree){
   CAMLparam1(tree);
-  CAMLreturn((value) XMLTREE(tree)->GetTextCollection());
+  CAMLreturn((value) XMLTREE(tree)->getTextCollection());
 }
 
 extern "C" CAMLprim value caml_xml_tree_first_child(value tree, value id){