Version française
Home     About     Download     Resources     Contact us    
Browse thread
wrapping external classes
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Mauricio Fernandez <mfp@a...>
Subject: Re: [Caml-list] wrapping external classes
On Wed, Dec 10, 2008 at 09:20:41PM -0500, Alexy Khrabrov wrote:
> I'm wrapping a C++ library in ocaml bindings.  Originally I wrote an  
> in-C++ object pool handler returning integer handles, and wrapped the  
> constructor, destructor, and the main compute function in  my  
> lmclient.ml file as create, destroy, and compute functions, then  
> declared in OCaml as
>
> external  create  : string -> int -> int    = "lmclient_create"
> external  destroy : int -> int              = "lmclient_destroy"
> external  compute : int -> string -> string = "lmclient_compute"
>
> I can call them as Lmclient.create, etc.  The create returns an integer 
> handle which is then used by others to compute and destroy the  
> corresponding C++ object inside my pool manager.
>
> Now I want to avoid the explicit destroy, and want to add more methods, 
> so I'd like to wrap these three and more into an OCaml object.  How do I 
> glue the external definitions to object methods?  Apparently method 
> external or external method doesn't parse...

(* an abstract type is better than int --- no change needed in the
 * C/C++ bindings *)
type handle
external create : string -> int -> handle = "lmclient_create"
external destroy : handle -> unit = "lmclient_destroy"
external compute : handle -> string -> string = "lmclient_compute"

class foo s n =
object(self)
  val handle = create s n

  method compute = compute handle

  initializer
    (* use a destroy method explicitly if you need to make sure the destructor
     * is called --- Gc.finalise doesn't guarantee this (e.g. the program might
     * terminate before the finalisation function is executed) *)
    Gc.finalise destroy handle
end

-- 
Mauricio Fernandez  -   http://eigenclass.org