结构体
GLibVariantDict
自版本:2.40
描述 [src]
struct GVariantDict {
/* No available fields */
}
GVariantDict
是一个对 GVariant
字典的可变接口。
它可用于在已有的 GVariant
字典上以一种高效的方式执行一系列字典查找,或者它可用于利用类似散列表的接口构造新的字典。它还可用于获取已有的字典并对其进行修改,以创建新的字典。
GVariantDict
仅能与 G_VARIANT_TYPE_VARDICT
字典一起使用。
可以在栈上或堆上使用 GVariantDict
。如果在栈上使用 GVariantDict
,请从 g_variant_dict_init()
调用开始,使用对 g_variant_dict_clear() 的调用释放资源。
在堆上分配的 GVariantDict
遵循常规的引用计数规则:使用 g_variant_dict_new()
为其分配空间,并使用 g_variant_dict_ref()
和 g_variant_dict_unref()。
g_variant_dict_end()
用于将 GVariantDict
转换回字典类型的 GVariant
。在与栈上分配的实例一起使用时,该操作还会隐式释放所有关联的内存,但对于堆上分配的实例,你仍必须先调用 g_variant_dict_unref()
。
当将 GVariantDict
作为 API 的一部分公开时,你通常希望使用一个在堆上分配的 GVariantDict
。对于大多数其他用途,栈上分配的形式会更方便。
考虑以下两个示例,它们都以相同风格执行相同操作:获取一个已有的字典并查找“count”uint32 密钥,如果找到该密钥,则向其添加 1,如果找不到该密钥,则返回一个错误。每个都将新字典作为浮动 GVariant
返回。
使用栈上分配的 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);
}
使用堆上分配的 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;
}
自版本 2.40 起可用