Esempio n. 1
0
/**
 * g_value_type_compatible:
 * @src_type: source type to be copied.
 * @dest_type: destination type for copying.
 *
 * Returns whether a #GValue of type @src_type can be copied into
 * a #GValue of type @dest_type.
 *
 * Returns: %TRUE if g_value_copy() is possible with @src_type and @dest_type.
 */
gboolean
g_value_type_compatible (GType src_type,
                         GType dest_type)
{
    g_return_val_if_fail (G_TYPE_IS_VALUE (src_type), FALSE);
    g_return_val_if_fail (G_TYPE_IS_VALUE (dest_type), FALSE);

    return (g_type_is_a (src_type, dest_type) &&
            g_type_value_table_peek (dest_type) == g_type_value_table_peek (src_type));
}
Esempio n. 2
0
/**
 * g_value_type_transformable:
 * @src_type: Source type.
 * @dest_type: Target type.
 *
 * Check whether g_value_transform() is able to transform values
 * of type @src_type into values of type @dest_type.
 *
 * Returns: %TRUE if the transformation is possible, %FALSE otherwise.
 */
gboolean
g_value_type_transformable (GType src_type,
                            GType dest_type)
{
    g_return_val_if_fail (G_TYPE_IS_VALUE (src_type), FALSE);
    g_return_val_if_fail (G_TYPE_IS_VALUE (dest_type), FALSE);

    return (g_value_type_compatible (src_type, dest_type) ||
            transform_func_lookup (src_type, dest_type) != NULL);
}
Esempio n. 3
0
/**
 * g_value_init:
 * @value: A zero-filled (uninitialized) #GValue structure.
 * @g_type: Type the #GValue should hold values of.
 *
 * Initializes @value with the default value of @type.
 *
 * Returns: (transfer none): the #GValue structure that has been passed in
 */
GValue*
g_value_init (GValue *value,
              GType   g_type)
{
    /* g_return_val_if_fail (G_TYPE_IS_VALUE (g_type), NULL);	be more elaborate below */
    g_return_val_if_fail (value != NULL, NULL);
    /* g_return_val_if_fail (G_VALUE_TYPE (value) == 0, NULL);	be more elaborate below */

    if (G_TYPE_IS_VALUE (g_type) && G_VALUE_TYPE (value) == 0)
    {
        GTypeValueTable *value_table = g_type_value_table_peek (g_type);

        /* setup and init */
        value_meminit (value, g_type);
        value_table->value_init (value);
    }
    else if (G_VALUE_TYPE (value))
        g_warning ("%s: cannot initialize GValue with type '%s', the value has already been initialized as '%s'",
                   G_STRLOC,
                   g_type_name (g_type),
                   g_type_name (G_VALUE_TYPE (value)));
    else /* !G_TYPE_IS_VALUE (g_type) */
        g_warning ("%s: cannot initialize GValue with type '%s', %s",
                   G_STRLOC,
                   g_type_name (g_type),
                   g_type_value_table_peek (g_type) ?
                   "this type is abstract with regards to GValue use, use a more specific (derived) type" :
                   "this type has no GTypeValueTable implementation");
    return value;
}
Esempio n. 4
0
/**
 * g_value_dup_boxed:
 * @value: a valid #GValue of %G_TYPE_BOXED derived type
 *
 * Get the contents of a %G_TYPE_BOXED derived #GValue.  Upon getting,
 * the boxed value is duplicated and needs to be later freed with
 * g_boxed_free(), e.g. like: g_boxed_free (G_VALUE_TYPE (@value),
 * return_value);
 *
 * Returns: boxed contents of @value
 */
gpointer
g_value_dup_boxed (const GValue *value)
{
  g_return_val_if_fail (G_VALUE_HOLDS_BOXED (value), NULL);
  g_return_val_if_fail (G_TYPE_IS_VALUE (G_VALUE_TYPE (value)), NULL);

  return value->data[0].v_pointer ? g_boxed_copy (G_VALUE_TYPE (value), value->data[0].v_pointer) : NULL;
}
Esempio n. 5
0
/**
 * g_value_get_boxed:
 * @value: a valid #GValue of %G_TYPE_BOXED derived type
 *
 * Get the contents of a %G_TYPE_BOXED derived #GValue.
 *
 * Returns: boxed contents of @value
 */
gpointer
g_value_get_boxed (const GValue *value)
{
  g_return_val_if_fail (G_VALUE_HOLDS_BOXED (value), NULL);
  g_return_val_if_fail (G_TYPE_IS_VALUE (G_VALUE_TYPE (value)), NULL);

  return value->data[0].v_pointer;
}
Esempio n. 6
0
/**
 * g_value_take_boxed:
 * @value: a valid #GValue of %G_TYPE_BOXED derived type
 * @v_boxed: duplicated unowned boxed value to be set
 *
 * Sets the contents of a %G_TYPE_BOXED derived #GValue to @v_boxed
 * and takes over the ownership of the callers reference to @v_boxed;
 * the caller doesn't have to unref it any more.
 *
 * Since: 2.4
 */
void
g_value_take_boxed (GValue       *value,
		    gconstpointer boxed)
{
  g_return_if_fail (G_VALUE_HOLDS_BOXED (value));
  g_return_if_fail (G_TYPE_IS_VALUE (G_VALUE_TYPE (value)));

  value_set_boxed_internal (value, boxed, FALSE, TRUE);
}