<!-- ##### SECTION Title ##### -->
Parameters and Values

<!-- ##### SECTION Short_Description ##### -->
Standard Parameter and Value Types

<!-- ##### SECTION Long_Description ##### -->
<para>
#GValue provides an abstract container structure which can be copied,
transformed and compared while holding a value of any (derived) type, which
is registered as a #GType with a #GTypeValueTable in its #GTypeInfo structure.
Parameter specifications for most value types can be created as
#GParamSpec derived instances, to implement e.g. #GObject properties which
operate on #GValue containers.
</para>

<!-- ##### SECTION See_Also ##### -->
<para>
#GParamSpec, #GValue, g_object_class_install_property().
</para>

<!-- ##### MACRO G_IS_PARAM_SPEC_BOOLEAN ##### -->
<para>
Return whether the given #GParamSpec is of type %G_TYPE_PARAM_BOOLEAN.
</para>

@pspec: a valid #GParamSpec instance


<!-- ##### MACRO G_PARAM_SPEC_BOOLEAN ##### -->
<para>
Cast a #GParamSpec instance into a #GParamSpecBoolean.
</para>

@pspec: a valid #GParamSpec instance


<!-- ##### MACRO G_VALUE_HOLDS_BOOLEAN ##### -->
<para>
Return whether the given #GValue can hold values of type %G_TYPE_BOOLEAN.
</para>

@value: a valid #GValue structure


<!-- ##### MACRO G_TYPE_PARAM_BOOLEAN ##### -->
<para>
The #GType of #GParamSpecBoolean.
</para>



<!-- ##### STRUCT GParamSpecBoolean ##### -->
<para>
A #GParamSpec derived structure that contains the meta data for boolean properties.
</para>

@parent_instance: private #GParamSpec portion
@default_value:   default value for the property specified

<!-- ##### FUNCTION g_param_spec_boolean ##### -->
<para>
</para>

@name: 
@nick: 
@blurb: 
@default_value: 
@flags: 
@Returns: 


<!-- ##### FUNCTION g_value_set_boolean ##### -->
<para>
Set the contents of a %G_TYPE_BOOLEAN #GValue to @v_boolean.
</para>

@value:     a valid #GValue of type %G_TYPE_BOOLEAN
@v_boolean: boolean value to be set


<!-- ##### FUNCTION g_value_get_boolean ##### -->
<para>
Get the contents of a %G_TYPE_BOOLEAN #GValue.
</para>

@value:   a valid #GValue of type %G_TYPE_BOOLEAN
@Returns: boolean contents of @value


<!-- ##### MACRO G_IS_PARAM_SPEC_CHAR ##### -->
<para>
Return whether the given #GParamSpec is of type %G_TYPE_PARAM_CHAR.
</para>

@pspec: a valid #GParamSpec instance


<!-- ##### MACRO G_PARAM_SPEC_CHAR ##### -->
<para>
Cast a #GParamSpec instance into a #GParamSpecChar.
</para>

@pspec: a valid #GParamSpec instance


<!-- ##### MACRO G_VALUE_HOLDS_CHAR ##### -->
<para>
Return whether the given #GValue can hold values of type %G_TYPE_CHAR.
</para>

@value: a valid #GValue structure


<!-- ##### MACRO G_TYPE_PARAM_CHAR ##### -->
<para>
The #GType of #GParamSpecChar.
</para>



<!-- ##### STRUCT GParamSpecChar ##### -->
<para>
A #GParamSpec derived structure that contains the meta data for character properties.
</para>

@parent_instance: private #GParamSpec portion
@minimum:         minimum value for the property specified
@maximum:         maximum value for the property specified
@default_value:   default value for the property specified

<!-- ##### FUNCTION g_param_spec_char ##### -->
<para>
</para>

@name: 
@nick: 
@blurb: 
@minimum: 
@maximum: 
@default_value: 
@flags: 
@Returns: 


<!-- ##### FUNCTION g_value_set_char ##### -->
<para>
Set the contents of a %G_TYPE_CHAR #GValue to @v_char.
</para>

@value:  a valid #GValue of type %G_TYPE_CHAR
@v_char: character value to be set


<!-- ##### FUNCTION g_value_get_char ##### -->
<para>
Get the contents of a %G_TYPE_CHAR #GValue.
</para>

@value:   a valid #GValue of type %G_TYPE_CHAR
@Returns: character contents of @value


<!-- ##### MACRO G_IS_PARAM_SPEC_UCHAR ##### -->
<para>
Return whether the given #GParamSpec is of type %G_TYPE_PARAM_UCHAR.
</para>

@pspec: a valid #GParamSpec instance


<!-- ##### MACRO G_PARAM_SPEC_UCHAR ##### -->
<para>
Cast a #GParamSpec instance into a #GParamSpecUChar.
</para>

@pspec: a valid #GParamSpec instance


<!-- ##### MACRO G_VALUE_HOLDS_UCHAR ##### -->
<para>
Return whether the given #GValue can hold values of type %G_TYPE_UCHAR.
</para>

@value: a valid #GValue structure


<!-- ##### MACRO G_TYPE_PARAM_UCHAR ##### -->
<para>
The #GType of #GParamSpecUChar.
</para>



<!-- ##### STRUCT GParamSpecUChar ##### -->
<para>
A #GParamSpec derived structure that contains the meta data for unsigned character properties.
</para>

@parent_instance: private #GParamSpec portion
@minimum:         minimum value for the property specified
@maximum:         maximum value for the property specified
@default_value:   default value for the property specified

<!-- ##### FUNCTION g_param_spec_uchar ##### -->
<para>
</para>

@name: 
@nick: 
@blurb: 
@minimum: 
@maximum: 
@default_value: 
@flags: 
@Returns: 


<!-- ##### FUNCTION g_value_set_uchar ##### -->
<para>
Set the contents of a %G_TYPE_UCHAR #GValue to @v_uchar.
</para>

@value:   a valid #GValue of type %G_TYPE_UCHAR
@v_uchar: unsigned character value to be set


<!-- ##### FUNCTION g_value_get_uchar ##### -->
<para>
Get the contents of a %G_TYPE_UCHAR #GValue.
</para>

@value:   a valid #GValue of type %G_TYPE_UCHAR
@Returns: unsigned character contents of @value


<!-- ##### MACRO G_IS_PARAM_SPEC_INT ##### -->
<para>
Return whether the given #GParamSpec is of type %G_TYPE_PARAM_INT.
</para>

@pspec: a valid #GParamSpec instance


<!-- ##### MACRO G_PARAM_SPEC_INT ##### -->
<para>
Cast a #GParamSpec instance into a #GParamSpecInt.
</para>

@pspec: a valid #GParamSpec instance


<!-- ##### MACRO G_VALUE_HOLDS_INT ##### -->
<para>
Return whether the given #GValue can hold values of type %G_TYPE_INT.
</para>

@value: a valid #GValue structure


<!-- ##### MACRO G_TYPE_PARAM_INT ##### -->
<para>
The #GType of #GParamSpecInt.
</para>



<!-- ##### STRUCT GParamSpecInt ##### -->
<para>
A #GParamSpec derived structure that contains the meta data for integer properties.
</para>

@parent_instance: private #GParamSpec portion
@minimum:         minimum value for the property specified
@maximum:         maximum value for the property specified
@default_value:   default value for the property specified

<!-- ##### FUNCTION g_param_spec_int ##### -->
<para>
</para>

@name: 
@nick: 
@blurb: 
@minimum: 
@maximum: 
@default_value: 
@flags: 
@Returns: 


<!-- ##### FUNCTION g_value_set_int ##### -->
<para>
Set the contents of a %G_TYPE_INT #GValue to @v_int.
</para>

@value: a valid #GValue of type %G_TYPE_INT
@v_int: integer value to be set


<!-- ##### FUNCTION g_value_get_int ##### -->
<para>
Get the contents of a %G_TYPE_INT #GValue.
</para>

@value:   a valid #GValue of type %G_TYPE_INT
@Returns: integer contents of @value


<!-- ##### MACRO G_IS_PARAM_SPEC_UINT ##### -->
<para>
Return whether the given #GParamSpec is of type %G_TYPE_PARAM_UINT.
</para>

@pspec: a valid #GParamSpec instance


<!-- ##### MACRO G_PARAM_SPEC_UINT ##### -->
<para>
Cast a #GParamSpec instance into a #GParamSpecUInt.
</para>

@pspec: a valid #GParamSpec instance


<!-- ##### MACRO G_VALUE_HOLDS_UINT ##### -->
<para>
Return whether the given #GValue can hold values of type %G_TYPE_UINT.
</para>

@value: a valid #GValue structure


<!-- ##### MACRO G_TYPE_PARAM_UINT ##### -->
<para>
The #GType of #GParamSpecUInt.
</para>



<!-- ##### STRUCT GParamSpecUInt ##### -->
<para>
A #GParamSpec derived structure that contains the meta data for unsigned integer properties.
</para>

@parent_instance: private #GParamSpec portion
@minimum:         minimum value for the property specified
@maximum:         maximum value for the property specified
@default_value:   default value for the property specified

<!-- ##### FUNCTION g_param_spec_uint ##### -->
<para>
</para>

@name: 
@nick: 
@blurb: 
@minimum: 
@maximum: 
@default_value: 
@flags: 
@Returns: 


<!-- ##### FUNCTION g_value_set_uint ##### -->
<para>
Set the contents of a %G_TYPE_UINT #GValue to @v_uint.
</para>

@value:  a valid #GValue of type %G_TYPE_UINT
@v_uint: unsigned integer value to be set


<!-- ##### FUNCTION g_value_get_uint ##### -->
<para>
Get the contents of a %G_TYPE_UINT #GValue.
</para>

@value:   a valid #GValue of type %G_TYPE_UINT
@Returns: unsigned integer contents of @value


<!-- ##### MACRO G_IS_PARAM_SPEC_LONG ##### -->
<para>
Return whether the given #GParamSpec is of type %G_TYPE_PARAM_LONG.
</para>

@pspec: a valid #GParamSpec instance


<!-- ##### MACRO G_PARAM_SPEC_LONG ##### -->
<para>
Cast a #GParamSpec instance into a #GParamSpecLong.
</para>

@pspec: a valid #GParamSpec instance


<!-- ##### MACRO G_VALUE_HOLDS_LONG ##### -->
<para>
Return whether the given #GValue can hold values of type %G_TYPE_LONG.
</para>

@value: a valid #GValue structure


<!-- ##### MACRO G_TYPE_PARAM_LONG ##### -->
<para>
The #GType of #GParamSpecLong.
</para>



<!-- ##### STRUCT GParamSpecLong ##### -->
<para>
A #GParamSpec derived structure that contains the meta data for long integer properties.
</para>

@parent_instance: private #GParamSpec portion
@minimum:         minimum value for the property specified
@maximum:         maximum value for the property specified
@default_value:   default value for the property specified

<!-- ##### FUNCTION g_param_spec_long ##### -->
<para>
</para>

@name: 
@nick: 
@blurb: 
@minimum: 
@maximum: 
@default_value: 
@flags: 
@Returns: 


<!-- ##### FUNCTION g_value_set_long ##### -->
<para>
Set the contents of a %G_TYPE_LONG #GValue to @v_long.
</para>

@value:  a valid #GValue of type %G_TYPE_LONG
@v_long: long integer value to be set


<!-- ##### FUNCTION g_value_get_long ##### -->
<para>
Get the contents of a %G_TYPE_LONG #GValue.
</para>

@value:   a valid #GValue of type %G_TYPE_LONG
@Returns: long integer contents of @value


<!-- ##### MACRO G_IS_PARAM_SPEC_ULONG ##### -->
<para>
Return whether the given #GParamSpec is of type %G_TYPE_PARAM_ULONG.
</para>

@pspec: a valid #GParamSpec instance


<!-- ##### MACRO G_PARAM_SPEC_ULONG ##### -->
<para>
Cast a #GParamSpec instance into a #GParamSpecULong.
</para>

@pspec: a valid #GParamSpec instance


<!-- ##### MACRO G_VALUE_HOLDS_ULONG ##### -->
<para>
Return whether the given #GValue can hold values of type %G_TYPE_ULONG.
</para>

@value: a valid #GValue structure


<!-- ##### MACRO G_TYPE_PARAM_ULONG ##### -->
<para>
The #GType of #GParamSpecULong.
</para>



<!-- ##### STRUCT GParamSpecULong ##### -->
<para>
A #GParamSpec derived structure that contains the meta data for unsigned long integer properties.
</para>

@parent_instance: private #GParamSpec portion
@minimum:         minimum value for the property specified
@maximum:         maximum value for the property specified
@default_value:   default value for the property specified

<!-- ##### FUNCTION g_param_spec_ulong ##### -->
<para>
Create a new #GParamSpecULong instance specifying a %G_TYPE_ULONG property.
</para>

@name: 
@nick: 
@blurb: 
@minimum: 
@maximum: 
@default_value: 
@flags: 
@Returns: 


<!-- ##### FUNCTION g_value_set_ulong ##### -->
<para>
Set the contents of a %G_TYPE_ULONG #GValue to @v_ulong.
</para>

@value:   a valid #GValue of type %G_TYPE_ULONG
@v_ulong: unsigned long integer value to be set


<!-- ##### FUNCTION g_value_get_ulong ##### -->
<para>
Get the contents of a %G_TYPE_ULONG #GValue.
</para>

@value:   a valid #GValue of type %G_TYPE_ULONG
@Returns: unsigned long integer contents of @value


<!-- ##### MACRO G_IS_PARAM_SPEC_INT64 ##### -->
<para>
Return whether the given #GParamSpec is of type %G_TYPE_PARAM_INT64.
</para>

@pspec: a valid #GParamSpec instance


<!-- ##### MACRO G_PARAM_SPEC_INT64 ##### -->
<para>
Cast a #GParamSpec instance into a #GParamSpecInt64.
</para>

@pspec: a valid #GParamSpec instance


<!-- ##### MACRO G_VALUE_HOLDS_INT64 ##### -->
<para>
Return whether the given #GValue can hold values of type %G_TYPE_INT64.
</para>

@value: a valid #GValue structure


<!-- ##### MACRO G_TYPE_PARAM_INT64 ##### -->
<para>
The #GType of #GParamSpecInt64.
</para>



<!-- ##### STRUCT GParamSpecInt64 ##### -->
<para>
A #GParamSpec derived structure that contains the meta data for 64bit integer properties.
</para>

@parent_instance: private #GParamSpec portion
@minimum:         minimum value for the property specified
@maximum:         maximum value for the property specified
@default_value:   default value for the property specified

<!-- ##### FUNCTION g_param_spec_int64 ##### -->
<para>
</para>

@name: 
@nick: 
@blurb: 
@minimum: 
@maximum: 
@default_value: 
@flags: 
@Returns: 


<!-- ##### FUNCTION g_value_set_int64 ##### -->
<para>
Set the contents of a %G_TYPE_INT64 #GValue to @v_int64.
</para>

@value:  a valid #GValue of type %G_TYPE_INT64
@v_int64: 64bit integer value to be set


<!-- ##### FUNCTION g_value_get_int64 ##### -->
<para>
Get the contents of a %G_TYPE_INT64 #GValue.
</para>

@value:   a valid #GValue of type %G_TYPE_INT64
@Returns: 64bit integer contents of @value


<!-- ##### MACRO G_IS_PARAM_SPEC_UINT64 ##### -->
<para>
Return whether the given #GParamSpec is of type %G_TYPE_PARAM_UINT64.
</para>

@pspec: a valid #GParamSpec instance


<!-- ##### MACRO G_PARAM_SPEC_UINT64 ##### -->
<para>
Cast a #GParamSpec instance into a #GParamSpecUInt64.
</para>

@pspec: a valid #GParamSpec instance


<!-- ##### MACRO G_VALUE_HOLDS_UINT64 ##### -->
<para>
Return whether the given #GValue can hold values of type %G_TYPE_UINT64.
</para>

@value: a valid #GValue structure


<!-- ##### MACRO G_TYPE_PARAM_UINT64 ##### -->
<para>
The #GType of #GParamSpecUInt64.
</para>



<!-- ##### STRUCT GParamSpecUInt64 ##### -->
<para>
A #GParamSpec derived structure that contains the meta data for unsigned 64bit integer properties.
</para>

@parent_instance: private #GParamSpec portion
@minimum:         minimum value for the property specified
@maximum:         maximum value for the property specified
@default_value:   default value for the property specified

<!-- ##### FUNCTION g_param_spec_uint64 ##### -->
<para>
</para>

@name: 
@nick: 
@blurb: 
@minimum: 
@maximum: 
@default_value: 
@flags: 
@Returns: 


<!-- ##### FUNCTION g_value_set_uint64 ##### -->
<para>
Set the contents of a %G_TYPE_UINT64 #GValue to @v_uint64.
</para>

@value:   a valid #GValue of type %G_TYPE_UINT64
@v_uint64: unsigned 64bit integer value to be set


<!-- ##### FUNCTION g_value_get_uint64 ##### -->
<para>
Get the contents of a %G_TYPE_UINT64 #GValue.
</para>

@value:   a valid #GValue of type %G_TYPE_UINT64
@Returns: unsigned 64bit integer contents of @value


<!-- ##### MACRO G_IS_PARAM_SPEC_FLOAT ##### -->
<para>
Return whether the given #GParamSpec is of type %G_TYPE_PARAM_FLOAT.
</para>

@pspec: a valid #GParamSpec instance


<!-- ##### MACRO G_PARAM_SPEC_FLOAT ##### -->
<para>
Cast a #GParamSpec instance into a #GParamSpecFloat.
</para>

@pspec: a valid #GParamSpec instance


<!-- ##### MACRO G_VALUE_HOLDS_FLOAT ##### -->
<para>
Return whether the given #GValue can hold values of type %G_TYPE_FLOAT.
</para>

@value: a valid #GValue structure


<!-- ##### MACRO G_TYPE_PARAM_FLOAT ##### -->
<para>
The #GType of #GParamSpecFloat.
</para>



<!-- ##### STRUCT GParamSpecFloat ##### -->
<para>
A #GParamSpec derived structure that contains the meta data for float properties.
</para>

@parent_instance: private #GParamSpec portion
@minimum:         minimum value for the property specified
@maximum:         maximum value for the property specified
@default_value:   default value for the property specified
@epsilon: 

<!-- ##### FUNCTION g_param_spec_float ##### -->
<para>
</para>

@name: 
@nick: 
@blurb: 
@minimum: 
@maximum: 
@default_value: 
@flags: 
@Returns: 


<!-- ##### FUNCTION g_value_set_float ##### -->
<para>
Set the contents of a %G_TYPE_FLOAT #GValue to @v_float.
</para>

@value:     a valid #GValue of type %G_TYPE_FLOAT
@v_float: float value to be set


<!-- ##### FUNCTION g_value_get_float ##### -->
<para>
Get the contents of a %G_TYPE_FLOAT #GValue.
</para>

@value:   a valid #GValue of type %G_TYPE_FLOAT
@Returns: float contents of @value


<!-- ##### MACRO G_IS_PARAM_SPEC_DOUBLE ##### -->
<para>
Return whether the given #GParamSpec is of type %G_TYPE_PARAM_DOUBLE.
</para>

@pspec: a valid #GParamSpec instance


<!-- ##### MACRO G_PARAM_SPEC_DOUBLE ##### -->
<para>
Cast a #GParamSpec instance into a #GParamSpecDouble.
</para>

@pspec: a valid #GParamSpec instance


<!-- ##### MACRO G_VALUE_HOLDS_DOUBLE ##### -->
<para>
Return whether the given #GValue can hold values of type %G_TYPE_DOUBLE.
</para>

@value: a valid #GValue structure


<!-- ##### MACRO G_TYPE_PARAM_DOUBLE ##### -->
<para>
The #GType of #GParamSpecDouble.
</para>



<!-- ##### STRUCT GParamSpecDouble ##### -->
<para>
A #GParamSpec derived structure that contains the meta data for double properties.
</para>

@parent_instance: private #GParamSpec portion
@minimum:         minimum value for the property specified
@maximum:         maximum value for the property specified
@default_value:   default value for the property specified
@epsilon: 

<!-- ##### FUNCTION g_param_spec_double ##### -->
<para>
</para>

@name: 
@nick: 
@blurb: 
@minimum: 
@maximum: 
@default_value: 
@flags: 
@Returns: 


<!-- ##### FUNCTION g_value_set_double ##### -->
<para>
Set the contents of a %G_TYPE_DOUBLE #GValue to @v_double.
</para>

@value:     a valid #GValue of type %G_TYPE_DOUBLE
@v_double: double value to be set


<!-- ##### FUNCTION g_value_get_double ##### -->
<para>
Get the contents of a %G_TYPE_DOUBLE #GValue.
</para>

@value:   a valid #GValue of type %G_TYPE_DOUBLE
@Returns: double contents of @value


<!-- ##### MACRO G_IS_PARAM_SPEC_ENUM ##### -->
<para>
Returns whether the given #GParamSpec is of type %G_TYPE_PARAM_ENUM.
</para>

@pspec: a valid #GParamSpec instance


<!-- ##### MACRO G_PARAM_SPEC_ENUM ##### -->
<para>
Cast a #GParamSpec instance into a #GParamSpecEnum.
</para>

@pspec: a valid #GParamSpec instance


<!-- ##### MACRO G_VALUE_HOLDS_ENUM ##### -->
<para>

</para>

@value: 


<!-- ##### MACRO G_TYPE_PARAM_ENUM ##### -->
<para>
The #GType of #GParamSpecEnum.
</para>



<!-- ##### STRUCT GParamSpecEnum ##### -->
<para>

</para>

@parent_instance: 
@enum_class: 
@default_value: 

<!-- ##### FUNCTION g_param_spec_enum ##### -->
<para>

</para>

@name: 
@nick: 
@blurb: 
@enum_type: 
@default_value: 
@flags: 
@Returns: 


<!-- ##### FUNCTION g_value_set_enum ##### -->
<para>

</para>

@value: 
@v_enum: 


<!-- ##### FUNCTION g_value_get_enum ##### -->
<para>

</para>

@value: 
@Returns: 


<!-- ##### MACRO G_IS_PARAM_SPEC_FLAGS ##### -->
<para>
Returns whether the given #GParamSpec is of type %G_TYPE_PARAM_FLAGS.
</para>

@pspec:  a valid #GParamSpec instance


<!-- ##### MACRO G_PARAM_SPEC_FLAGS ##### -->
<para>
Cast a #GParamSpec instance into a #GParamSpecChar.
</para>

@pspec: a valid #GParamSpec instance


<!-- ##### MACRO G_VALUE_HOLDS_FLAGS ##### -->
<para>

</para>

@value: 


<!-- ##### MACRO G_TYPE_PARAM_FLAGS ##### -->
<para>
The #GType of #GParamSpecFlags.
</para>



<!-- ##### STRUCT GParamSpecFlags ##### -->
<para>

</para>

@parent_instance: 
@flags_class: 
@default_value: 

<!-- ##### FUNCTION g_param_spec_flags ##### -->
<para>

</para>

@name: 
@nick: 
@blurb: 
@flags_type: 
@default_value: 
@flags: 
@Returns: 


<!-- ##### FUNCTION g_value_set_flags ##### -->
<para>

</para>

@value: 
@v_flags: 


<!-- ##### FUNCTION g_value_get_flags ##### -->
<para>

</para>

@value: 
@Returns: 


<!-- ##### MACRO G_IS_PARAM_SPEC_STRING ##### -->
<para>
Returns whether the given #GParamSpec is of type %G_TYPE_PARAM_STRING.
</para>

@pspec: a valid #GParamSpec instance


<!-- ##### MACRO G_PARAM_SPEC_STRING ##### -->
<para>
Casts a #GParamSpec instance into a #GParamSpecString.
</para>

@pspec: a valid #GParamSpec instance


<!-- ##### MACRO G_VALUE_HOLDS_STRING ##### -->
<para>

</para>

@value: 


<!-- ##### MACRO G_TYPE_PARAM_STRING ##### -->
<para>
The #GType of #GParamSpecString.
</para>



<!-- ##### STRUCT GParamSpecString ##### -->
<para>

</para>

@parent_instance: 
@default_value: 
@cset_first: 
@cset_nth: 
@substitutor: 
@null_fold_if_empty: 
@ensure_non_null: 

<!-- ##### TYPEDEF gchararray ##### -->
<para>

</para>


<!-- ##### FUNCTION g_param_spec_string ##### -->
<para>

</para>

@name: 
@nick: 
@blurb: 
@default_value: 
@flags: 
@Returns: 


<!-- ##### FUNCTION g_value_set_string ##### -->
<para>

</para>

@value: 
@v_string: 


<!-- ##### FUNCTION g_value_set_static_string ##### -->
<para>

</para>

@value: 
@v_string: 


<!-- ##### FUNCTION g_value_set_string_take_ownership ##### -->
<para>

</para>

@value: 
@v_string: 


<!-- ##### FUNCTION g_value_get_string ##### -->
<para>

</para>

@value: 
@Returns: 


<!-- ##### FUNCTION g_value_dup_string ##### -->
<para>

</para>

@value: 
@Returns: 


<!-- ##### MACRO G_IS_PARAM_SPEC_PARAM ##### -->
<para>
Returns whether the given #GParamSpec is of type %G_TYPE_PARAM_PARAM.
</para>

@pspec: a valid #GParamSpec instance


<!-- ##### MACRO G_PARAM_SPEC_PARAM ##### -->
<para>
Casts a #GParamSpec instance into a #GParamSpecParam.
</para>

@pspec: a valid #GParamSpec instance


<!-- ##### MACRO G_VALUE_HOLDS_PARAM ##### -->
<para>

</para>

@value: 


<!-- ##### MACRO G_TYPE_PARAM_PARAM ##### -->
<para>
The #GType of #GParamSpecParam.
</para>



<!-- ##### STRUCT GParamSpecParam ##### -->
<para>

</para>

@parent_instance: 

<!-- ##### FUNCTION g_param_spec_param ##### -->
<para>

</para>

@name: 
@nick: 
@blurb: 
@param_type: 
@flags: 
@Returns: 


<!-- ##### FUNCTION g_value_set_param ##### -->
<para>

</para>

@value: 
@param: 


<!-- ##### FUNCTION g_value_set_param_take_ownership ##### -->
<para>

</para>

@value: 
@param: 


<!-- ##### FUNCTION g_value_get_param ##### -->
<para>

</para>

@value: 
@Returns: 


<!-- ##### FUNCTION g_value_dup_param ##### -->
<para>

</para>

@value: 
@Returns: 


<!-- ##### MACRO G_IS_PARAM_SPEC_BOXED ##### -->
<para>
Return whether the given #GParamSpec is of type %G_TYPE_PARAM_BOXED.
</para>

@pspec: a valid #GParamSpec instance


<!-- ##### MACRO G_PARAM_SPEC_BOXED ##### -->
<para>
Cast a #GParamSpec instance into a #GParamSpecBoxed.
</para>

@pspec: a valid #GParamSpec instance


<!-- ##### MACRO G_VALUE_HOLDS_BOXED ##### -->
<para>
Return whether the given #GValue can hold values derived from type %G_TYPE_BOXED.
</para>

@value: a valid #GValue structure


<!-- ##### MACRO G_TYPE_PARAM_BOXED ##### -->
<para>
The #GType of #GParamSpecBoxed.
</para>



<!-- ##### STRUCT GParamSpecBoxed ##### -->
<para>
A #GParamSpec derived structure that contains the meta data for boxed properties.
</para>

@parent_instance: private #GParamSpec portion

<!-- ##### FUNCTION g_param_spec_boxed ##### -->
<para>
</para>

@name: 
@nick: 
@blurb: 
@boxed_type: 
@flags: 
@Returns: 


<!-- ##### FUNCTION g_value_set_boxed ##### -->
<para>
Set the contents of a %G_TYPE_BOXED derived #GValue to @v_boxed.
</para>

@value:   a valid #GValue of %G_TYPE_BOXED derived type
@v_boxed: boxed value to be set


<!-- ##### FUNCTION g_value_set_static_boxed ##### -->
<para>
Set the contents of a %G_TYPE_BOXED derived #GValue to @v_boxed.
The boxed value is assumed to be static, and is thus not duplicated
when setting the #GValue.
</para>

@value:   a valid #GValue of %G_TYPE_BOXED derived type
@v_boxed: static boxed value to be set


<!-- ##### FUNCTION g_value_set_boxed_take_ownership ##### -->
<para>
This is an internal function introduced mainly for C marshallers.
</para>

@value:   a valid #GValue of %G_TYPE_BOXED derived type
@v_boxed: duplicated unowned boxed value to be set


<!-- ##### FUNCTION g_value_get_boxed ##### -->
<para>
Get the contents of a %G_TYPE_BOXED derived #GValue.
</para>

@value:   a valid #GValue of %G_TYPE_BOXED derived type
@Returns: boxed contents of @value


<!-- ##### FUNCTION g_value_dup_boxed ##### -->
<para>
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);
</para>

@value:   a valid #GValue of %G_TYPE_BOXED derived type
@Returns: boxed contents of @value


<!-- ##### MACRO G_IS_PARAM_SPEC_POINTER ##### -->
<para>
Returns whether the given #GParamSpec is of type %G_TYPE_PARAM_POINTER.
</para>

@pspec: a valid #GParamSpec instance


<!-- ##### MACRO G_PARAM_SPEC_POINTER ##### -->
<para>
Casts a #GParamSpec instance into a #GParamSpecPointer.
</para>

@pspec: a valid #GParamSpec instance


<!-- ##### MACRO G_VALUE_HOLDS_POINTER ##### -->
<para>

</para>

@value: 


<!-- ##### MACRO G_TYPE_PARAM_POINTER ##### -->
<para>
The #GType of #GParamSpecPointer.
</para>



<!-- ##### STRUCT GParamSpecPointer ##### -->
<para>

</para>

@parent_instance: 

<!-- ##### FUNCTION g_param_spec_pointer ##### -->
<para>

</para>

@name: 
@nick: 
@blurb: 
@flags: 
@Returns: 


<!-- ##### FUNCTION g_value_set_pointer ##### -->
<para>

</para>

@value: 
@v_pointer: 


<!-- ##### FUNCTION g_value_get_pointer ##### -->
<para>

</para>

@value: 
@Returns: 


<!-- ##### MACRO G_IS_PARAM_SPEC_OBJECT ##### -->
<para>
Returns whether the given #GParamSpec is of type %G_TYPE_PARAM_OBJECT.
</para>

@pspec: a valid #GParamSpec instance


<!-- ##### MACRO G_PARAM_SPEC_OBJECT ##### -->
<para>
Casts a #GParamSpec instance into a #GParamSpecObject.
</para>

@pspec: a valid #GParamSpec instance


<!-- ##### MACRO G_VALUE_HOLDS_OBJECT ##### -->
<para>

</para>

@value: 


<!-- ##### MACRO G_TYPE_PARAM_OBJECT ##### -->
<para>
The #GType of #GParamSpecObject.
</para>



<!-- ##### STRUCT GParamSpecObject ##### -->
<para>

</para>

@parent_instance: 

<!-- ##### FUNCTION g_param_spec_object ##### -->
<para>

</para>

@name: 
@nick: 
@blurb: 
@object_type: 
@flags: 
@Returns: 


<!-- ##### FUNCTION g_value_set_object ##### -->
<para>

</para>

@value: 
@v_object: 


<!-- ##### FUNCTION g_value_set_object_take_ownership ##### -->
<para>

</para>

@value: 
@v_object: 


<!-- ##### FUNCTION g_value_get_object ##### -->
<para>

</para>

@value: 
@Returns: 


<!-- ##### FUNCTION g_value_dup_object ##### -->
<para>

</para>

@value: 
@Returns: 


<!-- ##### MACRO G_IS_PARAM_SPEC_UNICHAR ##### -->
<para>
Return whether the given #GParamSpec is of type %G_TYPE_PARAM_UNICHAR.
</para>

@pspec: a valid #GParamSpec instance


<!-- ##### MACRO G_PARAM_SPEC_UNICHAR ##### -->
<para>
Cast a #GParamSpec instance into a #GParamSpecUnichar.
</para>

@pspec: a valid #GParamSpec instance


<!-- ##### MACRO G_TYPE_PARAM_UNICHAR ##### -->
<para>
The #GType of #GParamSpecUnichar.
</para>



<!-- ##### STRUCT GParamSpecUnichar ##### -->
<para>
A #GParamSpec derived structure that contains the meta data for unichar (unsigned integer) properties.
</para>

@parent_instance: private #GParamSpec portion
@default_value:   default value for the property specified

<!-- ##### FUNCTION g_param_spec_unichar ##### -->
<para>
</para>

@name: 
@nick: 
@blurb: 
@default_value: 
@flags: 
@Returns: 


<!-- ##### MACRO G_IS_PARAM_SPEC_VALUE_ARRAY ##### -->
<para>
Return whether the given #GParamSpec is of type %G_TYPE_PARAM_VALUE_ARRAY.
</para>

@pspec: a valid #GParamSpec instance


<!-- ##### MACRO G_PARAM_SPEC_VALUE_ARRAY ##### -->
<para>
Cast a #GParamSpec instance into a #GParamSpecValueArray.
</para>

@pspec: a valid #GParamSpec instance


<!-- ##### MACRO G_TYPE_PARAM_VALUE_ARRAY ##### -->
<para>
The #GType of #GParamSpecValueArray.
</para>



<!-- ##### STRUCT GParamSpecValueArray ##### -->
<para>
A #GParamSpec derived structure that contains the meta data for #GValueArray properties.
</para>

@parent_instance:  private #GParamSpec portion
@element_spec:     a #GParamSpec describing the elements contained in arrays of this property, may be %NULL
@fixed_n_elements: if greater than 0, arrays of this property will always have this many elements

<!-- ##### FUNCTION g_param_spec_value_array ##### -->
<para>
</para>

@name: 
@nick: 
@blurb: 
@element_spec: 
@flags: 
@Returns: 


