[ocaml-ctypes] Bigarray typing problem
Jeremy Yallop
yallop at gmail.com
Tue Dec 17 22:17:03 GMT 2013
On 15 December 2013 23:51, Daniel Bünzli <daniel.buenzli at erratique.ch> wrote:
> However I now have another problem which is the other way round. I would like to be able to see a chunk of (void *) memory as a Bigarray.Array1.t of a given, client-defined, kind (failing if there are size alignment issue).
>
> Here's an example:
>
> val get_pixels : t -> ('a, 'b) kind -> ('a, 'b, Bigarray.c_layout) Bigarray.Array1.t
>
> For that I need to use Ctypes.bigarray_of_ptr, however to remain generic I need to coerce my (void *) pointer to the right type according to the bigarray kind. For that I wrote this function, just in order to match the access types (is that ok or should I match the storage aswell ?):
Yes, you need to consider the storage type as well. The following
should be about right:
let access_ptr_typ_of_ba_kind : ('a, 'b) Bigarray.kind -> 'a ptr typ
= fun k ->
let open Bigarray in
match Obj.magic k with
| k when k = float32 -> Obj.magic (ptr Ctypes.float)
| k when k = float64 -> Obj.magic (ptr Ctypes.double)
| k when k = complex32 -> Obj.magic (ptr Ctypes.complex32)
| k when k = complex64 -> Obj.magic (ptr Ctypes.complex64)
| k when k = int8_signed -> Obj.magic (ptr Ctypes.int8_t)
| k when k = int8_unsigned -> Obj.magic (ptr Ctypes.uint8_t)
| k when k = int16_signed -> Obj.magic (ptr Ctypes.int16_t)
| k when k = int16_unsigned -> Obj.magic (ptr Ctypes.uint16_t)
| k when k = int -> Obj.magic (ptr Ctypes.camlint)
| k when k = int32 -> Obj.magic (ptr Ctypes.int32_t)
| k when k = int64 -> Obj.magic (ptr Ctypes.int64_t)
| k when k = nativeint -> Obj.magic (ptr Ctypes.nativeint)
| k when k = char -> Obj.magic (ptr Ctypes.char)
| _ -> assert false
> Is that correct ?
It looks reasonable to me.
> If it is and there's no other way I think it would be nice to have the above function in ctypes.
Agreed: it's both needed in the interface for completeness, and much
simpler to implement internally:
https://github.com/ocamllabs/ocaml-ctypes/pull/114/files
It should be in the next release.
Jeremy.
More information about the Ctypes
mailing list