X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=src%2Fxml-tree-builder_stub.cpp;fp=src%2Fxml-tree-builder_stub.cpp;h=6fc1c60bb2d5d21a7ceaed881fc1954361257ee4;hb=9d19c60e10c9572885509b35c2b72f362968d6ab;hp=0000000000000000000000000000000000000000;hpb=3c2dcd45ebe8d5c3134c8202efe329f76ffc0b8c;p=SXSI%2Fxpathcomp.git diff --git a/src/xml-tree-builder_stub.cpp b/src/xml-tree-builder_stub.cpp new file mode 100644 index 0000000..6fc1c60 --- /dev/null +++ b/src/xml-tree-builder_stub.cpp @@ -0,0 +1,84 @@ +#include "xml-tree-builder.hpp" +#include "common_stub.hpp" + +using namespace SXSI; + +static xml_tree_builder*& OBJ_VAL(value v) +{ + return Obj_val(v); +} + +extern "C" value caml_xml_tree_builder_create(value unit) +{ + CAMLparam1(unit); + CAMLlocal1(result); + result = sxsi_alloc_custom(); + OBJ_VAL(result) = new xml_tree_builder(); + + CAMLreturn(result); +} + +extern "C" value caml_xml_tree_builder_open_document(value vbuilder, + value vsrate, + value vdtc, + value vidxtype) +{ + CAMLparam4(vbuilder, vsrate, vdtc, vidxtype); + int sample_rate = Int_val(vsrate); + bool disable_tc = Bool_val(vdtc); + TextCollectionBuilder::index_type_t idx_type; + switch (Int_val(vidxtype)){ + case 0: + idx_type = TextCollectionBuilder::index_type_default; + break; + case 1: + idx_type = TextCollectionBuilder::index_type_swcsa; + break; + case 2: + idx_type = TextCollectionBuilder::index_type_rlcsa; + break; + default: + sxsi_raise_msg("Invalid Index Type"); + }; + + OBJ_VAL(vbuilder)->open_document(disable_tc, + sample_rate, + idx_type); + CAMLreturn (Val_unit); +} + +extern "C" value caml_xml_tree_builder_close_document(value vbuilder) +{ + CAMLparam1(vbuilder); + CAMLlocal1(result); + xml_tree *tree = OBJ_VAL(vbuilder)->close_document(); + if (tree == NULL) + sxsi_raise_msg("caml_close_document"); + result = sxsi_alloc_custom(); + Obj_val(result) = tree; + CAMLreturn (result); +} + +extern "C" value caml_xml_tree_builder_open_tag(value vbuilder, value vtag) +{ + CAMLparam2(vbuilder, vtag); + const char * tag = String_val(vtag); + OBJ_VAL(vbuilder)->open_tag(std::string(tag)); + CAMLreturn (Val_unit); +} + +extern "C" value caml_xml_tree_builder_close_tag(value vbuilder, value vtag) +{ + CAMLparam2(vbuilder, vtag); + const char * tag = String_val(vtag); + OBJ_VAL(vbuilder)->close_tag(std::string(tag)); + CAMLreturn (Val_unit); +} + +extern "C" value caml_xml_tree_builder_text(value vbuilder, value vtext) +{ + CAMLparam2(vbuilder, vtext); + const char * text = String_val(vtext); + OBJ_VAL(vbuilder)->text(std::string(text)); + CAMLreturn (Val_unit); +}