123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- /** @file kudata.c
- */
- #include <assert.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- struct kudata_s {
- char *name;
- void *data;
- };
- // User data blobs list
- KCMP_NESTED(udata, plugin, name);
- KCMP_NESTED_BY_KEY(udata, plugin, name);
- KADD_NESTED(udata, plugin);
- KFIND_NESTED(udata, plugin);
- // PTYPE list
- KCMP_NESTED(udata, ptype, name);
- KCMP_NESTED_BY_KEY(udata, ptype, name);
- KADD_NESTED(udata, ptype);
- KFIND_NESTED(udata, ptype);
- // VIEW list
- KCMP_NESTED(udata, view, name);
- KCMP_NESTED_BY_KEY(udata, view, name);
- KADD_NESTED(udata, view);
- KFIND_NESTED(udata, view);
- kudata_t *kudata_new(kudata_error_e *error)
- {
- kudata_t *udata = NULL;
- udata = faux_zmalloc(sizeof(*udata));
- assert(udata);
- if (!udata) {
- if (error)
- *error = KSCHEME_ERROR_ALLOC;
- return NULL;
- }
- // PLUGIN list
- udata->plugins = faux_list_new(FAUX_LIST_SORTED, FAUX_LIST_UNIQUE,
- kudata_plugin_compare, kudata_plugin_kcompare,
- (void (*)(void *))kplugin_free);
- assert(udata->plugins);
- // PTYPE list
- udata->ptypes = faux_list_new(FAUX_LIST_SORTED, FAUX_LIST_UNIQUE,
- kudata_ptype_compare, kudata_ptype_kcompare,
- (void (*)(void *))kptype_free);
- assert(udata->ptypes);
- // VIEW list
- udata->views = faux_list_new(FAUX_LIST_SORTED, FAUX_LIST_UNIQUE,
- kudata_view_compare, kudata_view_kcompare,
- (void (*)(void *))kview_free);
- assert(udata->views);
- return udata;
- }
- /*--------------------------------------------------------- */
- int kudata_compare(const void *first, const void *second)
- {
- const kudata_t *f = (const kudata_t *)first;
- const kudata_t *s = (const kudata_t *)second;
- return strcmp(f->name, s->name);
- }
- /*--------------------------------------------------------- */
- kudata_t *kudata_new(const char *name, void *data)
- {
- kudata_t *pdata =
- (kudata_t *)malloc(sizeof(kudata_t));
- if (!name) {
- free(pdata);
- return NULL;
- }
- memset(pdata, 0, sizeof(*pdata));
- pdata->name = lub_string_dup(name);
- pdata->data = data;
- return pdata;
- }
- /*--------------------------------------------------------- */
- void *kudata_free(kudata_t *this)
- {
- void *data;
- if (!this)
- return NULL;
- if (this->name)
- lub_string_free(this->name);
- data = this->data;
- free(this);
- return data;
- }
- /*--------------------------------------------------------- */
- void kudata_delete(void *data)
- {
- kudata_t *this = (kudata_t *)data;
- kudata_free(this);
- }
|