#include #include #include #include #include #include #include #include #include #include #include struct kscheme_s { faux_list_t *plugins; faux_list_t *ptypes; faux_list_t *views; }; // Simple methods // PLUGIN list KCMP_NESTED(scheme, plugin, name); KCMP_NESTED_BY_KEY(scheme, plugin, name); KADD_NESTED(scheme, plugin); KFIND_NESTED(scheme, plugin); KNESTED_LEN(scheme, plugin); KNESTED_ITER(scheme, plugin); KNESTED_EACH(scheme, plugin); // PTYPE list KCMP_NESTED(scheme, ptype, name); KCMP_NESTED_BY_KEY(scheme, ptype, name); KADD_NESTED(scheme, ptype); KFIND_NESTED(scheme, ptype); KNESTED_LEN(scheme, ptype); KNESTED_ITER(scheme, ptype); KNESTED_EACH(scheme, ptype); // VIEW list KCMP_NESTED(scheme, view, name); KCMP_NESTED_BY_KEY(scheme, view, name); KADD_NESTED(scheme, view); KFIND_NESTED(scheme, view); KNESTED_LEN(scheme, view); KNESTED_ITER(scheme, view); KNESTED_EACH(scheme, view); kscheme_t *kscheme_new(void) { kscheme_t *scheme = NULL; scheme = faux_zmalloc(sizeof(*scheme)); assert(scheme); if (!scheme) return NULL; // PLUGIN list scheme->plugins = faux_list_new(FAUX_LIST_SORTED, FAUX_LIST_UNIQUE, kscheme_plugin_compare, kscheme_plugin_kcompare, (void (*)(void *))kplugin_free); assert(scheme->plugins); // PTYPE list scheme->ptypes = faux_list_new(FAUX_LIST_SORTED, FAUX_LIST_UNIQUE, kscheme_ptype_compare, kscheme_ptype_kcompare, (void (*)(void *))kptype_free); assert(scheme->ptypes); // VIEW list scheme->views = faux_list_new(FAUX_LIST_SORTED, FAUX_LIST_UNIQUE, kscheme_view_compare, kscheme_view_kcompare, (void (*)(void *))kview_free); assert(scheme->views); return scheme; } void kscheme_free(kscheme_t *scheme) { if (!scheme) return; faux_list_free(scheme->plugins); faux_list_free(scheme->ptypes); faux_list_free(scheme->views); faux_free(scheme); }