Basic stuff should be working, need to remove debugging instructions!
authorkim <kim@3cdefd35-fc62-479d-8e8d-bae585ffb9ca>
Thu, 27 Nov 2008 08:55:20 +0000 (08:55 +0000)
committerkim <kim@3cdefd35-fc62-479d-8e8d-bae585ffb9ca>
Thu, 27 Nov 2008 08:55:20 +0000 (08:55 +0000)
That's it for tonight.

git-svn-id: svn+ssh://idea.nguyen.vg/svn/sxsi/trunk/xpathcomp@19 3cdefd35-fc62-479d-8e8d-bae585ffb9ca

OCamlDriver.cpp
main.ml
tag.ml
tree.ml

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);
 }
diff --git a/main.ml b/main.ml
index 3c698cd..10fd915 100644 (file)
--- a/main.ml
+++ b/main.ml
@@ -21,12 +21,19 @@ let time f x =
 ;;
 let total_time () =  List.fold_left (+.) 0. !l;;
 
+let test filename query output = 
+  Printf.eprintf "Parsing document : %!";
+  let v = time Tree.Binary.parse_xml_uri filename in
+  Tree.Binary.print_xml_fast stderr v
+
+
 let main filename query output =
   Printf.eprintf "Parsing document : %!";
   let v = time Tree.Binary.parse_xml_uri filename in
     MM(v,__LOCATION__);
     a := Some (v);
     a := None;
+    Tree.Binary.print_xml_fast stderr v;
     Printf.eprintf "Parsing query : ";    
     let query = try
       time
@@ -65,5 +72,7 @@ then
   (prerr_endline ("usage : " ^ Sys.argv.(0) ^ " <document> \'query\'[ <output> ]");
    exit 1)
 ;;
-main Sys.argv.(1) Sys.argv.(2) (if argc == 4 then Some Sys.argv.(3) else None) ;;
+
+
+test Sys.argv.(1) Sys.argv.(2) (if argc == 4 then Some Sys.argv.(3) else None) ;; 
 
diff --git a/tag.ml b/tag.ml
index 2be3ee0..b692df7 100644 (file)
--- a/tag.ml
+++ b/tag.ml
@@ -89,5 +89,5 @@ struct
 
 end
 
-include HTag
+include STag
 let _ = Callback.register "caml_hash_tag" tag
diff --git a/tree.ml b/tree.ml
index aa35214..53872b3 100644 (file)
--- a/tree.ml
+++ b/tree.ml
@@ -238,9 +238,10 @@ struct
   struct
     type t (* pointer to the text collection *)
     (* Todo *)
-    
+    external nullt : unit -> [`Text ] node = "caml_xml_tree_nullt"
+    let nil = nullt ()
     external get_text : t -> [`Text] node -> string = "caml_text_collection_get_text"
-    let is_empty t (n : [`Text] node) = "" = (get_text t n)
+    let is_empty _ (n : [`Text] node) = equal nil n
 
     end
   module Tree =