42 #ifndef PB_DS_RANGED_PROBE_FN_HPP 
   43 #define PB_DS_RANGED_PROBE_FN_HPP 
   53     template<
typename Key, 
typename Hash_Fn, 
typename _Alloc,
 
   54          typename Comb_Probe_Fn, 
typename Probe_Fn, 
bool Store_Hash>
 
   57 #define PB_DS_CLASS_T_DEC \ 
   58     template<typename Key, typename Hash_Fn, typename _Alloc, \ 
   59          typename Comb_Probe_Fn, typename Probe_Fn> 
   61 #define PB_DS_CLASS_C_DEC \ 
   62     ranged_probe_fn<Key, Hash_Fn, _Alloc, Comb_Probe_Fn, Probe_Fn, false> 
   69     template<
typename Key, 
typename Hash_Fn, 
typename _Alloc,
 
   70          typename Comb_Probe_Fn, 
typename Probe_Fn>
 
   73     : 
public Hash_Fn, 
public Comb_Probe_Fn, 
public Probe_Fn
 
   76       typedef typename _Alloc::size_type size_type;
 
   77       typedef Comb_Probe_Fn comb_probe_fn_base;
 
   78       typedef Hash_Fn hash_fn_base;
 
   79       typedef Probe_Fn probe_fn_base;
 
   80       typedef typename _Alloc::template rebind<Key>::other key_allocator;
 
   81       typedef typename key_allocator::const_reference key_const_reference;
 
   93       swap(PB_DS_CLASS_C_DEC&);
 
   96       notify_resized(size_type);
 
   99       operator()(key_const_reference) 
const;
 
  102       operator()(key_const_reference, size_type, size_type) 
const;
 
  107     ranged_probe_fn(size_type size)
 
  108     { Comb_Probe_Fn::notify_resized(size); }
 
  112     ranged_probe_fn(size_type size, 
const Hash_Fn& r_hash_fn) 
 
  114     { Comb_Probe_Fn::notify_resized(size); }
 
  118     ranged_probe_fn(size_type size, 
const Hash_Fn& r_hash_fn, 
 
  119             const Comb_Probe_Fn& r_comb_probe_fn) 
 
  120     : Hash_Fn(r_hash_fn), Comb_Probe_Fn(r_comb_probe_fn)
 
  121     { comb_probe_fn_base::notify_resized(size); }
 
  125     ranged_probe_fn(size_type size, 
const Hash_Fn& r_hash_fn, 
 
  126             const Comb_Probe_Fn& r_comb_probe_fn, 
 
  127             const Probe_Fn& r_probe_fn) 
 
  128     : Hash_Fn(r_hash_fn), Comb_Probe_Fn(r_comb_probe_fn), Probe_Fn(r_probe_fn)
 
  129     { comb_probe_fn_base::notify_resized(size); }
 
  134     swap(PB_DS_CLASS_C_DEC& other)
 
  137       std::swap((Hash_Fn& )(*
this), (Hash_Fn&)other);
 
  143     notify_resized(size_type size)
 
  144     { comb_probe_fn_base::notify_resized(size); }
 
  147     inline typename PB_DS_CLASS_C_DEC::size_type
 
  149     operator()(key_const_reference r_key)
 const 
  150     { 
return comb_probe_fn_base::operator()(hash_fn_base::operator()(r_key)); }
 
  153     inline typename PB_DS_CLASS_C_DEC::size_type
 
  155     operator()(key_const_reference, size_type hash, size_type i)
 const 
  157       return comb_probe_fn_base::operator()(hash + probe_fn_base::operator()(i));
 
  160 #undef PB_DS_CLASS_T_DEC 
  161 #undef PB_DS_CLASS_C_DEC 
  163 #define PB_DS_CLASS_T_DEC \ 
  164     template<typename Key, typename Hash_Fn, typename _Alloc, \ 
  165          typename Comb_Probe_Fn, typename Probe_Fn> 
  167 #define PB_DS_CLASS_C_DEC \ 
  168     ranged_probe_fn<Key, Hash_Fn, _Alloc, Comb_Probe_Fn, Probe_Fn, true> 
  174     template<
typename Key, 
typename Hash_Fn, 
typename _Alloc,
 
  175          typename Comb_Probe_Fn, 
typename Probe_Fn>
 
  178     : 
public Hash_Fn, 
public Comb_Probe_Fn, 
public Probe_Fn
 
  181       typedef typename _Alloc::size_type size_type;
 
  183       typedef Comb_Probe_Fn comb_probe_fn_base;
 
  184       typedef Hash_Fn hash_fn_base;
 
  185       typedef Probe_Fn probe_fn_base;
 
  186       typedef typename _Alloc::template rebind<Key>::other key_allocator;
 
  187       typedef typename key_allocator::const_reference key_const_reference;
 
  194               const Comb_Probe_Fn&);
 
  200       swap(PB_DS_CLASS_C_DEC&);
 
  203       notify_resized(size_type);
 
  206       operator()(key_const_reference) 
const;
 
  209       operator()(key_const_reference, size_type, size_type) 
const;
 
  212       operator()(key_const_reference, size_type) 
const;
 
  217     ranged_probe_fn(size_type size)
 
  218     { Comb_Probe_Fn::notify_resized(size); }
 
  222     ranged_probe_fn(size_type size, 
const Hash_Fn& r_hash_fn) 
 
  224     { Comb_Probe_Fn::notify_resized(size); }
 
  228     ranged_probe_fn(size_type size, 
const Hash_Fn& r_hash_fn, 
 
  229             const Comb_Probe_Fn& r_comb_probe_fn) 
 
  230     : Hash_Fn(r_hash_fn), Comb_Probe_Fn(r_comb_probe_fn)
 
  231     { comb_probe_fn_base::notify_resized(size); }
 
  235     ranged_probe_fn(size_type size, 
const Hash_Fn& r_hash_fn, 
 
  236             const Comb_Probe_Fn& r_comb_probe_fn, 
 
  237             const Probe_Fn& r_probe_fn) 
 
  238     : Hash_Fn(r_hash_fn), Comb_Probe_Fn(r_comb_probe_fn), Probe_Fn(r_probe_fn)
 
  239     { comb_probe_fn_base::notify_resized(size); }
 
  244     swap(PB_DS_CLASS_C_DEC& other)
 
  247       std::swap((Hash_Fn& )(*
this), (Hash_Fn& )other);
 
  253     notify_resized(size_type size)
 
  254     { comb_probe_fn_base::notify_resized(size); }
 
  257     inline typename PB_DS_CLASS_C_DEC::comp_hash
 
  259     operator()(key_const_reference r_key)
 const 
  261       const size_type hash = hash_fn_base::operator()(r_key);
 
  262       return std::make_pair(comb_probe_fn_base::operator()(hash), hash);
 
  266     inline typename PB_DS_CLASS_C_DEC::size_type
 
  268     operator()(key_const_reference, size_type hash, size_type i)
 const 
  270       return comb_probe_fn_base::operator()(hash + probe_fn_base::operator()(i));
 
  274     inline typename PB_DS_CLASS_C_DEC::size_type
 
  277 #ifdef _GLIBCXX_DEBUG 
  278       (key_const_reference r_key, size_type hash) 
const 
  280       (key_const_reference , size_type hash) 
const 
  283       _GLIBCXX_DEBUG_ASSERT(hash == hash_fn_base::operator()(r_key));
 
  287 #undef PB_DS_CLASS_T_DEC 
  288 #undef PB_DS_CLASS_C_DEC 
  295     template<
typename Key, 
typename _Alloc, 
typename Comb_Probe_Fn>
 
  298     : 
public Comb_Probe_Fn
 
  301       typedef typename _Alloc::size_type size_type;
 
  302       typedef Comb_Probe_Fn comb_probe_fn_base;
 
  303       typedef typename _Alloc::template rebind<Key>::other key_allocator;
 
  304       typedef typename key_allocator::const_reference key_const_reference;
 
  307       { Comb_Probe_Fn::notify_resized(size); }
 
  310       : Comb_Probe_Fn(r_comb_probe_fn)
 
  314               const Comb_Probe_Fn& r_comb_probe_fn, 
 
  316       : Comb_Probe_Fn(r_comb_probe_fn)
 
constexpr pair< typename __decay_and_strip< _T1 >::__type, typename __decay_and_strip< _T2 >::__type > make_pair(_T1 &&__x, _T2 &&__y)
A convenience wrapper for creating a pair from two objects. 
GNU extensions for policy-based data structures for public use. 
Represents no type, or absence of type, for template tricks. 
Struct holding two objects of arbitrary type. 
void swap(_Tp &, _Tp &) noexcept(__and_< is_nothrow_move_constructible< _Tp >, is_nothrow_move_assignable< _Tp >>::value)
Swaps two values.