2
* Copyright 2008-2009 Katholieke Universiteit Leuven
4
* Use of this software is governed by the GNU LGPLv2.1 license
6
* Written by Sven Verdoolaege, K.U.Leuven, Departement
7
* Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium
11
#include <isl_ctx_private.h>
14
struct isl_name *isl_name_alloc(struct isl_ctx *ctx, const char *s)
16
const char *copy = strdup(s);
17
struct isl_name *name;
21
name = isl_alloc_type(ctx, struct isl_name);
28
name->hash = isl_hash_init();
29
name->hash = isl_hash_string(name->hash, s);
37
static int isl_name_has_name(const void *entry, const void *val)
39
struct isl_name *name = (struct isl_name *)entry;
40
const char *s = (const char *)val;
42
return !strcmp(name->name, s);
45
struct isl_name *isl_name_get(struct isl_ctx *ctx, const char *name)
47
struct isl_hash_table_entry *entry;
50
name_hash = isl_hash_string(isl_hash_init(), name);
51
entry = isl_hash_table_find(ctx, &ctx->name_hash, name_hash,
52
isl_name_has_name, name, 1);
56
return isl_name_copy(ctx, entry->data);
57
entry->data = isl_name_alloc(ctx, name);
63
struct isl_name *isl_name_copy(struct isl_ctx *ctx, struct isl_name *name)
72
static int isl_name_eq(const void *entry, const void *name)
77
uint32_t isl_hash_name(uint32_t hash, struct isl_name *name)
80
isl_hash_hash(hash, name->hash);
85
void isl_name_free(struct isl_ctx *ctx, struct isl_name *name)
88
struct isl_hash_table_entry *entry;
96
name_hash = isl_hash_string(isl_hash_init(), name->name);
97
entry = isl_hash_table_find(ctx, &ctx->name_hash, name_hash,
98
isl_name_eq, name, 0);
99
isl_assert(ctx, entry, return);
100
isl_hash_table_remove(ctx, &ctx->name_hash, entry);
102
free((char *)name->name);