## GBoxed

GBoxed — A mechanism to wrap opaque C structures registered by the type system

## Synopsis

    #include <glib-object.h>

    gpointer    (*GBoxedCopyFunc)               (gpointer boxed);
    void        (*GBoxedFreeFunc)               (gpointer boxed);
    gpointer    g_boxed_copy                    (GType boxed_type,
                                                 gconstpointer src_boxed);
    void        g_boxed_free                    (GType boxed_type,
                                                 gpointer boxed);
    GType       g_boxed_type_register_static    (const gchar *name,
                                                 GBoxedCopyFunc boxed_copy,
                                                 GBoxedFreeFunc boxed_free);
    GType       g_pointer_type_register_static  (const gchar *name);

    #define     G_TYPE_GSTRING
    #define     G_TYPE_STRV
    typedef     GStrv;

## Description

## Details

### GBoxedCopyFunc ()

    gpointer    (*GBoxedCopyFunc)               (gpointer boxed);

This function is provided by the user and should produce a copy of the passed in boxed structure.

`boxed` : | The boxed structure to be copied.
Returns : | The newly created copy of the boxed structure.

### GBoxedFreeFunc ()

    void        (*GBoxedFreeFunc)               (gpointer boxed);

This function is provided by the user and should free the boxed structure passed.

`boxed` : | The boxed structure to be freed.

### g_boxed_copy ()

    gpointer    g_boxed_copy                    (GType boxed_type,
                                                 gconstpointer src_boxed);

Provide a copy of a boxed structure `src_boxed` which is of type `boxed_type`.

`boxed_type` : | The type of `src_boxed`.
`src_boxed` : | The boxed structure to be copied.
Returns : | The newly created copy of the boxed structure.

### g_boxed_free ()

    void        g_boxed_free                    (GType boxed_type,
                                                 gpointer boxed);

Free the boxed structure `boxed` which is of type `boxed_type`.

`boxed_type` : | The type of `boxed`.
`boxed` : | The boxed structure to be freed.

### g_boxed_type_register_static ()

    GType       g_boxed_type_register_static    (const gchar *name,
                                                 GBoxedCopyFunc boxed_copy,
                                                 GBoxedFreeFunc boxed_free);

This function creates a new `G_TYPE_BOXED` derived type id for a new boxed type with name `name`. Boxed type handling functions have to be provided to copy and free opaque boxed structures of this type.

`name` : | Name of the new boxed type.
`boxed_copy` : | Boxed structure copy function.
`boxed_free` : | Boxed structure free function.
Returns : | New `G_TYPE_BOXED` derived type id for `name`.

### g_pointer_type_register_static ()

    GType       g_pointer_type_register_static  (const gchar *name);

Creates a new `G_TYPE_POINTER` derived type id for a new pointer type with name `name`.

`name` : | the name of the new pointer type.
Returns : | a new `G_TYPE_POINTER` derived type id for `name`.

### G_TYPE_GSTRING

    #define	G_TYPE_GSTRING		(g_gstring_get_type ())

The GType for GString.

### G_TYPE_STRV

    #define	G_TYPE_STRV	        (g_strv_get_type ())

The GType for a boxed type holding a `NULL`-terminated array of strings.

The code fragments in the following example show the use of a property of type G_TYPE_STRV with `g_object_class_install_property()`, `g_object_set()` and `g_object_get()`.

    g_object_class_install_property (object_class,
                                     PROP_AUTHORS,
                                     g_param_spec_boxed ("authors",
                                                         _("Authors"),
                                                         _("List of authors"),
                                                         G_TYPE_STRV,
                                                         G_PARAM_READWRITE));

    gchar *authors[] = { "Owen", "Tim", NULL };
    g_object_set (obj, "authors", authors, NULL);

    gchar *writers[];
    g_object_get (obj, "authors", &writers, NULL);
    /* do something with writers */
    g_strfreev (writers);

Since 2.4

### GStrv

    typedef gchar** GStrv;

A C representable type name for G_TYPE_STRV.

## See Also

GParamSpecBoxed, `g_param_spec_boxed()`