X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=src%2Futils_stub.cpp;h=2ea3feb54d2b6392ed8fa559d7420c84712cbeaa;hb=e4e34e687798285e65df74561915f7721b066631;hp=8ee3e0be885168768147f610fa836a8a29a279ca;hpb=431946f30b0733498ffa731cfa97692b2c942208;p=SXSI%2Fxpathcomp.git diff --git a/src/utils_stub.cpp b/src/utils_stub.cpp index 8ee3e0b..2ea3feb 100644 --- a/src/utils_stub.cpp +++ b/src/utils_stub.cpp @@ -1,5 +1,18 @@ #include "utils_stub.hpp" +extern "C" { +#define CAML_NAME_SPACE + +#include +#include +#include +#include +#include +#include +#include +} +#include + extern "C" value caml_clz(value i) { return Val_long( ((sizeof(unsigned long)*8) - __builtin_clzl(Long_val(i))) - 1); @@ -10,11 +23,50 @@ extern "C" value caml_leading_bit(value i) return Val_long( ( 1 << (sizeof(unsigned long)*8 - __builtin_clzl(Long_val(i)) - 1))); } + +static char * rtrim(char *str) +{ + char *ptr; + int len; + + len = strlen(str); + for (ptr = str + len - 1; ptr >= str && isspace((int)*ptr ); --ptr); + ptr[1] = '\0'; + + return str; +} + +static char * ltrim(char *str) +{ + char *ptr; + int len; + + for (ptr = str; *ptr && isspace((int)*ptr); ++ptr); + + len = strlen(ptr); + memmove(str, ptr, len + 1); + + return str; +} +extern "C" value caml_trim(value s) +{ + CAMLparam1(s); + CAMLlocal1(res); + char * ptr; + char * str = String_val(s); + ptr = rtrim(str); + str = ltrim(ptr); + res = caml_copy_string(str); + CAMLreturn(res); +} + xml_tree::tag_t*& TAGLIST(value x) { return Obj_val(x); } + + static void finalize_tag_list(value x) { xml_tree::tag_t * t = TAGLIST(x);