diff options
author | Emmanuele Bassi <ebassi@gnome.org> | 2022-10-29 18:09:23 +0100 |
---|---|---|
committer | Emmanuele Bassi <ebassi@gnome.org> | 2023-01-08 14:50:28 +0000 |
commit | e9e3866133275cedcec6b9953adaf88fefcabbf8 (patch) | |
tree | 813abc2433ad2d50c23303a6cc0c7b09a8646a92 /girepository/giunioninfo.h | |
parent | 221b006625f2185b5a4d81d544bd0a2acf70ef60 (diff) | |
download | gobject-introspection-e9e3866133275cedcec6b9953adaf88fefcabbf8.tar.gz |
Add copy and free function annotations for POD types
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.
See: #14
Diffstat (limited to 'girepository/giunioninfo.h')
-rw-r--r-- | girepository/giunioninfo.h | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/girepository/giunioninfo.h b/girepository/giunioninfo.h index 62951b85..4087ed4d 100644 --- a/girepository/giunioninfo.h +++ b/girepository/giunioninfo.h @@ -77,6 +77,12 @@ gsize g_union_info_get_size (GIUnionInfo *info); GI_AVAILABLE_IN_ALL gsize g_union_info_get_alignment (GIUnionInfo *info); +GI_AVAILABLE_IN_1_76 +const char * g_union_info_get_copy_function (GIUnionInfo *info); + +GI_AVAILABLE_IN_1_76 +const char * g_union_info_get_free_function (GIUnionInfo *info); + G_END_DECLS |