From: Mauricio Fernandez <mfp@acm.org>
To: caml-list@inria.fr
Subject: Re: [Caml-list] wrapping external classes
Date: Thu, 11 Dec 2008 11:37:23 +0100 [thread overview]
Message-ID: <20081211103723.GE18977@NANA.localdomain> (raw)
In-Reply-To: <8119C403-2D50-4DFA-901C-FC3F8409843E@gmail.com>
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
next prev parent reply other threads:[~2008-12-11 10:37 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-12-11 2:20 Alexy Khrabrov
2008-12-11 10:37 ` Mauricio Fernandez [this message]
2008-12-11 15:07 ` [Caml-list] " Alain Frisch
2008-12-11 16:21 ` Florent Monnier
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20081211103723.GE18977@NANA.localdomain \
--to=mfp@acm.org \
--cc=caml-list@inria.fr \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox