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;
}
- Since:
- 2.40
-
Constructor Summary
ConstructorsConstructorDescriptionVariantDict(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 TypeMethodDescriptionvoidclear()Releases all memory associated with aGVariantDictwithout freeing theGVariantDictstructure itself.booleanChecks ifkeyexists indict.end()Returns the current value of this VariantDict as aGVariantof typeG_VARIANT_TYPE_VARDICT, clearing it in the process.static MemoryLayoutThe memory layout of the native struct.static @Nullable TypegetType()Get the GType of the VariantDict classvoidInitialises aGVariantDictstructure.voidInserts a value into aGVariantDict.voidinsertValue(String key, Variant value) Inserts (or replaces) a key in aGVariantDict.booleanLooks up a value in aGVariantDict.@Nullable VariantlookupValue(String key, @Nullable VariantType expectedType) Looks up a value in aGVariantDict.@org.jspecify.annotations.Nullable long @Nullable []readX()Read the value of the fieldx.ref()Increases the reference count ondict.booleanRemoves a key and its associated value from aGVariantDict.voidunref()Decreases the reference count ondict.voidWrite a value in the fieldx.Methods inherited from class org.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
GVariantDictdirectly on the stack of the calling function and initialise it with g_variant_dict_init(). This is particularly useful when you are usingGVariantDictto construct aGVariant.- Parameters:
fromAsv- theGVariantwith which to initialise the dictionary- Since:
- 2.40
-
-
Method Details
-
getType
-
getMemoryLayout
The memory layout of the native struct.- Returns:
- the memory layout
-
readX
public @org.jspecify.annotations.Nullable long @Nullable [] 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
-
clear
public void clear()Releases all memory associated with aGVariantDictwithout freeing theGVariantDictstructure itself.It typically only makes sense to do this on a stack-allocated
GVariantDictif 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
GVariantDictor 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.- Since:
- 2.40
-
contains
Checks ifkeyexists indict.- Parameters:
key- the key to look up in the dictionary- Returns:
trueifkeyis in this VariantDict- Since:
- 2.40
-
end
Returns the current value of this VariantDict as aGVariantof 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 - Since:
- 2.40
-
init
Initialises aGVariantDictstructure.If
fromAsvis given, it is used to initialise the dictionary.This function completely ignores the previous contents of
dict.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 existingGVariantDictyou 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
GVariantDictthat was initialised with this function. If you ever pass a reference to aGVariantDictoutside 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- Since:
- 2.40
-
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- aGVariantvarargs format stringvarargs- arguments, as performatString- Since:
- 2.40
-
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
nullwould have been returned, this function returnsfalseand does not modify the values of the arguments passed in to....Otherwise, it unpacks the returned value and returnstrue.formatStringdetermines the C types that are used for unpacking the values and also determines if the values are copied or borrowed, see the section onGVariantformat strings.- Parameters:
key- the key to look up in the dictionaryformatString- a GVariant format stringvarargs- the arguments to unpack the value into- Returns:
trueif a value was unpacked- Since:
- 2.40
-
lookupValue
Looks up a value in aGVariantDict.If
keyis not found indictionary,nullis returned.The
expectedTypestring specifies what type of value is expected. If the value associated withkeyhas a different type thennullis returned.If the key is found and the value has the correct type, it is returned. If
expectedTypewas specified then any non-nullreturn 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 - Since:
- 2.40
-
ref
Increases the reference count ondict.Don't call this on stack-allocated
GVariantDictinstances or bad things will happen.- Returns:
- a new reference to this VariantDict
- Since:
- 2.40
-
remove
Removes a key and its associated value from aGVariantDict.- Parameters:
key- the key to remove- Returns:
trueif the key was found and removed- Since:
- 2.40
-
unref
public void unref()Decreases the reference count ondict.In the event that there are no more references, releases all memory associated with the
GVariantDict.Don't call this on stack-allocated
GVariantDictinstances or bad things will happen.- Since:
- 2.40
-