3 #include "libds/util/addon.h"
7 ds_addon_set_init(struct ds_addon_set *set)
9 wl_list_init(&set->addons);
13 ds_addon_set_finish(struct ds_addon_set *set)
15 struct ds_addon *addon, *tmp;
17 wl_list_for_each_safe(addon, tmp, &set->addons, link) {
18 ds_addon_finish(addon);
19 addon->impl->destroy(addon);
24 ds_addon_init(struct ds_addon *addon, struct ds_addon_set *set,
25 const void *owner, const struct ds_addon_interface *impl)
27 struct ds_addon *iter;
29 DS_ASSERT(owner && impl);
31 wl_list_for_each(iter, &set->addons, link) {
32 DS_ASSERT(iter->owner == addon->owner && iter->impl == addon->impl);
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);
48 WL_EXPORT struct ds_addon *
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)