键控的数据列表和数据集

键控的数据列表

键控数据列表提供了任意数据元素的列表,可以通过字符串或对应于字符串的 GQuark 进行访问。

GQuark 方法更快速,因为字符串无论如何都必须转换为 GQuark

数据列表用于将任意数据与 GObject 相关联,使用 g_object_set_data() 和相关函数。数据存储在不透明的 GData 元素中。

要创建一个数据列表,请使用 g_datalist_init()

要将数据元素添加到数据列表,请使用 g_datalist_id_set_data()g_datalist_id_set_data_full()g_datalist_set_data()g_datalist_set_data_full()g_datalist_id_replace_data()

要从数据列表获取数据元素,请使用 g_datalist_id_get_data()g_datalist_get_data()g_datalist_id_dup_data()

要遍历数据列表中的所有数据元素,请使用 g_datalist_foreach()(非线程安全)。

要从数据列表中删除数据元素,请使用 g_datalist_id_remove_data()g_datalist_remove_data(),以及 g_datalist_id_remove_multiple()。要删除元素而不销毁它们,请使用 g_datalist_id_remove_no_notify(),以及 g_datalist_remove_no_notify()

要从数据列表中删除所有数据元素,请使用 g_datalist_clear()

可以使用 g_datalist_set_flags()g_datalist_unset_flags()g_datalist_get_flags(),将少量布尔标志存储在数据列表旁边。

数据集

数据集将数据元素组与特定的内存位置相关联。如果你需要将数据与从外部库返回的结构相关联,这些很有用。由于你无法修改结构,因此使用其在内存中的位置作为数据集的键,你可以在其中将任意数量的数据元素与它相关联。

数据集函数大部分有两种形式。第一种形式使用字符串来标识与位置关联的数据元素。第二种形式使用 GQuark 标识符,这些标识符通过调用 g_quark_from_string()g_quark_from_static_string() 来创建。第二种形式更快速,因为它不需要在 GQuark 标识符的哈希表中查找字符串。

没有用于创建数据集的函数。一旦你向其中添加元素,它就会自动创建。

要将数据元素添加到数据集,请使用 g_dataset_id_set_data()g_dataset_id_set_data_full()g_dataset_set_data()g_dataset_set_data_full()

要从数据集获取数据元素,请使用 g_dataset_id_get_data()g_dataset_get_data()

要遍历数据集中的所有数据元素,请使用 g_dataset_foreach()(非线程安全)。

要从数据集删除数据元素,请使用g_dataset_id_remove_data()g_dataset_remove_data()。要删除数据而不销毁它,请使用g_dataset_id_remove_no_notify()g_dataset_remove_no_notify()

若要销毁数据集,请使用g_dataset_destroy()