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
);