# vim: set ft=c:

MPIX_Async_start:
    poll_fn: FUNCTION, func_type=MPIX_Async_poll_function, [user defined poll function for progressing async things]
    extra_state: EXTRA_STATE, [extra state for callback function]
    stream: STREAM, [stream object]
{
    mpi_errno = MPIR_Async_things_add(poll_fn, extra_state, stream_ptr);
    if (mpi_errno) goto fn_fail;
}

MPIX_Async_get_state:
    .return: EXTRA_STATE
    async_thing: ASYNC_THING, [opaque pointer for async thing]
    .impl: direct
    .skip: validate-ASYNC_THING
{
    return MPIR_Async_thing_get_state(async_thing);
}

MPIX_Async_spawn:
    async_thing: ASYNC_THING, [opaque pointer for async thing]
    poll_fn: FUNCTION, func_type=MPIX_Async_poll_function, [user defined poll function for progressing async things]
    extra_state: EXTRA_STATE, [extra state for callback function]
    stream: STREAM, [stream object]
    .skip: validate-ASYNC_THING
{
    mpi_errno = MPIR_Async_thing_spawn(async_thing, poll_fn, extra_state, stream_ptr);
    if (mpi_errno) goto fn_fail;
}
