## girffi

girffi

## Synopsis

    void                (*GIFFIClosureCallback)             (ffi_cif *Param1,
                                                             void *Param2,
                                                             void **Param3,
                                                             void *Param4);
    struct              GIFunctionInvoker;
    void                gi_cclosure_marshal_generic         (GClosure *closure,
                                                             GValue *return_gvalue,
                                                             guint n_param_values,
                                                             const GValue *param_values,
                                                             gpointer invocation_hint,
                                                             gpointer marshal_data);
    ffi_type *          g_type_info_get_ffi_type            (GITypeInfo *info);
    gboolean            g_function_info_prep_invoker        (GIFunctionInfo *info,
                                                             GIFunctionInvoker *invoker,
                                                             GError **error);
    void                g_function_invoker_destroy          (GIFunctionInvoker *invoker);
    ffi_closure *       g_callable_info_prepare_closure     (GICallableInfo *callable_info,
                                                             ffi_cif *cif,
                                                             GIFFIClosureCallback callback,
                                                             gpointer user_data);
    void                g_callable_info_free_closure        (GICallableInfo *callable_info,
                                                             ffi_closure *closure);

## Description

## Details

### GIFFIClosureCallback ()

    void                (*GIFFIClosureCallback)             (ffi_cif *Param1,
                                                             void *Param2,
                                                             void **Param3,
                                                             void *Param4);

### struct GIFunctionInvoker

    struct GIFunctionInvoker {
      ffi_cif cif;
      gpointer native_address;
    };

ffi_cif `cif`; | the cif
gpointer `native_address`; | the native adress

### gi_cclosure_marshal_generic ()

    void                gi_cclosure_marshal_generic         (GClosure *closure,
                                                             GValue *return_gvalue,
                                                             guint n_param_values,
                                                             const GValue *param_values,
                                                             gpointer invocation_hint,
                                                             gpointer marshal_data);

### g_type_info_get_ffi_type ()

    ffi_type *          g_type_info_get_ffi_type            (GITypeInfo *info);

`info` : | A GITypeInfo
Returns : | A ffi_type corresponding to the platform default C ABI for `info`.

### g_function_info_prep_invoker ()

    gboolean            g_function_info_prep_invoker        (GIFunctionInfo *info,
                                                             GIFunctionInvoker *invoker,
                                                             GError **error);

Initialize the caller-allocated `invoker` structure with a cache of information needed to invoke the C function corresponding to `info` with the platform's default ABI.

A primary intent of this function is that a dynamic structure allocated by a language binding could contain a GIFunctionInvoker structure inside the binding's function mapping.

`info` : | A GIFunctionInfo
`invoker` : | Output invoker structure
`error` : | A GError
Returns : | `TRUE` on success, `FALSE` otherwise with `error` set.

### g_function_invoker_destroy ()

    void                g_function_invoker_destroy          (GIFunctionInvoker *invoker);

### g_callable_info_prepare_closure ()

    ffi_closure *       g_callable_info_prepare_closure     (GICallableInfo *callable_info,
                                                             ffi_cif *cif,
                                                             GIFFIClosureCallback callback,
                                                             gpointer user_data);

Prepares a callback for ffi invocation.

`callable_info` : | a callable info from a typelib
`cif` : | a ffi_cif structure
`callback` : | the ffi callback
`user_data` : | data to be passed into the callback
Returns : | the ffi_closure or NULL on error. The return value should be freed by calling `g_callable_info_free_closure()`.

### g_callable_info_free_closure ()

    void                g_callable_info_free_closure        (GICallableInfo *callable_info,
                                                             ffi_closure *closure);

Frees a ffi_closure returned from `g_callable_info_prepare_closure()`

`callable_info` : | a callable info from a typelib
`closure` : | ffi closure