aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2015-06-25 17:15:35 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2015-06-25 17:15:35 +0000
commit4ef7b52a932fffd5a43c26183515dcafc735c9a2 (patch)
tree5600bf9521c2038070ac65ff7945d6c85e05a746 /gcc
parent8998354f8d860e1db063add78f20e521ff514cf2 (diff)
downloadgcc-4ef7b52a932fffd5a43c26183515dcafc735c9a2.zip
gcc-4ef7b52a932fffd5a43c26183515dcafc735c9a2.tar.gz
gcc-4ef7b52a932fffd5a43c26183515dcafc735c9a2.tar.bz2
hash-map-traits.h: Include hash-traits.h.
gcc/ * hash-map-traits.h: Include hash-traits.h. (simple_hashmap_traits): New class. * mem-stats.h (hash_map): Change the default traits to simple_hashmap_traits<default_hash_traits<Key> >. From-SVN: r224966
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/hash-map-traits.h73
-rw-r--r--gcc/mem-stats.h2
3 files changed, 81 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 49f8515..fdfe9d0 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,12 @@
2015-06-25 Richard Sandiford <richard.sandiford@arm.com>
+ * hash-map-traits.h: Include hash-traits.h.
+ (simple_hashmap_traits): New class.
+ * mem-stats.h (hash_map): Change the default traits to
+ simple_hashmap_traits<default_hash_traits<Key> >.
+
+2015-06-25 Richard Sandiford <richard.sandiford@arm.com>
+
* hash-table.h: Update comments.
2015-06-25 Richard Sandiford <richard.sandiford@arm.com>
diff --git a/gcc/hash-map-traits.h b/gcc/hash-map-traits.h
index ce9c4a7..669a637 100644
--- a/gcc/hash-map-traits.h
+++ b/gcc/hash-map-traits.h
@@ -23,6 +23,8 @@ along with GCC; see the file COPYING3. If not see
/* Bacause mem-stats.h uses default hashmap traits, we have to
put the class to this separate header file. */
+#include "hash-traits.h"
+
/* implement default behavior for traits when types allow it. */
struct default_hashmap_traits
@@ -101,4 +103,75 @@ private:
}
};
+/* Implement hash_map traits for a key with hash traits H. Empty and
+ deleted map entries are represented as empty and deleted keys. */
+
+template <typename H>
+struct simple_hashmap_traits
+{
+ static inline hashval_t hash (const typename H::value_type &);
+ static inline bool equal_keys (const typename H::value_type &,
+ const typename H::value_type &);
+ template <typename T> static inline void remove (T &);
+ template <typename T> static inline bool is_empty (const T &);
+ template <typename T> static inline bool is_deleted (const T &);
+ template <typename T> static inline void mark_empty (T &);
+ template <typename T> static inline void mark_deleted (T &);
+};
+
+template <typename H>
+inline hashval_t
+simple_hashmap_traits <H>::hash (const typename H::value_type &h)
+{
+ return H::hash (h);
+}
+
+template <typename H>
+inline bool
+simple_hashmap_traits <H>::equal_keys (const typename H::value_type &k1,
+ const typename H::value_type &k2)
+{
+ return H::equal (k1, k2);
+}
+
+template <typename H>
+template <typename T>
+inline void
+simple_hashmap_traits <H>::remove (T &entry)
+{
+ H::remove (entry.m_key);
+}
+
+template <typename H>
+template <typename T>
+inline bool
+simple_hashmap_traits <H>::is_empty (const T &entry)
+{
+ return H::is_empty (entry.m_key);
+}
+
+template <typename H>
+template <typename T>
+inline bool
+simple_hashmap_traits <H>::is_deleted (const T &entry)
+{
+ return H::is_deleted (entry.m_key);
+}
+
+template <typename H>
+template <typename T>
+inline void
+simple_hashmap_traits <H>::mark_empty (T &entry)
+{
+ H::mark_empty (entry.m_key);
+}
+
+template <typename H>
+template <typename T>
+inline void
+simple_hashmap_traits <H>::mark_deleted (T &entry)
+{
+ H::mark_deleted (entry.m_key);
+}
+
#endif // HASH_MAP_TRAITS_H
diff --git a/gcc/mem-stats.h b/gcc/mem-stats.h
index 6d3d79c7..63277b3 100644
--- a/gcc/mem-stats.h
+++ b/gcc/mem-stats.h
@@ -3,7 +3,7 @@
/* Forward declaration. */
template<typename Key, typename Value,
- typename Traits = default_hashmap_traits>
+ typename Traits = simple_hashmap_traits<default_hash_traits<Key> > >
class hash_map;
#define LOCATION_LINE_EXTRA_SPACE 30