From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail4-relais-sop.national.inria.fr (mail4-relais-sop.national.inria.fr [192.134.164.105]) by walapai.inria.fr (8.13.6/8.13.6) with ESMTP id q43JKnko006779 for ; Thu, 3 May 2012 21:20:49 +0200 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhwBAPjZok/RVaA2kGdsb2JhbABFsnMIIgEBAQEJCQ0HFAQjggoBAQQSAiwBGx0BAwwGBQs7IgERAQUBHAYbGodcAQMLC5wGCQOMJIJzhSEKGScNV4h2AQULkH0ElX6BEY1RPYQM X-IronPort-AV: E=Sophos;i="4.75,526,1330902000"; d="scan'208";a="142488454" Received: from mail-pb0-f54.google.com ([209.85.160.54]) by mail4-smtp-sop.national.inria.fr with ESMTP/TLS/RC4-SHA; 03 May 2012 21:20:43 +0200 Received: by pbbro2 with SMTP id ro2so3713146pbb.27 for ; Thu, 03 May 2012 12:20:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=cQY76rNNA0z+qBn1gPqIeMZatKwK/GVViJxy0LDiWcI=; b=mDoCgtYKDyK4/sVdZSr38cjgSxO9uwjwfafq2e7LDRN9TVEn4LUCmnH1P8ukX79Bc0 gdGAhzsaxDhBKHKLXoIgAYgDRafLZBMu3bxhNUntmACfxy1sNdB88f1aRTKujTdzkhhN RCE9I+SpeqKJ8fVk0ipeKpgtVjh6FR1MyVx4VXPtoC5z0fWjTIXgt+p1NlT2yMxlCkgu Pyk5VTfgi9lnfAyK6VyGYjToqQgMTldTg2Rj7QdAK1ut2jPPKmTHojqP5xLv5g7wsSEM +vhDKEMOHXvcmLD49/XV7tvfiDoucI11W37WwVhSoVCt2HjE1LEseEN6Eqq33njgl0+r kO8Q== MIME-Version: 1.0 Received: by 10.68.239.73 with SMTP id vq9mr5747592pbc.94.1336072842374; Thu, 03 May 2012 12:20:42 -0700 (PDT) Received: by 10.68.228.194 with HTTP; Thu, 3 May 2012 12:20:42 -0700 (PDT) In-Reply-To: References: <871un1z8sq.fsf@frosties.localnet> Date: Thu, 3 May 2012 20:20:42 +0100 Message-ID: From: Joel Reymont To: Gabriel Scherer Cc: Goswin von Brederlow , caml-list@inria.fr Content-Type: text/plain; charset=ISO-8859-1 Subject: Re: [Caml-list] using modules to wrap c++ classes I'm doing this to dispatch callbacks on the C side. Are there any issues with doing it this way? Is there a better way? Thanks, Joel --- enum { ALERT }; static CAMLprim value callbacks[] = { Val_unit // Alert }; template inline void dispatch(CAMLprim value (*make)(T*), value v, T* p, void* ctx) { if (v != Val_unit) { caml_c_thread_register(); CAMLlocal1(o); o = make(p); callback2(v, (value)ctx, o); } } class MyAdmCallbacks: public AdmCallbacks { public : MyAdmCallbacks() {}; ~MyAdmCallbacks() {}; virtual int Alert(AlertInfo* pInfo, void* pContext, int* aiCode) { dispatch(Alert_new_from, callbacks[ALERT], pInfo, pContext); *aiCode = API_OK; return (OK); } }; -------------------------------------------------------------------------- Working on AlgoKit, a new algorithmic trading platform using Rithmic R|API ---------------------+------------+--------------------------------------- http://wagerlabs.com | @wagerlabs | http://www.linkedin.com/in/joelreymont ---------------------+------------+---------------------------------------