<!-- ##### 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>
<para>
Parameter names need to start with a letter (a-z or A-Z). Subsequent
characters can be letters, numbers or a '-'.
All other characters are replaced by a '-' during construction.
</para>

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

<!-- ##### SECTION Stability_Level ##### -->


<!-- ##### 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>
Creates a new #GParamSpecBoolean instance specifying a %G_TYPE_BOOLEAN 
property.
</para>
<para> 
See g_param_spec_internal() for details on property names.
</para>

@name:          canonical name of the property specified
@nick:          nick name for the property specified
@blurb:         description of the property specified
@default_value: default value for the property specified
@flags:         flags for the property specified
@Returns: a newly created parameter specification


<!-- ##### 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>
Creates a new #GParamSpecChar instance specifying a %G_TYPE_CHAR property.
</para>

@name:          canonical name of the property specified
@nick:          nick name for the property specified
@blurb:         description of the property specified
@minimum:       minimum value for the property specified
@maximum:       maximum value for the property specified
@default_value: default value for the property specified
@flags:         flags for the property specified
@Returns: a newly created parameter specification


<!-- ##### 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>
Creates a new #GParamSpecUChar instance specifying a %G_TYPE_UCHAR property.
</para>

@name:          canonical name of the property specified
@nick:          nick name for the property specified
@blurb:         description of the property specified
@minimum:       minimum value for the property specified
@maximum:       maximum value for the property specified
@default_value: default value for the property specified
@flags:         flags for the property specified
@Returns: a newly created parameter specification


<!-- ##### 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>
Creates a new #GParamSpecInt instance specifying a %G_TYPE_INT property.
</para>
<para>
See g_param_spec_internal() for details on property names.
</para>

@name:          canonical name of the property specified
@nick:          nick name for the property specified
@blurb:         description of the property specified
@minimum:       minimum value for the property specified
@maximum:       maximum value for the property specified
@default_value: default value for the property specified
@flags:         flags for the property specified
@Returns: a newly created parameter specification


<!-- ##### 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>
Creates a new #GParamSpecUInt instance specifying a %G_TYPE_UINT property.
</para>
<para>
See g_param_spec_internal() for details on property names.
</para>

@name:          canonical name of the property specified
@nick:          nick name for the property specified
@blurb:         description of the property specified
@minimum:       minimum value for the property specified
@maximum:       maximum value for the property specified
@default_value: default value for the property specified
@flags:         flags for the property specified
@Returns:  a newly created parameter specification


<!-- ##### 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>
Creates a new #GParamSpecLong instance specifying a %G_TYPE_LONG property.
</para>
<para> 
See g_param_spec_internal() for details on property names.
</para>

@name:          canonical name of the property specified
@nick:          nick name for the property specified
@blurb:         description of the property specified
@minimum:       minimum value for the property specified
@maximum:       maximum value for the property specified
@default_value: default value for the property specified
@flags:         flags for the property specified
@Returns: a newly created parameter specification


<!-- ##### 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>
Creates a new #GParamSpecULong instance specifying a %G_TYPE_ULONG property.
</para>
<para>
See g_param_spec_internal() for details on property names.
</para>

@name:          canonical name of the property specified
@nick:          nick name for the property specified
@blurb:         description of the property specified
@minimum:       minimum value for the property specified
@maximum:       maximum value for the property specified
@default_value: default value for the property specified
@flags:         flags for the property specified
@Returns:   a newly created parameter specification


<!-- ##### 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>
Creates a new #GParamSpecInt64 instance specifying a %G_TYPE_INT64 property.
</para>
<para>
See g_param_spec_internal() for details on property names.
</para>

@name:          canonical name of the property specified
@nick:          nick name for the property specified
@blurb:         description of the property specified
@minimum:       minimum value for the property specified
@maximum:       maximum value for the property specified
@default_value: default value for the property specified
@flags:         flags for the property specified
@Returns: a newly created parameter specification


<!-- ##### 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>
Creates a new #GParamSpecUInt64 instance specifying a %G_TYPE_UINT64 
property.
</para>
<para>
See g_param_spec_internal() for details on property names.
</para>

@name:          canonical name of the property specified
@nick:          nick name for the property specified
@blurb:         description of the property specified
@minimum:       minimum value for the property specified
@maximum:       maximum value for the property specified
@default_value: default value for the property specified
@flags:         flags for the property specified
@Returns: a newly created parameter specification


<!-- ##### 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:         values closer than @epsilon will be considered identical
                  by g_param_values_cmp(); the default value is 1e-30.

<!-- ##### FUNCTION g_param_spec_float ##### -->
<para>
Creates a new #GParamSpecFloat instance specifying a %G_TYPE_FLOAT property.
</para>
<para> 
See g_param_spec_internal() for details on property names.
</para>

@name:          canonical name of the property specified
@nick:          nick name for the property specified
@blurb:         description of the property specified
@minimum:       minimum value for the property specified
@maximum:       maximum value for the property specified
@default_value: default value for the property specified
@flags:         flags for the property specified
@Returns: a newly created parameter specification


<!-- ##### 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:         values closer than @epsilon will be considered identical
                  by g_param_values_cmp(); the default value is 1e-90.

<!-- ##### FUNCTION g_param_spec_double ##### -->
<para>
Creates a new #GParamSpecDouble instance specifying a %G_TYPE_DOUBLE 
property.
</para>
<para> 
See g_param_spec_internal() for details on property names.
</para>

@name:          canonical name of the property specified
@nick:          nick name for the property specified
@blurb:         description of the property specified
@minimum:       minimum value for the property specified
@maximum:       maximum value for the property specified
@default_value: default value for the property specified
@flags:         flags for the property specified
@Returns:  a newly created parameter specification


<!-- ##### 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>
Return whether the given #GValue can hold values derived from type %G_TYPE_ENUM.
</para>

@value: a valid #GValue structure


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



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

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

<!-- ##### FUNCTION g_param_spec_enum ##### -->
<para>
Creates a new #GParamSpecEnum instance specifying a %G_TYPE_ENUM
property.
</para>
<para> 
See g_param_spec_internal() for details on property names.
</para>

@name:          canonical name of the property specified
@nick:          nick name for the property specified
@blurb:         description of the property specified
@enum_type:     a #GType derived from %G_TYPE_ENUM
@default_value: default value for the property specified
@flags:         flags for the property specified
@Returns:  a newly created parameter specification


<!-- ##### FUNCTION g_value_set_enum ##### -->
<para>
Set the contents of a %G_TYPE_ENUM #GValue to @v_enum.
</para>

@value:  a valid #GValue whose type is derived from %G_TYPE_ENUM
@v_enum: enum value to be set


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

@value:   a valid #GValue whose type is derived from %G_TYPE_ENUM
@Returns: enum contents of @value


<!-- ##### 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 #GParamSpecFlags.
</para>

@pspec: a valid #GParamSpec instance


<!-- ##### MACRO G_VALUE_HOLDS_FLAGS ##### -->
<para>
Returns whether the given #GValue can hold values derived from type %G_TYPE_FLAGS.
</para>

@value: a valid #GValue structure


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



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

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

<!-- ##### FUNCTION g_param_spec_flags ##### -->
<para>
Creates a new #GParamSpecEnum instance specifying a %G_TYPE_FLAGS
property.
</para>
<para> 
See g_param_spec_internal() for details on property names.
</para>

@name:          canonical name of the property specified
@nick:          nick name for the property specified
@blurb:         description of the property specified
@flags_type:     a #GType derived from %G_TYPE_FLAGS
@default_value: default value for the property specified
@flags:         flags for the property specified
@Returns:  a newly created parameter specification


<!-- ##### FUNCTION g_value_set_flags ##### -->
<para>
Set the contents of a %G_TYPE_FLAGS #GValue to @v_flags.
</para>

@value:  a valid #GValue whose type is derived from %G_TYPE_FLAGS
@v_flags: flags value to be set


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

@value:   a valid #GValue whose type is derived from %G_TYPE_FLAGS
@Returns: flags contents of @value


<!-- ##### 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>
Return whether the given #GValue can hold values of type %G_TYPE_STRING.
</para>

@value: a valid #GValue structure


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



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

@parent_instance: private #GParamSpec portion
@default_value:   default value for the property specified
@cset_first: a string containing the allowed values for the first byte
@cset_nth: a string containing the allowed values for the subsequent bytes
@substitutor: the replacement byte for bytes which don't match @cset_first or @cset_nth.
@null_fold_if_empty: replace empty string by %NULL
@ensure_non_null:  replace %NULL strings by an empty string

<!-- ##### TYPEDEF gchararray ##### -->
<para>
A C representable type name for #G_TYPE_STRING.
</para>


<!-- ##### FUNCTION g_param_spec_string ##### -->
<para>
Creates a new #GParamSpecString instance.
</para>
<para> 
See g_param_spec_internal() for details on property names.
</para>

@name:          canonical name of the property specified
@nick:          nick name for the property specified
@blurb:         description of the property specified
@default_value: default value for the property specified
@flags:         flags for the property specified
@Returns:  a newly created parameter specification


<!-- ##### FUNCTION g_value_set_string ##### -->
<para>
Set the contents of a %G_TYPE_STRING #GValue to @v_string.
</para>

@value:  a valid #GValue of type %G_TYPE_STRING
@v_string: string to be set


<!-- ##### FUNCTION g_value_set_static_string ##### -->
<para>
Set the contents of a %G_TYPE_STRING #GValue to @v_string.
The string is assumed to be static, and is thus not duplicated
when setting the #GValue.
</para>

@value:  a valid #GValue of type %G_TYPE_STRING
@v_string: static string to be set


<!-- ##### FUNCTION g_value_take_string ##### -->
<para>
Sets the contents of a %G_TYPE_STRING #GValue to @v_string.
</para>

@value:   a valid #GValue of type %G_TYPE_STRING
@v_string: duplicated unowned string to be set
@Since: 2.4


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

@value:   a valid #GValue of type %G_TYPE_STRING
@v_string: duplicated unowned string to be set
<!-- # Unused Parameters # -->
@Deprecated:2.4: Use g_value_take_string() instead.


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

@value:   a valid #GValue of type %G_TYPE_STRING
@Returns: string content of @value


<!-- ##### FUNCTION g_value_dup_string ##### -->
<para>
Get a copy the contents of a %G_TYPE_STRING #GValue.
</para>

@value:   a valid #GValue of type %G_TYPE_STRING
@Returns: a newly allocated copy of the string content of @value


<!-- ##### 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>
Return whether the given #GValue can hold values derived from type %G_TYPE_PARAM.
</para>

@value: a valid #GValue structure


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



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

@parent_instance: private #GParamSpec portion

<!-- ##### FUNCTION g_param_spec_param ##### -->
<para>
Creates a new #GParamSpecParam instance specifying a %G_TYPE_PARAM
property.
</para>
<para> 
See g_param_spec_internal() for details on property names.
</para>

@name:          canonical name of the property specified
@nick:          nick name for the property specified
@blurb:         description of the property specified
@param_type:    a #GType derived from %G_TYPE_PARAM
@flags:         flags for the property specified
@Returns:  a newly created parameter specification
<!-- # Unused Parameters # -->
@default_value: default value for the property specified


<!-- ##### FUNCTION g_value_set_param ##### -->
<para>
Set the contents of a %G_TYPE_PARAM #GValue to @param.
</para>

@value:  a valid #GValue of type %G_TYPE_PARAM
@param: the #GParamSpec to be set


<!-- ##### FUNCTION g_value_take_param ##### -->
<para>
Sets the contents of a %G_TYPE_PARAM #GValue to @param and
takes over the ownership of the callers reference to @param; 
the caller doesn't have to unref it any more.
</para>

@value:  a valid #GValue of type %G_TYPE_PARAM
@param: the #GParamSpec to be set
@Since: 2.4


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

@value:  a valid #GValue of type %G_TYPE_PARAM
@param: the #GParamSpec to be set
<!-- # Unused Parameters # -->
@Deprecated:2.4: Use g_value_take_param() instead.


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

@value: a valid #GValue whose type is derived from %G_TYPE_PARAM
@Returns: #GParamSpec content of @value


<!-- ##### FUNCTION g_value_dup_param ##### -->
<para>
Get the contents of a %G_TYPE_PARAM #GValue, increasing its reference count.
</para>

@value: a valid #GValue whose type is derived from %G_TYPE_PARAM
@Returns: #GParamSpec content of @value, should be unreferenced when no longer needed.


<!-- ##### 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>
Creates a new #GParamSpecBoxed instance specifying a %G_TYPE_BOXED 
derived property.
</para>
<para> 
See g_param_spec_internal() for details on property names.
</para>

@name:          canonical name of the property specified
@nick:          nick name for the property specified
@blurb:         description of the property specified
@boxed_type:    %G_TYPE_BOXED derived type of this property
@flags:         flags for the property specified
@Returns: a newly created parameter specification


<!-- ##### 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_take_boxed ##### -->
<para>
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.
</para>

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


<!-- ##### 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
<!-- # Unused Parameters # -->
@Deprecated:2.4: Use g_value_take_boxed() instead.


<!-- ##### 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>
Return whether the given #GValue can hold values of type %G_TYPE_POINTER.
</para>

@value: a valid #GValue structure


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



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

@parent_instance: private #GParamSpec portion

<!-- ##### FUNCTION g_param_spec_pointer ##### -->
<para>
Creates a new #GParamSpecPoiner instance specifying a pointer property.
</para>
<para> 
See g_param_spec_internal() for details on property names.
</para>

@name:          canonical name of the property specified
@nick:          nick name for the property specified
@blurb:         description of the property specified
@flags:         flags for the property specified
@Returns: a newly created parameter specification


<!-- ##### FUNCTION g_value_set_pointer ##### -->
<para>
Set the contents of a pointer #GValue to @v_pointer.
</para>

@value:   a valid #GValue of %G_TYPE_POINTER
@v_pointer: pointer value to be set


<!-- ##### FUNCTION g_value_get_pointer ##### -->
<para>
Get the contents of a pointer #GValue.
</para>

@value:   a valid #GValue of %G_TYPE_POINTER
@Returns: pointer contents of @value


<!-- ##### 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>
Return whether the given #GValue can hold values derived from type %G_TYPE_OBJECT.
</para>

@value: a valid #GValue structure


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



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

@parent_instance: private #GParamSpec portion

<!-- ##### FUNCTION g_param_spec_object ##### -->
<para>
Creates a new #GParamSpecBoxed instance specifying a %G_TYPE_OBJECT 
derived property.
</para>
<para> 
See g_param_spec_internal() for details on property names.
</para>

@name:          canonical name of the property specified
@nick:          nick name for the property specified
@blurb:         description of the property specified
@object_type:   %G_TYPE_OBJECT derived type of this property
@flags:         flags for the property specified
@Returns: a newly created parameter specification


<!-- ##### FUNCTION g_value_set_object ##### -->
<para>
Set the contents of a %G_TYPE_OBJECT derived #GValue to @v_object.
</para>

@value:   a valid #GValue of %G_TYPE_OBJECT derived type
@v_object: object value to be set


<!-- ##### FUNCTION g_value_take_object ##### -->
<para>
Sets the contents of a %G_TYPE_OBJECT derived #GValue to @v_object 
and takes over the ownership of the callers reference to @v_object; 
the caller doesn't have to unref it any more.
</para>

@value:  a valid #GValue of %G_TYPE_OBJECT derived type
@v_object: object value to be set
@Since: 2.4


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

@value:  a valid #GValue of %G_TYPE_OBJECT derived type
@v_object: object value to be set
<!-- # Unused Parameters # -->
@Deprecated:2.4: Use g_value_take_object() instead.


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

@value:   a valid #GValue of %G_TYPE_OBJECT derived type
@Returns: object contents of @value


<!-- ##### FUNCTION g_value_dup_object ##### -->
<para>
Get the contents of a %G_TYPE_OBJECT derived #GValue, increasing its reference count.
</para>

@value: a valid #GValue whose type is derived from %G_TYPE_OBJECT
@Returns: object content of @value, should be unreferenced when no longer needed.


<!-- ##### 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>
Creates a new #GParamSpecUnichar instance specifying a %G_TYPE_UINT 
property. #GValue structures for this property can be accessed with 
g_value_set_uint() and g_value_get_uint().
</para>
<para>
See g_param_spec_internal() for details on property names.
</para>

@name:          canonical name of the property specified
@nick:          nick name for the property specified
@blurb:         description of the property specified
@default_value: default value for the property specified
@flags:         flags for the property specified
@Returns: a newly created parameter specification


<!-- ##### 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>
Creates a new #GParamSpecValueArray instance specifying a 
%G_TYPE_VALUE_ARRAY property. %G_TYPE_VALUE_ARRAY is a %G_TYPE_BOXED 
type, as such, #GValue structures for this property can be accessed 
with g_value_set_boxed() and g_value_get_boxed().
</para>
<para>
See g_param_spec_internal() for details on property names.
</para>

@name:          canonical name of the property specified
@nick:          nick name for the property specified
@blurb:         description of the property specified
@element_spec:  a #GParamSpec describing the elements contained in 
                arrays of this property, may be %NULL
@flags:         flags for the property specified
@Returns: a newly created parameter specification


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

@pspec: a #GParamSpec
@Since: 2.4


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

@pspec:  a #GParamSpec
@Since: 2.4


<!-- ##### MACRO G_TYPE_PARAM_OVERRIDE ##### -->
<para>
The #GType of #GParamSpecOverride.
</para>

@Since: 2.4


<!-- ##### STRUCT GParamSpecOverride ##### -->
<para>
This is a type of #GParamSpec type that simply redirects operations to
another paramspec.  All operations other than getting or
setting the value are redirected, including accessing the nick and
blurb, validating a value, and so forth. See
g_param_spec_get_redirect_target() for retrieving the overidden
property. #GParamSpecOverride is used in implementing
g_object_class_override_property(), and will not be directly useful
unless you are implementing a new base type similar to GObject.
</para>

@Since: 2.4

<!-- ##### FUNCTION g_param_spec_override ##### -->
<para>
Creates a new property of type #GParamSpecOverride. This is used
to direct operations to another paramspec, and will not be directly
useful unless you are implementing a new base type similar to GObject.
</para>

@name: the name of the property.
@overridden: The property that is being overridden
@Returns: the newly created #GParamSpec
@Since: 2.4


