8ee3e0be885168768147f610fa836a8a29a279ca
[SXSI/xpathcomp.git] / src / utils_stub.cpp
1 #include "utils_stub.hpp"
2
3 extern "C" value caml_clz(value i)
4 {
5   return Val_long( ((sizeof(unsigned long)*8) - __builtin_clzl(Long_val(i))) - 1);
6 }
7
8 extern "C" value caml_leading_bit(value i)
9 {
10   return Val_long( ( 1 << (sizeof(unsigned long)*8 - __builtin_clzl(Long_val(i)) - 1)));
11 }
12
13 xml_tree::tag_t*& TAGLIST(value x)
14 {
15   return Obj_val<xml_tree::tag_t*>(x);
16 }
17
18 static void finalize_tag_list(value x)
19 {
20   xml_tree::tag_t * t = TAGLIST(x);
21   delete [] t;
22 }
23
24 extern "C" value caml_tag_list_alloc(value length)
25 {
26   CAMLparam1(length);
27   CAMLlocal1(tlist);
28   tlist = sxsi_alloc_custom<xml_tree::tag_t*>();
29   TAGLIST(tlist) = new xml_tree::tag_t[Int_val(length)];
30   CAMLreturn (tlist);
31 }
32
33 NoAlloc extern "C" value caml_tag_list_set(value tl, value i, value v)
34 {
35   TAGLIST(tl)[Int_val(i)] = Int_val(v);
36   return Val_unit;
37 }