On Tue, Jun 16, 2009 at 10:48:19AM -0300, Maurí­cio wrote:
> /*****/
> struct ex {
>     int x;
>     int y;
>     int z;
> };
>
> ex example_functions (ex p)
> {
>   (...)
> }
> /*****/

You may adopt the approach I used with Hipmunk[1] where there is
a wrapper library written in C.  For your example you could do
something like

> void wr_example_functions(ex *p) {
>   *p = example_functions(*p);
> }

and in you Haskell code you write something like

> foreign import ccall unsafe "wrapper.h"
>     wr_example_functions :: Ptr Ex -> IO ()
>
> exampleFunctions :: Ex -> IO Ex
> exampleFunctions input =
>   with input $ \ptr -> do
>     wr_example_functions ptr
>     peek ptr

The structure is allocated on the stack, so the drawbacks are
only another function call and two structure copies, and probably
that shouldn't hurt a lot.  Note that depending on the C compiler
those costs may even get somewhat optimized (e.g. by inlining).

[1] http://hackage.haskell.org/package/Hipmunk

--
Felipe.
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to