Merge branch 'handle-stdout'
[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 ML_BINDING 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 ML_BINDING 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
51 ML_BINDING value caml_xml_tree_builder_close_document(value vbuilder)
52
53 {
54   CAMLparam1(vbuilder);
55   CAMLlocal1(result);
56   xml_tree *tree = OBJ_VAL(vbuilder)->close_document();
57   if (tree == NULL)
58     sxsi_raise_msg("caml_close_document");
59   result = sxsi_alloc_custom<xml_tree*>();
60   Obj_val<xml_tree*>(result) = tree;
61   CAMLreturn (result);
62 }
63
64 ML_BINDING value caml_xml_tree_builder_open_tag(value vbuilder, value vtag)
65 {
66   CAMLparam2(vbuilder, vtag);
67   const char * tag = String_val(vtag);
68   OBJ_VAL(vbuilder)->open_tag(std::string(tag));
69   CAMLreturn (Val_unit);
70 }
71
72 ML_BINDING value caml_xml_tree_builder_close_tag(value vbuilder, value vtag)
73 {
74   CAMLparam2(vbuilder, vtag);
75   const char * tag = String_val(vtag);
76   OBJ_VAL(vbuilder)->close_tag(std::string(tag));
77   CAMLreturn (Val_unit);
78 }
79
80 ML_BINDING value caml_xml_tree_builder_text(value vbuilder, value vtext)
81 {
82   CAMLparam2(vbuilder, vtext);
83   const char * text = String_val(vtext);
84   OBJ_VAL(vbuilder)->text(std::string(text));
85   CAMLreturn (Val_unit);
86 }