aboutsummaryrefslogtreecommitdiff
path: root/gcc/hash-traits.h
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2015-06-25 17:16:23 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2015-06-25 17:16:23 +0000
commit20d2c372c21b9f92b30428d7b545af320d7d2303 (patch)
treeef11c0ce585dd35735de0a607dd716f3fa308d6e /gcc/hash-traits.h
parent84a98514b3d659ab6ca4b6bc624a1b7453fa0daa (diff)
downloadgcc-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.h26
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>