Big refactoring of libxml-tree, part (1) (everything compiles)
[SXSI/xpathcomp.git] / src / xml-tree-builder_stub.cpp
1 #include "xml-tree-builder.hpp"
2 #include "common_stub.hpp"
3
4 using namespace SXSI;
5
6 static xml_tree_builder*& OBJ_VAL(value v)
7 {
8   return Obj_val<xml_tree_builder*>(v);
9 }
10
11 extern "C" value caml_xml_tree_builder_create(value unit)
12 {
13   CAMLparam1(unit);
14   CAMLlocal1(result);
15   result = sxsi_alloc_custom<xml_tree_builder*>();
16   OBJ_VAL(result) = new xml_tree_builder();
17
18   CAMLreturn(result);
19 }
20
21 extern "C" value caml_xml_tree_builder_open_document(value vbuilder,
22                                                      value vsrate,
23                                                      value vdtc,
24                                                      value vidxtype)
25 {
26   CAMLparam4(vbuilder, vsrate, vdtc, vidxtype);
27   int sample_rate = Int_val(vsrate);
28   bool disable_tc = Bool_val(vdtc);
29   TextCollectionBuilder::index_type_t idx_type;
30   switch (Int_val(vidxtype)){
31   case 0:
32     idx_type = TextCollectionBuilder::index_type_default;
33     break;
34   case 1:
35     idx_type = TextCollectionBuilder::index_type_swcsa;
36     break;
37   case 2:
38     idx_type = TextCollectionBuilder::index_type_rlcsa;
39     break;
40   default:
41     sxsi_raise_msg("Invalid Index Type");
42   };
43
44   OBJ_VAL(vbuilder)->open_document(disable_tc,
45                                    sample_rate,
46                                    idx_type);
47   CAMLreturn (Val_unit);
48 }
49
50 extern "C" value caml_xml_tree_builder_close_document(value vbuilder)
51 {
52   CAMLparam1(vbuilder);
53   CAMLlocal1(result);
54   xml_tree *tree = OBJ_VAL(vbuilder)->close_document();
55   if (tree == NULL)
56     sxsi_raise_msg("caml_close_document");
57   result = sxsi_alloc_custom<xml_tree*>();
58   Obj_val<xml_tree*>(result) = tree;
59   CAMLreturn (result);
60 }
61
62 extern "C" value caml_xml_tree_builder_open_tag(value vbuilder, value vtag)
63 {
64   CAMLparam2(vbuilder, vtag);
65   const char * tag = String_val(vtag);
66   OBJ_VAL(vbuilder)->open_tag(std::string(tag));
67   CAMLreturn (Val_unit);
68 }
69
70 extern "C" value caml_xml_tree_builder_close_tag(value vbuilder, value vtag)
71 {
72   CAMLparam2(vbuilder, vtag);
73   const char * tag = String_val(vtag);
74   OBJ_VAL(vbuilder)->close_tag(std::string(tag));
75   CAMLreturn (Val_unit);
76 }
77
78 extern "C" value caml_xml_tree_builder_text(value vbuilder, value vtext)
79 {
80   CAMLparam2(vbuilder, vtext);
81   const char * text = String_val(vtext);
82   OBJ_VAL(vbuilder)->text(std::string(text));
83   CAMLreturn (Val_unit);
84 }