From: kim Date: Thu, 27 Nov 2008 08:55:20 +0000 (+0000) Subject: Basic stuff should be working, need to remove debugging instructions! X-Git-Url: http://git.nguyen.vg/gitweb/?a=commitdiff_plain;ds=sidebyside;h=705a37f90b2161deaae7d99cc6c95700613e2cb2;p=SXSI%2Fxpathcomp.git Basic stuff should be working, need to remove debugging instructions! That's it for tonight. git-svn-id: svn+ssh://idea.nguyen.vg/svn/sxsi/trunk/xpathcomp@19 3cdefd35-fc62-479d-8e8d-bae585ffb9ca --- diff --git a/OCamlDriver.cpp b/OCamlDriver.cpp index 48925b6..1c50a7b 100644 --- a/OCamlDriver.cpp +++ b/OCamlDriver.cpp @@ -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 --- 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) ^ " \'query\'[ ]"); 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 --- 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 --- 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 =