diff options
Diffstat (limited to 'gcc/hash-map-traits.h')
-rw-r--r-- | gcc/hash-map-traits.h | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/gcc/hash-map-traits.h b/gcc/hash-map-traits.h index 669a637..9cab0ec 100644 --- a/gcc/hash-map-traits.h +++ b/gcc/hash-map-traits.h @@ -174,4 +174,84 @@ simple_hashmap_traits <H>::mark_deleted (T &entry) H::mark_deleted (entry.m_key); } +/* Implement traits for a hash_map with values of type Value for cases + in which the key cannot represent empty and deleted slots. Instead + record empty and deleted entries in Value. Derived classes must + implement the hash and equal_keys functions. */ + +template <typename Value> +struct unbounded_hashmap_traits +{ + 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 Value> +template <typename T> +inline void +unbounded_hashmap_traits <Value>::remove (T &entry) +{ + default_hash_traits <Value>::remove (entry.m_value); +} + +template <typename Value> +template <typename T> +inline bool +unbounded_hashmap_traits <Value>::is_empty (const T &entry) +{ + return default_hash_traits <Value>::is_empty (entry.m_value); +} + +template <typename Value> +template <typename T> +inline bool +unbounded_hashmap_traits <Value>::is_deleted (const T &entry) +{ + return default_hash_traits <Value>::is_deleted (entry.m_value); +} + +template <typename Value> +template <typename T> +inline void +unbounded_hashmap_traits <Value>::mark_empty (T &entry) +{ + default_hash_traits <Value>::mark_empty (entry.m_value); +} + +template <typename Value> +template <typename T> +inline void +unbounded_hashmap_traits <Value>::mark_deleted (T &entry) +{ + default_hash_traits <Value>::mark_deleted (entry.m_value); +} + +/* Implement traits for a hash_map from integer type Key to Value in + cases where Key has no spare values for recording empty and deleted + slots. */ + +template <typename Key, typename Value> +struct unbounded_int_hashmap_traits : unbounded_hashmap_traits <Value> +{ + static inline hashval_t hash (Key); + static inline bool equal_keys (Key, Key); +}; + +template <typename Key, typename Value> +inline hashval_t +unbounded_int_hashmap_traits <Key, Value>::hash (Key k) +{ + return k; +} + +template <typename Key, typename Value> +inline bool +unbounded_int_hashmap_traits <Key, Value>::equal_keys (Key k1, Key k2) +{ + return k1 == k2; +} + #endif // HASH_MAP_TRAITS_H |