#include "config.h" #include #include #include struct typereg { size_t num; const void **ptrs; }; static STRMAP(struct typereg *) typemap; void autodata_register_(const char *typename, const void *ptr) { struct typereg *t; assert(ptr); t = strmap_get(&typemap, typename); if (!t) { t = malloc(sizeof(struct typereg)); t->num = 0; t->ptrs = NULL; strmap_add(&typemap, typename, t); } t->ptrs = realloc(t->ptrs, (t->num + 1) * sizeof(*t->ptrs)); t->ptrs[t->num] = ptr; t->num++; } void *autodata_get_(const char *typename, size_t *nump) { struct typereg *t = strmap_get(&typemap, typename); if (!t) { *nump = 0; return NULL; } *nump = t->num; return t->ptrs; }