/* If the id has a negative refcount, then it is a static isl_id * and should not be freed. */ void *isl_id_free(__isl_take isl_id *id) { struct isl_hash_table_entry *entry; if (!id) return NULL; if (id->ref < 0) return NULL; if (--id->ref > 0) return NULL; entry = isl_hash_table_find(id->ctx, &id->ctx->id_table, id->hash, isl_id_eq, id, 0); if (!entry) isl_die(id->ctx, isl_error_unknown, "unable to find id", (void)0); else isl_hash_table_remove(id->ctx, &id->ctx->id_table, entry); if (id->free_user) id->free_user(id->user); free((char *)id->name); isl_ctx_deref(id->ctx); free(id); return NULL; }
void isl_name_free(struct isl_ctx *ctx, struct isl_name *name) { uint32_t name_hash; struct isl_hash_table_entry *entry; if (!name) return; if (--name->ref > 0) return; name_hash = isl_hash_string(isl_hash_init(), name->name); entry = isl_hash_table_find(ctx, &ctx->name_hash, name_hash, isl_name_eq, name, 0); isl_assert(ctx, entry, return); isl_hash_table_remove(ctx, &ctx->name_hash, entry); free((char *)name->name); free(name); }