external int16_array_to_string : int array-> string = "ml_int16_array_to_string";; |
#include <caml/alloc.h> CAMLprim value ml_int16_array_to_string(value buff) { CAMLparam1 (buff); CAMLlocal1(result); int i, field, size; size = Wosize_val(buff); result = alloc_string(size*sizeof(unsigned short)); unsigned short *tab = (unsigned short*)String_val(result); for (i=0;i<size;i++,tab++) { field = Int_val(Field(buff,i)); if (field < 0 || field >= MAX_SHORT) { invalid_argument("ml_int16_array_to_string"); } *tab=htons((unsigned short)field); } CAMLreturn(result); } |
let test_int16_array_to_string () = let array = [| 1234; 13; 345 |] in let buffer = int16_array_to_string array in try for i=0 to (Array.length array)-1 do let value = read_int16_from_string buffer (i*2) in if array.(i) != value then raise (Failure "test_int16_array_to_string") done; print_endline "Ok: int16_array_to_string" with Failure _ -> print_endline "Ko: int16_array_to_string";; test_int16_array_to_string ();; |