Provided by: libcoro-perl_6.540-1_amd64 bug

NAME

       Coro::MakeMaker - MakeMaker glue for the XS-level Coro API

SYNOPSIS

       This allows you to control coroutines from C/XS.

DESCRIPTION

       For optimal performance, hook into Coro at the C-level. You'll need to make changes to
       your "Makefile.PL" and add code to your "xs" / "c" file(s).

WARNING

       When you hook in at the C-level you can get a huge performance gain, but you also reduce
       the chances that your code will work unmodified with newer versions of "perl" or "Coro".
       This may or may not be a problem.  Just be aware, and set your expectations accordingly.

HOW TO

   Makefile.PL
         use Coro::MakeMaker qw(coro_args);

         # ... set up %args ...

         WriteMakefile (coro_args (%args));

   XS
         #include "CoroAPI.h"

         BOOT:
           I_CORO_API ("YourModule");

   API
       This is just a small overview - read the Coro/CoroAPI.h header file in the distribution,
       and check the examples in EV/ and Event/*, or as a more real-world example, the Deliantra
       game server (which uses Coro::MakeMaker).

       You can also drop me a mail if you run into any trouble.

        #define CORO_TRANSFER(prev,next) /* transfer from prev to next */
        #define CORO_SCHEDULE            /* like Coro::schedule */
        #define CORO_CEDE                /* like Coro::cede */
        #define CORO_CEDE_NOTSELF        /* like Coro::cede_notself */
        #define CORO_READY(coro)         /* like $coro->ready */
        #define CORO_IS_READY(coro)      /* like $coro->is_ready */
        #define CORO_NREADY              /* # of procs in ready queue */
        #define CORO_CURRENT             /* returns $Coro::current */
        #define CORO_THROW               /* exception pending? */
        #define CORO_READYHOOK           /* hook for event libs, see Coro::EV */

        /* C-level coroutine struct, opaque, not used much */
        struct coro;

        /* used for schedule-like-function prepares */
        struct coro_transfer_args
        {
          struct coro *prev, *next;
        };

        /* this is the per-perl-coro slf frame info */
        struct CoroSLF
        {
          void (*prepare) (pTHX_ struct coro_transfer_args *ta); /* 0 means not yet initialised */
          int (*check) (pTHX_ struct CoroSLF *frame);
          void *data; /* for use by prepare/check/destroy */
          void (*destroy) (pTHX_ struct CoroSLF *frame);
        };

        /* needs to fill in the *frame */
        typedef void (*coro_slf_cb) (pTHX_ struct CoroSLF *frame, CV *cv, SV **arg, int items);

        #define CORO_SV_STATE(coro)      /* returns the internal struct coro * */
        #define CORO_EXECUTE_SLF(cv,init,ax) /* execute a schedule-like function */
        #define CORO_EXECUTE_SLF_XS(init) /* SLF in XS, see e.g. Coro::EV */

        /* called on enter/leave */
        typedef void (*coro_enterleave_hook) (pTHX_ void *arg);

        #define CORO_ENTERLEAVE_HOOK(coro,enter,enter_arg,leave,leave_arg)   /* install an XS-level enter/leave hook */
        #define CORO_ENTERLEAVE_UNHOOK(coro,enter,leave)                     /* remove an XS-level enter/leave hook */
        #define CORO_ENTERLEAVE_SCOPE_HOOK(enter,enter_arg,leave,leave_arg)  /* install an XS-level enter/leave hook for the corrent scope */

AUTHOR/SUPPORT/CONTACT

          Marc A. Lehmann <schmorp@schmorp.de>
          http://software.schmorp.de/pkg/Coro.html