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
This commit is contained in:
parent
8998354f8d
commit
4ef7b52a93
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user