hash-map-traits.h: Include hash-traits.h.
authorRichard Sandiford <richard.sandiford@arm.com>
Thu, 25 Jun 2015 17:15:35 +0000 (17:15 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Thu, 25 Jun 2015 17:15:35 +0000 (17:15 +0000)
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

gcc/ChangeLog
gcc/hash-map-traits.h
gcc/mem-stats.h

index 49f8515cede95921b567f3ef03b2dbdf064f7340..fdfe9d0a8db363b27e2cd9444952eedee0564e94 100644 (file)
@@ -1,3 +1,10 @@
+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.
index ce9c4a74b4031ec79d1957c12b44ff5a68aec0a3..669a63797023d23f8661f6c045869b2a514d1dd6 100644 (file)
@@ -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
index 6d3d79c7f10fff3b9a78cea006fbdc9324494245..63277b302cecee04b1c1c56c63df9bd9c3b3d1ee 100644 (file)
@@ -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