Change from unordered_set<tag> to int array in low-level select_* functions.
[SXSI/xpathcomp.git] / src / utils_stub.cpp
index dc3688a..8ee3e0b 100644 (file)
@@ -1,4 +1,4 @@
-#include "common_stub.hpp"
+#include "utils_stub.hpp"
 
 extern "C" value caml_clz(value i)
 {
@@ -9,3 +9,29 @@ extern "C" value caml_leading_bit(value i)
 {
   return Val_long( ( 1 << (sizeof(unsigned long)*8 - __builtin_clzl(Long_val(i)) - 1)));
 }
+
+xml_tree::tag_t*& TAGLIST(value x)
+{
+  return Obj_val<xml_tree::tag_t*>(x);
+}
+
+static void finalize_tag_list(value x)
+{
+  xml_tree::tag_t * t = TAGLIST(x);
+  delete [] t;
+}
+
+extern "C" value caml_tag_list_alloc(value length)
+{
+  CAMLparam1(length);
+  CAMLlocal1(tlist);
+  tlist = sxsi_alloc_custom<xml_tree::tag_t*>();
+  TAGLIST(tlist) = new xml_tree::tag_t[Int_val(length)];
+  CAMLreturn (tlist);
+}
+
+NoAlloc extern "C" value caml_tag_list_set(value tl, value i, value v)
+{
+  TAGLIST(tl)[Int_val(i)] = Int_val(v);
+  return Val_unit;
+}