6 ds_addon_set_init(struct ds_addon_set *set)
8 wl_list_init(&set->addons);
12 ds_addon_set_finish(struct ds_addon_set *set)
14 struct ds_addon *addon, *tmp;
16 wl_list_for_each_safe(addon, tmp, &set->addons, link) {
17 ds_addon_finish(addon);
18 addon->impl->destroy(addon);
23 ds_addon_init(struct ds_addon *addon, struct ds_addon_set *set,
24 const void *owner, const struct ds_addon_interface *impl)
26 struct ds_addon *iter;
28 assert(owner && impl);
30 wl_list_for_each(iter, &set->addons, link) {
31 if (iter->owner == addon->owner && iter->impl == addon->impl)
32 assert(0 && "Can't have two addons of the same type with the same owner");
35 wl_list_insert(&set->addons, &addon->link);
42 ds_addon_finish(struct ds_addon *addon)
44 wl_list_remove(&addon->link);
45 wl_list_init(&addon->link);
49 ds_addon_find(struct ds_addon_set *set, const void *owner,
50 const struct ds_addon_interface *impl)
52 struct ds_addon *addon;
54 wl_list_for_each(addon, &set->addons, link) {
55 if (addon->owner == owner && addon->impl == impl)