键控的数据列表和数据集
键控的数据列表
键控数据列表提供了任意数据元素的列表,可以通过字符串或对应于字符串的 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()。