42 #ifndef PB_DS_HASH_EQ_FN_HPP
43 #define PB_DS_HASH_EQ_FN_HPP
53 template<
typename Key,
typename Eq_Fn,
typename _Alloc,
bool Store_Hash>
57 template<
typename Key,
typename Eq_Fn,
typename _Alloc>
58 struct hash_eq_fn<Key, Eq_Fn, _Alloc, false> :
public Eq_Fn
60 typedef Eq_Fn eq_fn_base;
61 typedef typename _Alloc::template rebind<Key>::other key_allocator;
62 typedef typename key_allocator::const_reference key_const_reference;
66 hash_eq_fn(
const Eq_Fn& r_eq_fn) : Eq_Fn(r_eq_fn) { }
69 operator()(key_const_reference r_lhs_key,
70 key_const_reference r_rhs_key)
const
71 {
return eq_fn_base::operator()(r_lhs_key, r_rhs_key); }
75 {
std::swap((Eq_Fn&)(*
this), (Eq_Fn&)other); }
80 template<
typename Key,
class Eq_Fn,
class _Alloc>
81 struct hash_eq_fn<Key, Eq_Fn, _Alloc, true> :
public Eq_Fn
83 typedef typename _Alloc::size_type size_type;
84 typedef Eq_Fn eq_fn_base;
85 typedef typename _Alloc::template rebind<Key>::other key_allocator;
86 typedef typename key_allocator::const_reference key_const_reference;
90 hash_eq_fn(
const Eq_Fn& r_eq_fn) : Eq_Fn(r_eq_fn) { }
93 operator()(key_const_reference r_lhs_key, size_type lhs_hash,
94 key_const_reference r_rhs_key, size_type rhs_hash)
const
96 _GLIBCXX_DEBUG_ASSERT(!eq_fn_base::operator()(r_lhs_key, r_rhs_key)
97 || lhs_hash == rhs_hash);
99 return (lhs_hash == rhs_hash &&
100 eq_fn_base::operator()(r_lhs_key, r_rhs_key));
105 {
std::swap((Eq_Fn&)(*
this), (Eq_Fn&)(other)); }
GNU extensions for policy-based data structures for public use.
void swap(_Tp &, _Tp &) noexcept(__and_< is_nothrow_move_constructible< _Tp >, is_nothrow_move_assignable< _Tp >>::value)
Swaps two values.