Basic stuff should be working, need to remove debugging instructions!
[SXSI/xpathcomp.git] / OCamlDriver.cpp
index 48925b6..1c50a7b 100644 (file)
@@ -18,8 +18,15 @@ extern "C" {
 } //extern C
 
 #include "XMLDocShredder.h"
+#include "XMLTree.h"
+#include "TextCollection/TextCollection.h"
+#include "Utils.h"
+
 #define CAMLRAISECPP(e) (caml_failwith( ((e).what())))
-#define NOT_IMPLEMENTED  (caml_failwith("Not Implemented!!!"))
+#define NOT_IMPLEMENTED(s)  (caml_failwith(s))
+#define XMLTREE(x) ((XMLTree *)(x))
+#define TEXTCOLLECTION(x)
+#define TREENODEVAL(i) ((treeNode) (Int_val(i)))
 
 extern "C" CAMLprim value caml_call_shredder_uri(value uri){
   CAMLparam1(uri);
@@ -60,75 +67,73 @@ extern "C" CAMLprim value caml_call_shredder_string(value data){
   };
 }
 
-extern "C" CAMLprim value caml_text_collection_get_text(value tree, value id){
-  CAMLparam2(tree,id);
-
-  NOT_IMPLEMENTED;
-  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_xml_tree_root(value tree){
   CAMLparam1(tree);
-
-  NOT_IMPLEMENTED;
-  CAMLreturn (Val_unit);
+  CAMLreturn (TREENODEVAL(XMLTREE(tree)->Root()));
+}
+extern "C" CAMLprim value caml_xml_tree_text_collection(value tree){
+  CAMLparam1(tree);
+  CAMLreturn((value) XMLTREE(tree)->GetTextCollection());
 }
-extern "C" CAMLprim value caml_xml_tree_text_collection(value tree, value id){
-  CAMLparam2(tree,id);
 
-  NOT_IMPLEMENTED;
-  CAMLreturn (Val_unit);
+extern "C" CAMLprim value caml_xml_tree_first_child(value tree, value id){
+  CAMLparam2(tree,id);
+  CAMLlocal1(res);
+  DPRINT("BEFORE!!!");
+  DPRINT(XMLTREE(tree)->flag);
+  DPRINT("ID is " << Int_val(id));
+  res = Val_int (XMLTREE(tree)->FirstChild(TREENODEVAL(id)));
+  DPRINT("AFTER!!!" << Int_val(res));
+  CAMLreturn(res);
 }
 extern "C" CAMLprim value caml_xml_tree_next_sibling(value tree, value id){
   CAMLparam2(tree,id);
-
-  NOT_IMPLEMENTED;
-  CAMLreturn (Val_unit);
+  CAMLreturn(Val_int (XMLTREE(tree)->NextSibling(TREENODEVAL(id))));
 }
-extern "C" CAMLprim value caml_xml_tree_first_child(value tree, value id){
-  CAMLparam2(tree,id);
 
-  NOT_IMPLEMENTED;
-  CAMLreturn (Val_unit);
-}
 extern "C" CAMLprim value caml_xml_tree_prev_text(value tree, value id){
   CAMLparam2(tree,id);
-
-  NOT_IMPLEMENTED;
-  CAMLreturn (Val_unit);
+  CAMLlocal1(res);
+  res = Val_int((XMLTREE(tree)->PrevText(TREENODEVAL(id))));
+  cerr << "AFTER PREV TEXT" << Int_val(res);
+  CAMLreturn(res);
 }
 extern "C" CAMLprim value caml_xml_tree_next_text(value tree, value id){
   CAMLparam2(tree,id);
-
-  NOT_IMPLEMENTED;
-  CAMLreturn (Val_unit);
+  CAMLreturn(Val_int((XMLTREE(tree)->NextText(TREENODEVAL(id)))));
 }
 extern "C" CAMLprim value caml_xml_tree_my_text(value tree, value id){
   CAMLparam2(tree,id);
-
-  NOT_IMPLEMENTED;
-  CAMLreturn (Val_unit);
+  CAMLreturn(Val_int((XMLTREE(tree)->MyText(TREENODEVAL(id)))));
 }
 
 extern "C" CAMLprim value caml_xml_tree_text_xml_id(value tree, value id){
   CAMLparam2(tree,id);
 
-  NOT_IMPLEMENTED;
+  NOT_IMPLEMENTED("caml_xml_tree_text_xml_id");
   CAMLreturn (Val_unit);
 }
 extern "C" CAMLprim value caml_xml_tree_node_xml_id(value tree, value id){
   CAMLparam2(tree,id);
 
-  NOT_IMPLEMENTED;
+  NOT_IMPLEMENTED("caml_xml_tree_node_xml_id");
   CAMLreturn (Val_unit);
 }
 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)));
 
-  NOT_IMPLEMENTED;
-  CAMLreturn (Val_unit);
+  CAMLreturn (caml_copy_string(tag));
 }
 extern "C" CAMLprim value caml_xml_tree_nullt(value unit){
   CAMLparam1(unit);
-  CAMLreturn (Val_int(-1));
-
+  CAMLreturn (NULLT);
 }