This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[04/13] Add {mark,is}_{empty,deleted} to pointer_hash
- From: Richard Sandiford <richard dot sandiford at arm dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: Tue, 16 Jun 2015 09:53:26 +0100
- Subject: [04/13] Add {mark,is}_{empty,deleted} to pointer_hash
- Authentication-results: sourceware.org; auth=none
- References: <87fv5s2gej dot fsf at e105548-lin dot cambridge dot arm dot com>
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>