diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2015-06-25 17:16:23 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2015-06-25 17:16:23 +0000 |
commit | 20d2c372c21b9f92b30428d7b545af320d7d2303 (patch) | |
tree | ef11c0ce585dd35735de0a607dd716f3fa308d6e /gcc/hash-traits.h | |
parent | 84a98514b3d659ab6ca4b6bc624a1b7453fa0daa (diff) | |
download | gcc-20d2c372c21b9f92b30428d7b545af320d7d2303.zip gcc-20d2c372c21b9f92b30428d7b545af320d7d2303.tar.gz gcc-20d2c372c21b9f92b30428d7b545af320d7d2303.tar.bz2 |
hash-traits.h (string_hash, [...]): New classes.
gcc/
* hash-traits.h (string_hash, nofree_string_hash): New classes.
* genmatch.c (capture_id_map_hasher): Use nofree_string_hash.
* passes.c (pass_registry_hasher): Likewise.
* config/alpha/alpha.c (string_traits): Likewise.
* config/i386/winnt.c (i386_find_on_wrapper_list): Likewise.
* config/m32c/m32c.c (pragma_traits): Likewise.
* config/mep/mep.c (pragma_traits): Likewise.
gcc/java/
* jcf-io.c (memoized_class_lookups): Use nofree_string_hash.
(find_class): Likewise.
From-SVN: r224971
Diffstat (limited to 'gcc/hash-traits.h')
-rw-r--r-- | gcc/hash-traits.h | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/gcc/hash-traits.h b/gcc/hash-traits.h index c580de9..8f97646 100644 --- a/gcc/hash-traits.h +++ b/gcc/hash-traits.h @@ -121,6 +121,27 @@ pointer_hash <Type>::is_empty (Type *e) return e == NULL; } +/* Hasher for "const char *" strings, using string rather than pointer + equality. */ + +struct string_hash : pointer_hash <const char> +{ + static inline hashval_t hash (const char *); + static inline bool equal (const char *, const char *); +}; + +inline hashval_t +string_hash::hash (const char *id) +{ + return htab_hash_string (id); +} + +inline bool +string_hash::equal (const char *id1, const char *id2) +{ + return strcmp (id1, id2) == 0; +} + /* Remover and marker for entries in gc memory. */ template<typename T> @@ -190,6 +211,11 @@ struct ggc_ptr_hash : pointer_hash <T>, ggc_remove <T *> {}; template <typename T> struct ggc_cache_ptr_hash : pointer_hash <T>, ggc_cache_remove <T *> {}; +/* Traits for string elements that should not be freed when an element + is deleted. */ + +struct nofree_string_hash : string_hash, typed_noop_remove <const char *> {}; + template <typename T> struct default_hash_traits; template <typename T> |