Fix C++/OCaml wrappers.
[SXSI/xpathcomp.git] / src / OCamlDriver.cpp
index 8eb3a22..bb007a8 100644 (file)
 #include "Utils.h"
 #include "common_stub.hpp"
 
-extern "C" {
-#include <stdio.h>
-}
-
 #define CAMLRAISEMSG(msg) (sxsi_raise_msg((char*) (msg)))
 
-#define XMLTREE(x) (Obj_val<XMLTree>(x))
+#define XMLTREE(x) (Obj_val<XMLTree*>(x))
 
-#define HSET(x) (Obj_val<TagIdSet>(x))
+#define HSET(x) (Obj_val<TagIdSet*>(x))
 
-#define XMLTREEBUILDER(x) (Obj_val<XMLTreeBuilder>(x))
+#define XMLTREEBUILDER(x) (Obj_val<XMLTreeBuilder*>(x))
 
 
 #define TREENODEVAL(i) ((treeNode) (Int_val(i)))
@@ -56,8 +52,9 @@ extern "C" value caml_xml_tree_builder_create(value unit)
 {
   CAMLparam1(unit);
   CAMLlocal1(result);
-  result = sxsi_alloc_custom<XMLTreeBuilder>();
-  Obj_val<XMLTreeBuilder>(result) = new XMLTreeBuilder();
+  result = sxsi_alloc_custom<XMLTreeBuilder*>();
+  Obj_val<XMLTreeBuilder*>(result) = new XMLTreeBuilder();
+
   CAMLreturn(result);
 }
 
@@ -102,8 +99,8 @@ extern "C" value caml_xml_tree_builder_close_document(value vbuilder)
   XMLTree * tree = XMLTREEBUILDER(vbuilder)->CloseDocument();
   if (tree == NULL)
     CAMLRAISEMSG("CloseDocument");
-  result = sxsi_alloc_custom<XMLTree>();
-  Obj_val<XMLTree>(result) = tree;
+  result = sxsi_alloc_custom<XMLTree*>();
+  Obj_val<XMLTree*>(result) = tree;
   CAMLreturn (result);
 }
 
@@ -155,12 +152,16 @@ extern "C"  value caml_xml_tree_save(value tree,value fd, value name){
 
 extern "C"  value caml_xml_tree_load(value fd, value name, value load_tc,value sf){
   CAMLparam4(fd, name, load_tc, sf);
-  CAMLlocal1(result);
+  CAMLlocal2(result,tmp);
   XMLTree * tree;
   try {
+
     tree = XMLTree::Load(Int_val(fd),Bool_val(load_tc),Int_val(sf), String_val(name));
-    result = sxsi_alloc_custom<XMLTree>();
-    Obj_val<XMLTree>(result) = tree;
+    result = sxsi_alloc_custom<XMLTree*>();
+
+    Obj_val<XMLTree*>(result) = tree;
+    tmp = sxsi_alloc_custom<long>();
+    Obj_val<long>(tmp) = 3l;
     CAMLreturn(result);
   }
   catch (const std::exception& e){ CAMLRAISEMSG(e.what()); }
@@ -416,8 +417,8 @@ NoAlloc extern "C"  value caml_unordered_set_length(value hset){
 extern "C"  value caml_unordered_set_alloc(value unit){
   CAMLparam1(unit);
   CAMLlocal1(hset);
-  hset = sxsi_alloc_custom<TagIdSet>();
-  Obj_val<TagIdSet>(hset) = new TagIdSet();
+  hset = sxsi_alloc_custom<TagIdSet*>();
+  Obj_val<TagIdSet*>(hset) = new TagIdSet();
   CAMLreturn (hset);
 }