10 enum namereg_type type
;
15 void namereg_free(struct core
*c
) {
19 assert(hashset_ncontents(c
->namereg
) == 0);
20 hashset_free(c
->namereg
, NULL
, NULL
);
23 const char *namereg_register(struct core
*c
, const char *name
, enum namereg_type type
, void *data
, int fail
) {
24 struct namereg_entry
*e
;
28 assert(c
&& name
&& data
);
31 c
->namereg
= hashset_new(idxset_string_hash_func
, idxset_string_compare_func
);
35 if ((e
= hashset_get(c
->namereg
, name
)) && fail
)
42 size_t l
= strlen(name
);
46 for (i
= 1; i
<= 99; i
++) {
47 snprintf(n
, l
+2, "%s%u", name
, i
);
49 if (!(e
= hashset_get(c
->namereg
, n
)))
60 e
= malloc(sizeof(struct namereg_entry
));
66 r
= hashset_put(c
->namereg
, e
->name
, e
);
73 void namereg_unregister(struct core
*c
, const char *name
) {
74 struct namereg_entry
*e
;
78 e
= hashset_get(c
->namereg
, name
);
81 r
= hashset_remove(c
->namereg
, name
);
88 void* namereg_get(struct core
*c
, const char *name
, enum namereg_type type
) {
89 struct namereg_entry
*e
;
92 if (!(e
= hashset_get(c
->namereg
, name
)))
93 if (e
->type
== e
->type
)