Skip to content

Add copy and free function annotations for POD types

Emmanuele Bassi requested to merge ebassi/plain-old-data into main

Plain Old Data (POD) types with or without a representation in the GType type system can still have a copy and/or a free function. We should allow annotating these types with their corresponding functions for copying their data into a new instance, and freeing their data.

From a language bindings perspective, POD types should have a boxed GType wrapper around them, so they can use the generic GBoxed API to copy and free instances; from a documentation perspective, though, it'd be good to have a way to match a structured type, like a struct or a union, with its copy and free functions.

In order to do that, we add two new header block annotations:

  • (copy-func function_name)
  • (free-func function_name)

These annotations work exactly like ref-func and unref-func for typed instances:

/**
 * GdkRGBA: (copy-func gdk_rgba_copy)
 *   (free-func gdk_rgba_free)
 * @red: ...
 * @green: ...
 * @blue: ...
 * @alpha: ...
 *
 * ...
 */

The function is stored in the GIR data as two new attributes for the <record> and <union> elements:

<record name="RGBA"
        c:type="GdkRGBA"
        copy-function="gdk_rgba_copy"
        free-function="gdk_rgba_free"
        glib:type-name="GdkRGBA"
        glib:get-type="gdk_rgba_get_type"
        c:symbol-prefix="gdk_rgba">

The annotations are not mandatory.

Fixes: #14 (closed)

Edited by Emmanuele Bassi

Merge request reports