<!-- ##### SECTION Title ##### -->
GParamSpec

<!-- ##### SECTION Short_Description ##### -->
Metadata for parameter specifications

<!-- ##### SECTION Long_Description ##### -->
<para>
#GParamSpec is an object structure that encapsulates the metadata
required to specify parameters, such as e.g. #GObject properties.
</para>

<!-- ##### SECTION See_Also ##### -->
<para>
g_object_class_install_property(), g_object_set(), g_object_get(),
g_object_set_property(), g_object_get_property(), g_value_register_transform_func()
</para>

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


<!-- ##### MACRO G_TYPE_IS_PARAM ##### -->
<para>
Returns whether @type "is a" %G_TYPE_PARAM.
</para>

@type: a #GType ID


<!-- ##### MACRO G_PARAM_SPEC ##### -->
<para>
Casts a derived #GParamSpec object (e.g. of type #GParamSpecInt) into
a #GParamSpec object.
</para>

@pspec: a valid #GParamSpec


<!-- ##### MACRO G_IS_PARAM_SPEC ##### -->
<para>
Checks whether @pspec "is a" valid #GParamSpec structure of type %G_TYPE_PARAM
or derived.
</para>

@pspec: a #GParamSpec


<!-- ##### MACRO G_PARAM_SPEC_CLASS ##### -->
<para>
Casts a derived #GParamSpecClass structure into a #GParamSpecClass structure.
</para>

@pclass: a valid #GParamSpecClass


<!-- ##### MACRO G_IS_PARAM_SPEC_CLASS ##### -->
<para>
Checks whether @pclass "is a" valid #GParamSpecClass structure of type 
%G_TYPE_PARAM or derived.
</para>

@pclass: a #GParamSpecClass


<!-- ##### MACRO G_PARAM_SPEC_GET_CLASS ##### -->
<para>
Retrieves the #GParamSpecClass of a #GParamSpec.
</para>

@pspec: a valid #GParamSpec


<!-- ##### MACRO G_PARAM_SPEC_TYPE ##### -->
<para>
Retrieves the #GType of this @pspec.
</para>

@pspec: a valid #GParamSpec


<!-- ##### MACRO G_PARAM_SPEC_TYPE_NAME ##### -->
<para>
Retrieves the #GType name of this @pspec.
</para>

@pspec: a valid #GParamSpec


<!-- ##### MACRO G_PARAM_SPEC_VALUE_TYPE ##### -->
<para>
Retrieves the #GType to initialize a #GValue for this parameter.
</para>

@pspec: a valid #GParamSpec


<!-- ##### STRUCT GParamSpec ##### -->
<para>
All fields of the <structname>GParamSpec</structname> struct are private and
should not be used directly, except for the following:
</para>

@g_type_instance: private #GTypeInstance portion
@name:            name of this parameter
@flags:           #GParamFlags flags for this parameter
@value_type:      the #GValue type for this parameter
@owner_type:      #GType type that uses (introduces) this paremeter

<!-- ##### STRUCT GParamSpecClass ##### -->
<para>
The class structure for the <structname>GParamSpec</structname> type.
Normally, <structname>GParamSpec</structname> classes are filled by
g_param_type_register_static().
</para>

@g_type_class: the parent class
@value_type: the #GValue type for this parameter
@finalize: The instance finalization function (optional), should chain 
  up to the finalize method of the parent class.
@value_set_default: Resets a @value to the default value for this type
  (recommended, the default is g_value_reset()), see 
  g_param_value_set_default().
@value_validate: Ensures that the contents of @value comply with the 
  specifications set out by this type (optional), see 
  g_param_value_set_validate().
@values_cmp: Compares @value1 with @value2 according to this type
  (recommended, the default is memcmp()), see g_param_values_cmp().

<!-- ##### ENUM GParamFlags ##### -->
<para>
Through the #GParamFlags flag values, certain aspects of parameters
can be configured.
</para>

@G_PARAM_READABLE:       the parameter is readable
@G_PARAM_WRITABLE:       the parameter is writable
@G_PARAM_CONSTRUCT:      the parameter will be set upon object construction
@G_PARAM_CONSTRUCT_ONLY: the parameter will only be set upon object construction
@G_PARAM_LAX_VALIDATION: upon parameter conversion (see g_param_value_convert())
                         strict validation is not required
@G_PARAM_PRIVATE: 

<!-- ##### MACRO G_PARAM_READWRITE ##### -->
<para>
#GParamFlags value alias for %G_PARAM_READABLE | %G_PARAM_WRITABLE.
</para>



<!-- ##### MACRO G_PARAM_MASK ##### -->
<para>
Mask containing the bits of #GParamSpec.flags which are reserved for GLib.
</para>



<!-- ##### MACRO G_PARAM_USER_SHIFT ##### -->
<para>
Minimum shift count to be used for user defined flags, to be stored in
#GParamSpec.flags.
</para>



<!-- ##### FUNCTION g_param_spec_ref ##### -->
<para>
Increments the reference count of @pspec.
</para>

@pspec:   a valid #GParamSpec
@Returns: the #GParamSpec that was passed into this function


<!-- ##### FUNCTION g_param_spec_unref ##### -->
<para>
Decrements the reference count of a @pspec.
</para>

@pspec: a valid #GParamSpec


<!-- ##### FUNCTION g_param_spec_sink ##### -->
<para>
The initial reference count of a newly created #GParamSpec is 1, even 
though no one has explicitly called g_param_spec_ref() on it yet. So the 
initial reference count is flagged as "floating", until someone calls 
<literal>g_param_spec_ref (@pspec); g_param_spec_sink (@pspec);</literal>
in sequence on it, taking over the initial reference count (thus
ending up with a @pspec that has a reference count of 1 still, but is
not flagged "floating" anymore).
</para>

@pspec: a valid #GParamSpec


<!-- ##### FUNCTION g_param_value_set_default ##### -->
<para>
Sets @value to its default value as specified in @pspec.
</para>

@pspec: a valid #GParamSpec
@value: a #GValue of correct type for @pspec


<!-- ##### FUNCTION g_param_value_defaults ##### -->
<para>
Checks whether @value contains the default value as specified in @pspec.
</para>

@pspec:   a valid #GParamSpec
@value:   a #GValue of correct type for @pspec
@Returns: whether @value contains the canonical defualt for this @pspec


<!-- ##### FUNCTION g_param_value_validate ##### -->
<para>
Ensures that the contents of @value comply with the specifications
set out by @pspec. For example, a #GParamSpecInt might require
that integers stored in @value may not be smaller than -42 and not be
greater than +42. If @value contains an integer outside of this range,
it is modified accordingly, so the resulting value will fit into the
range -42 .. +42.
</para>

@pspec:   a valid #GParamSpec
@value:   a #GValue of correct type for @pspec
@Returns: whether modifying @value was necessary to ensure validity


<!-- ##### FUNCTION g_param_value_convert ##### -->
<para>
Transforms @src_value into @dest_value if possible, and then validates 
@dest_value, in order for it to conform to @pspec.
If @strict_validation is %TRUE this function will only succeed if
the transformed @dest_value complied to @pspec without modifications.

See also g_value_type_transformable(), g_value_transform() and
g_param_value_validate().
</para>

@pspec:             a valid #GParamSpec
@src_value:         souce #GValue
@dest_value:        destination #GValue of correct type for @pspec
@strict_validation: %TRUE requires @dest_value to conform to @pspec without modifications
@Returns:           %TRUE if transformation and validation were successfull,
                    %FALSE otherwise and @dest_value is left untouched.


<!-- ##### FUNCTION g_param_values_cmp ##### -->
<para>
Compares @value1 with @value2 according to @pspec, and return -1, 0 or +1,
if @value1 is found to be less than, equal to or greater than @value2, 
respectively.
</para>

@pspec:   a valid #GParamSpec
@value1:  a #GValue of correct type for @pspec
@value2:  a #GValue of correct type for @pspec
@Returns: -1, 0 or +1, for a less than, equal to or greater than result


<!-- ##### FUNCTION g_param_spec_get_name ##### -->
<para>
Returns the name of a #GParamSpec.
</para>

@pspec: a valid #GParamSpec
@Returns: the name of @pspec.


<!-- ##### FUNCTION g_param_spec_get_nick ##### -->
<para>
Returns the nickname of a #GParamSpec.
</para>

@pspec: a valid #GParamSpec
@Returns: the nickname of @pspec.


<!-- ##### FUNCTION g_param_spec_get_blurb ##### -->
<para>
Returns the short description of a #GParamSpec.
</para>

@pspec: a valid #GParamSpec
@Returns: the short description of @pspec.


<!-- ##### FUNCTION g_param_spec_get_qdata ##### -->
<para>
Gets back user data pointers stored via g_param_spec_set_qdata().
</para>

@pspec: a valid #GParamSpec
@quark: a #GQuark, naming the user data pointer
@Returns: the user data pointer set, or %NULL


<!-- ##### FUNCTION g_param_spec_set_qdata ##### -->
<para>
Sets an opaque, named pointer on a #GParamSpec. The name is specified 
through a #GQuark (retrieved e.g. via g_quark_from_static_string()), and 
the pointer can be gotten back from the @pspec with g_param_spec_get_qdata().
Setting a previously set user data pointer, overrides (frees)
the old pointer set, using #NULL as pointer essentially
removes the data stored.
</para>

@pspec: the #GParamSpec to set store a user data pointer
@quark: a #GQuark, naming the user data pointer
@data: an opaque user data pointer


<!-- ##### FUNCTION g_param_spec_set_qdata_full ##### -->
<para>
This function works like g_param_spec_set_qdata(), but in addition, 
a <literal>void (*destroy) (gpointer)</literal> function may be 
specified which is called with @data as argument when the @pspec is 
finalized, or the data is being overwritten by a call to 
g_param_spec_set_qdata() with the same @quark.
</para>

@pspec:   the #GParamSpec to set store a user data pointer
@quark:   a #GQuark, naming the user data pointer
@data:    an opaque user data pointer
@destroy: function to invoke with @data as argument, when @data needs to
          be freed


<!-- ##### FUNCTION g_param_spec_steal_qdata ##### -->
<para>
Gets back user data pointers stored via g_param_spec_set_qdata() and 
removes the @data from @pspec without invoking it's destroy() function 
(if any was set).
Usually, calling this function is only required to update
user data pointers with a destroy notifier.
</para>

@pspec: the #GParamSpec to get a stored user data pointer from
@quark: a #GQuark, naming the user data pointer
@Returns: the user data pointer set, or %NULL


<!-- ##### FUNCTION g_param_spec_get_redirect_target ##### -->
<para>
If the paramspec redirects operations to another paramspec,
returns that paramspec. Redirect is used typically for
providing a new implementation of a property in a derived
type while perserving all the properties from the parent
type. Redirection is established by creating a property
of type #GParamSpecOverride. See g_object_override_property()
for an example of the use of this capability.
</para>

@pspec: a #GParamSpec
@Returns: paramspec to which requests on this paramspec should
  be redirected, or %NULL if none.
@Since: 2.4


<!-- ##### FUNCTION g_param_spec_internal ##### -->
<para>
Creates a new #GParamSpec instance.
</para>
<para>
A property name consists of segments consisting of ASCII letters and
digits, separated by either the '-' or '_' character. The first
character of a property name must be a letter. Names which violate these
rules lead to undefined behaviour. 
</para>
<para>
When creating and looking up a #GParamSpec, either separator can be used, 
but they cannot be mixed. Using '-' is considerably more efficient and in 
fact required when using property names as detail strings for signals.
</para>

@param_type: the #GType for the property; must be derived from #G_TYPE_PARAM
@name: the canonical name of the property
@nick: the nickname of the property
@blurb: a short description of the property
@flags: a combination of #GParamFlags
@Returns: a newly allocated #GParamSpec instance


<!-- ##### STRUCT GParamSpecTypeInfo ##### -->
<para>
This structure is used to provide the type system with the information
required to initialize and destruct (finalize) a parameter's class and
instances thereof.
The initialized structure is passed to the g_param_type_register_static() 
The type system will perform a deep copy of this structure, so it's memory 
does not need to be persistent across invocation of 
g_param_type_register_static().
</para>

@instance_size: Size of the instance (object) structure.
@n_preallocs: Number of pre-allocated (cached) instances to reserve memory for (0 indicates no caching).
@instance_init: Location of the instance initialization function (optional).
@value_type: The #GType of values conforming to this #GParamSpec
@finalize: The instance finalization function (optional).
@value_set_default: Resets a @value to the default value for @pspec 
  (recommended, the default is g_value_reset()), see 
  g_param_value_set_default().
@value_validate: Ensures that the contents of @value comply with the 
  specifications set out by @pspec (optional), see 
  g_param_value_set_validate().
@values_cmp: Compares @value1 with @value2 according to @pspec 
  (recommended, the default is memcmp()), see g_param_values_cmp().

<!-- ##### FUNCTION g_param_type_register_static ##### -->
<para>
Registers @name as the name of a new static type derived from
#G_TYPE_PARAM. The type system uses the information contained in the
#GParamSpecTypeInfo structure pointed to by @info to manage the #GParamSpec 
type and its instances. 
</para>

@name: 0-terminated string used as the name of the new #GParamSpec type.
@pspec_info: The #GParamSpecTypeInfo for this #GParamSpec type.
@Returns: The new type identifier.


<!-- ##### STRUCT GParamSpecPool ##### -->
<para>
A #GParamSpecPool maintains a collection of #GParamSpec<!-- -->s which can be
quickly accessed by owner and name. The implementation of the #GObject property
system uses such a pool to store the #GParamSpecs of the properties all object
types. 
</para>


<!-- ##### FUNCTION g_param_spec_pool_new ##### -->
<para>
Creates a new #GParamSpecPool.
</para>
<para>
If @type_prefixing is %TRUE, lookups in the newly created pool will
allow to specify the owner as a colon-separated prefix of the property name, 
like "GtkContainer:border-width". This feature is deprecated, so you should 
always set @type_prefixing to %FALSE.
</para>

@type_prefixing: Whether the pool will support type-prefixed property names.
@Returns: a newly allocated #GParamSpecPool.


<!-- ##### FUNCTION g_param_spec_pool_insert ##### -->
<para>
Inserts a #GParamSpec in the pool.
</para>

@pool: a #GParamSpecPool.
@pspec: the #GParamSpec to insert
@owner_type: a #GType identifying the owner of @pspec


<!-- ##### FUNCTION g_param_spec_pool_remove ##### -->
<para>
Removes a #GParamSpec from the pool.
</para>

@pool: a #GParamSpecPool
@pspec: the #GParamSpec to remove


<!-- ##### FUNCTION g_param_spec_pool_lookup ##### -->
<para>
Looks up a #GParamSpec in the pool.
</para>

@pool: a #GParamSpecPool
@param_name: the name to look for
@owner_type: the owner to look for
@walk_ancestors: If %TRUE, also try to find a #GParamSpec with @param_name 
  owned by an ancestor of @owner_type.
@Returns: The found #GParamSpec, or %NULL if no matching #GParamSpec was found.


<!-- ##### FUNCTION g_param_spec_pool_list ##### -->
<para>
Gets an array of all #GParamSpec<!-- -->s owned by @owner_type in the pool. 
</para>

@pool: a #GParamSpecPool
@owner_type: the owner to look for
@n_pspecs_p: return location for the length of the returned array
@Returns: a newly allocated array containing pointers to all 
  #GParamSpec<!-- -->s owned by @owner_type in the pool


<!-- ##### FUNCTION g_param_spec_pool_list_owned ##### -->
<para>
Gets an #GList of all #GParamSpec<!-- -->s owned by @owner_type in the pool. 
</para>

@pool: a #GParamSpecPool
@owner_type: the owner to look for
@Returns: a #GList of all #GParamSpec<!-- -->s owned by @owner_type in 
  the pool#GParamSpec<!-- -->s.


