VariantDict#
Added in version 2.40.
- class VariantDict(**kwargs)#
VariantDict
is a mutable interface to Variant
dictionaries.
It can be used for doing a sequence of dictionary lookups in an
efficient way on an existing Variant
dictionary or it can be used
to construct new dictionaries with a hashtable-like interface. It
can also be used for taking existing dictionaries and modifying them
in order to create new ones.
VariantDict
can only be used with %G_VARIANT_TYPE_VARDICT
dictionaries.
It is possible to use VariantDict
allocated on the stack or on the
heap. When using a stack-allocated VariantDict
, you begin with a
call to init()
and free the resources with a call to
clear()
.
Heap-allocated VariantDict
follows normal refcounting rules: you
allocate it with new()
and use ref()
and unref()
.
end()
is used to convert the VariantDict
back into a
dictionary-type Variant
. When used with stack-allocated instances,
this also implicitly frees all associated memory, but for
heap-allocated instances, you must still call unref()
afterwards.
You will typically want to use a heap-allocated VariantDict
when
you expose it as part of an API. For most other uses, the
stack-allocated form will be more convenient.
Consider the following two examples that do the same thing in each
style: take an existing dictionary and look up the “count” uint32
key, adding 1 to it if it is found, or returning an error if the
key is not found. Each returns the new dictionary as a floating
Variant
.
Using a stack-allocated GVariantDict#
GVariant *
add_to_count (GVariant *orig,
GError **error)
{
GVariantDict dict;
guint32 count;
g_variant_dict_init (&dict, orig);
if (!g_variant_dict_lookup (&dict, "count", "u", &count))
{
g_set_error (...);
g_variant_dict_clear (&dict);
return NULL;
}
g_variant_dict_insert (&dict, "count", "u", count + 1);
return g_variant_dict_end (&dict);
}
Using heap-allocated GVariantDict#
GVariant *
add_to_count (GVariant *orig,
GError **error)
{
GVariantDict *dict;
GVariant *result;
guint32 count;
dict = g_variant_dict_new (orig);
if (g_variant_dict_lookup (dict, "count", "u", &count))
{
g_variant_dict_insert (dict, "count", "u", count + 1);
result = g_variant_dict_end (dict);
}
else
{
g_set_error (...);
result = NULL;
}
g_variant_dict_unref (dict);
return result;
}
Constructors#
- class VariantDict
- classmethod new(from_asv: Variant | None = None) VariantDict #
Allocates and initialises a new
VariantDict
.You should call
unref()
on the return value when it is no longer needed. The memory will not be automatically freed by any other call.In some cases it may be easier to place a
VariantDict
directly on the stack of the calling function and initialise it withinit()
. This is particularly useful when you are usingVariantDict
to construct aVariant
.Added in version 2.40.
- Parameters:
from_asv – the
Variant
with which to initialise the dictionary
Methods#
- class VariantDict
- clear() None #
Releases all memory associated with a
VariantDict
without freeing theVariantDict
structure itself.It typically only makes sense to do this on a stack-allocated
VariantDict
if you want to abort building the value part-way through. This function need not be called if you callend()
and it also doesn’t need to be called on dicts allocated with g_variant_dict_new (seeunref()
for that).It is valid to call this function on either an initialised
VariantDict
or one that was previously cleared by an earlier call toclear()
but it is not valid to call this function on uninitialised memory.Added in version 2.40.
- contains(key: str) bool #
Checks if
key
exists indict
.Added in version 2.40.
- Parameters:
key – the key to look up in the dictionary
- end() Variant #
Returns the current value of
dict
as aVariant
of type %G_VARIANT_TYPE_VARDICT, clearing it in the process.It is not permissible to use
dict
in any way after this call except for reference counting operations (in the case of a heap-allocatedVariantDict
) or by reinitialising it withinit()
(in the case of stack-allocated).Added in version 2.40.
- insert_value(key: str, value: Variant) None #
Inserts (or replaces) a key in a
VariantDict
.value
is consumed if it is floating.Added in version 2.40.
- Parameters:
key – the key to insert a value for
value – the value to insert
- lookup_value(key: str, expected_type: VariantType | None = None) Variant | None #
Looks up a value in a
VariantDict
.If
key
is not found indictionary
,None
is returned.The
expected_type
string specifies what type of value is expected. If the value associated withkey
has a different type thenNone
is returned.If the key is found and the value has the correct type, it is returned. If
expected_type
was specified then any non-None
return value will have this type.Added in version 2.40.
- Parameters:
key – the key to look up in the dictionary
expected_type – a
VariantType
, orNone
- remove(key: str) bool #
Removes a key and its associated value from a
VariantDict
.Added in version 2.40.
- Parameters:
key – the key to remove
- Returns:
0 if the file was successfully removed, -1 if an error occurred