Class VariantDict
- All Implemented Interfaces:
Proxy
GVariantDict
is a mutable interface to GVariant
dictionaries.
It can be used for doing a sequence of dictionary lookups in an
efficient way on an existing GVariant
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.
GVariantDict
can only be used with G_VARIANT_TYPE_VARDICT
dictionaries.
It is possible to use GVariantDict
allocated on the stack or on the
heap. When using a stack-allocated GVariantDict
, you begin with a
call to g_variant_dict_init() and free the resources with a call to
g_variant_dict_clear().
Heap-allocated GVariantDict
follows normal refcounting rules: you
allocate it with g_variant_dict_new() and use g_variant_dict_ref()
and g_variant_dict_unref().
g_variant_dict_end() is used to convert the GVariantDict
back into a
dictionary-type GVariant
. When used with stack-allocated instances,
this also implicitly frees all associated memory, but for
heap-allocated instances, you must still call g_variant_dict_unref()
afterwards.
You will typically want to use a heap-allocated GVariantDict
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
GVariant
.
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;
}
-
Constructor Summary
ConstructorDescriptionCallsVariantDict(org.gnome.glib.Variant)
with fromAsv =null
VariantDict
(MemorySegment address) Create a VariantDict proxy instance for the provided memory address.VariantDict
(@Nullable Variant fromAsv) Allocates and initialises a newGVariantDict
. -
Method Summary
Modifier and TypeMethodDescriptionvoid
clear()
Releases all memory associated with aGVariantDict
without freeing theGVariantDict
structure itself.boolean
Checks ifkey
exists in this VariantDict.end()
Returns the current value of this VariantDict as aGVariant
of typeG_VARIANT_TYPE_VARDICT
, clearing it in the process.static MemoryLayout
The memory layout of the native struct.static Type
getType()
Get the GType of the VariantDict classvoid
Initialises aGVariantDict
structure.void
Inserts a value into aGVariantDict
.void
insertValue
(String key, Variant value) Inserts (or replaces) a key in aGVariantDict
.boolean
Looks up a value in aGVariantDict
.lookupValue
(String key, @Nullable VariantType expectedType) Looks up a value in aGVariantDict
.long[]
readX()
Read the value of the fieldx
.ref()
Increases the reference count on this VariantDict.boolean
Removes a key and its associated value from aGVariantDict
.void
unref()
Decreases the reference count on this VariantDict.void
Write a value in the fieldx
.Methods inherited from class io.github.jwharm.javagi.base.ProxyInstance
equals, handle, hashCode
-
Constructor Details
-
VariantDict
Create a VariantDict proxy instance for the provided memory address.- Parameters:
address
- the memory address of the native object
-
VariantDict
Allocates and initialises a newGVariantDict
.You should call g_variant_dict_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
GVariantDict
directly on the stack of the calling function and initialise it with g_variant_dict_init(). This is particularly useful when you are usingGVariantDict
to construct aGVariant
.- Parameters:
fromAsv
- theGVariant
with which to initialise the dictionary
-
VariantDict
public VariantDict()CallsVariantDict(org.gnome.glib.Variant)
with fromAsv =null
-
-
Method Details
-
getType
-
getMemoryLayout
The memory layout of the native struct.- Returns:
- the memory layout
-
readX
public long[] readX()Read the value of the fieldx
.- Returns:
- The value of the field
x
-
writeX
Write a value in the fieldx
.- Parameters:
x
- The new value for the fieldx
_arena
- to control the memory allocation scope
-
clear
public void clear()Releases all memory associated with aGVariantDict
without freeing theGVariantDict
structure itself.It typically only makes sense to do this on a stack-allocated
GVariantDict
if you want to abort building the value part-way through. This function need not be called if you call g_variant_dict_end() and it also doesn't need to be called on dicts allocated with g_variant_dict_new (see g_variant_dict_unref() for that).It is valid to call this function on either an initialised
GVariantDict
or one that was previously cleared by an earlier call to g_variant_dict_clear() but it is not valid to call this function on uninitialised memory. -
contains
Checks ifkey
exists in this VariantDict.- Parameters:
key
- the key to look up in the dictionary- Returns:
true
ifkey
is in this VariantDict
-
end
Returns the current value of this VariantDict as aGVariant
of typeG_VARIANT_TYPE_VARDICT
, clearing it in the process.It is not permissible to use this VariantDict in any way after this call except for reference counting operations (in the case of a heap-allocated
GVariantDict
) or by reinitialising it with g_variant_dict_init() (in the case of stack-allocated).- Returns:
- a new, floating,
GVariant
-
init
Initialises aGVariantDict
structure.If
fromAsv
is given, it is used to initialise the dictionary.This function completely ignores the previous contents of this VariantDict. On one hand this means that it is valid to pass in completely uninitialised memory. On the other hand, this means that if you are initialising over top of an existing
GVariantDict
you need to first call g_variant_dict_clear() in order to avoid leaking memory.You must not call g_variant_dict_ref() or g_variant_dict_unref() on a
GVariantDict
that was initialised with this function. If you ever pass a reference to aGVariantDict
outside of the control of your own code then you should assume that the person receiving that reference may try to use reference counting; you should use g_variant_dict_new() instead of this function.- Parameters:
fromAsv
- the initial value for this VariantDict
-
insert
Inserts a value into aGVariantDict
.This call is a convenience wrapper that is exactly equivalent to calling g_variant_new() followed by g_variant_dict_insert_value().
- Parameters:
key
- the key to insert a value forformatString
- aGVariant
varargs format stringvarargs
- arguments, as performatString
-
insertValue
-
lookup
Looks up a value in aGVariantDict
.This function is a wrapper around g_variant_dict_lookup_value() and g_variant_get(). In the case that
null
would have been returned, this function returnsfalse
and does not modify the values of the arguments passed in to.
... Otherwise, it unpacks the returned value and returnstrue
.formatString
determines the C types that are used for unpacking the values and also determines if the values are copied or borrowed, see the section onGVariant
format strings.- Parameters:
key
- the key to look up in the dictionaryformatString
- a GVariant format stringvarargs
- the arguments to unpack the value into- Returns:
true
if a value was unpacked
-
lookupValue
Looks up a value in aGVariantDict
.If
key
is not found indictionary
,null
is returned.The
expectedType
string specifies what type of value is expected. If the value associated withkey
has a different type thennull
is returned.If the key is found and the value has the correct type, it is returned. If
expectedType
was specified then any non-null
return value will have this type.- Parameters:
key
- the key to look up in the dictionaryexpectedType
- aGVariantType
, ornull
- Returns:
- the value of the dictionary key, or
null
-
ref
Increases the reference count on this VariantDict.Don't call this on stack-allocated
GVariantDict
instances or bad things will happen.- Returns:
- a new reference to this VariantDict
-
remove
Removes a key and its associated value from aGVariantDict
.- Parameters:
key
- the key to remove- Returns:
true
if the key was found and removed
-
unref
public void unref()Decreases the reference count on this VariantDict.In the event that there are no more references, releases all memory associated with the
GVariantDict
.Don't call this on stack-allocated
GVariantDict
instances or bad things will happen.
-