This patch just adds the standard pointer handling of empty and deleted
entries.  As the series goes on, more and more traits classes will inherit
these definitions, to the point where we can require the functions to exist.

gcc/
        * hash-traits.h (pointer_hash::mark_deleted, pointer_hash::mark_empty)
        (pointer_hash::is_deleted, pointer_hash::is_empty): New functions.

Index: gcc/hash-traits.h
===================================================================
--- gcc/hash-traits.h   2015-06-15 16:04:53.375564430 +0100
+++ gcc/hash-traits.h   2015-06-15 16:04:53.371564477 +0100
@@ -66,9 +66,12 @@ struct pointer_hash : typed_noop_remove
   typedef Type *compare_type;
 
   static inline hashval_t hash (const value_type &);
-
   static inline bool equal (const value_type &existing,
                            const compare_type &candidate);
+  static inline void mark_deleted (Type *&);
+  static inline void mark_empty (Type *&);
+  static inline bool is_deleted (Type *);
+  static inline bool is_empty (Type *);
 };
 
 template <typename Type>
@@ -88,6 +91,34 @@ pointer_hash <Type>::equal (const value_
   return existing == candidate;
 }
 
+template <typename Type>
+inline void
+pointer_hash <Type>::mark_deleted (Type *&e)
+{
+  e = reinterpret_cast<Type *> (1);
+}
+
+template <typename Type>
+inline void
+pointer_hash <Type>::mark_empty (Type *&e)
+{
+  e = NULL;
+}
+
+template <typename Type>
+inline bool
+pointer_hash <Type>::is_deleted (Type *e)
+{
+  return e == reinterpret_cast<Type *> (1);
+}
+
+template <typename Type>
+inline bool
+pointer_hash <Type>::is_empty (Type *e)
+{
+  return e == NULL;
+}
+
 /* Hasher for entry in gc memory.  */
 
 template<typename T>

Reply via email to