<div dir="ltr"><div>Ok. Thanks anyways!<br><br></div>  - Clark<br></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Jan 7, 2014 at 11:04 AM, Jeremy Yallop <span dir="ltr"><<a href="mailto:yallop@gmail.com" target="_blank">yallop@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On 7 January 2014 13:45, Clark Gaebel <<a href="mailto:cgaebel@janestreet.com">cgaebel@janestreet.com</a>> wrote:<br>

> What's the proper way in ctypes to interface with the following api:<br>
><br>
> void read_some_data(context* ctx, void* buffer, int length);<br>
><br>
> where read_some_data pulls some private data out of the given opaque context<br>
> and writes it into the given buffer, without blocking internally.<br>
><br>
> Ideally, I'd want something in OCaml that looks like:<br>
><br>
> val read_some_data : ctx -> len:int -> string<br>
><br>
> and the only way I see of doing this is going through bigstring first. But<br>
> this means two copies: one from C -> bigstring and one from bigstring -><br>
> string.<br>
<br>
</div></div>For the moment ctypes doesn't provide any way to pass OCaml heap<br>
addresses to C, so moving between OCaml strings and C arrays always<br>
involves a copy.<br>
</blockquote></div><br></div>