Big refactoring of libxml-tree, part (1) (everything compiles)
[SXSI/xpathcomp.git] / src / xml-tree-builder_stub.cpp
diff --git a/src/xml-tree-builder_stub.cpp b/src/xml-tree-builder_stub.cpp
new file mode 100644 (file)
index 0000000..6fc1c60
--- /dev/null
@@ -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<xml_tree_builder*>(v);
+}
+
+extern "C" value caml_xml_tree_builder_create(value unit)
+{
+  CAMLparam1(unit);
+  CAMLlocal1(result);
+  result = sxsi_alloc_custom<xml_tree_builder*>();
+  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<xml_tree*>();
+  Obj_val<xml_tree*>(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);
+}