41 #ifndef PB_DS_ASSOC_CNTNR_HPP 
   42 #define PB_DS_ASSOC_CNTNR_HPP 
   64 #define PB_DS_HASH_BASE \ 
   65   detail::container_base_dispatch<Key, Mapped, _Alloc, Tag, \ 
   66     typename __gnu_cxx::typelist::append< \ 
   67     typename __gnu_cxx::typelist::create4<Hash_Fn, Eq_Fn, Resize_Policy, \ 
   68     detail::integral_constant<int, Store_Hash> >::type, Policy_Tl>::type>::type 
   95   template<
typename Key,
 
   99        typename Resize_Policy,
 
  107     typedef typename PB_DS_HASH_BASE        base_type;
 
  117     : base_type((
const base_type&)other) { }
 
  119     template<
typename T0>
 
  122     template<
typename T0, 
typename T1>
 
  125     template<
typename T0, 
typename T1, 
typename T2>
 
  128     template<
typename T0, 
typename T1, 
typename T2, 
typename T3>
 
  130       : base_type(t0, t1, t2, t3) { }
 
  132     template<
typename T0, 
typename T1, 
typename T2, 
typename T3, 
typename T4>
 
  134       : base_type(t0, t1, t2, t3, t4) { }
 
  136     template<
typename T0, 
typename T1, 
typename T2, 
typename T3, 
typename T4,
 
  139       : base_type(t0, t1, t2, t3, t4, t5) { }
 
  141     template<
typename T0, 
typename T1, 
typename T2, 
typename T3, 
typename T4,
 
  142          typename T5, 
typename T6>
 
  143       basic_hash_table(T0 t0, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6)
 
  144       : base_type(t0, t1, t2, t3, t4, t5, t6) { }
 
  146     template<
typename T0, 
typename T1, 
typename T2, 
typename T3, 
typename T4,
 
  147          typename T5, 
typename T6, 
typename T7>
 
  148       basic_hash_table(T0 t0, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7)
 
  149       : base_type(t0, t1, t2, t3, t4, t5, t6, t7) { }
 
  151     template<
typename T0, 
typename T1, 
typename T2, 
typename T3, 
typename T4,
 
  152          typename T5, 
typename T6, 
typename T7, 
typename T8>
 
  153       basic_hash_table(T0 t0, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6,
 
  155       : base_type(t0, t1, t2, t3, t4, t5, t6, t7, t8)
 
  160     operator=(
const base_type&);
 
  163 #undef PB_DS_HASH_BASE 
  166 #define PB_DS_CC_HASH_BASE \ 
  167   basic_hash_table<Key, Mapped, Hash_Fn, Eq_Fn, Resize_Policy, Store_Hash, \ 
  169       typename __gnu_cxx::typelist::create1<Comb_Hash_Fn>::type, _Alloc> 
  196   template<
typename Key,
 
  202        bool Store_Hash = detail::default_store_hash,
 
  211     typedef Hash_Fn                 hash_fn;
 
  213     typedef Resize_Policy           resize_policy;
 
  214     typedef Comb_Hash_Fn            comb_hash_fn;
 
  229     : base_type(h, e) { }
 
  237     : base_type(h, e, ch) { }
 
  246           const resize_policy& rp)
 
  247     : base_type(h, e, ch, rp) { }
 
  252     template<
typename It>
 
  254     { base_type::copy_from_range(first, last); }
 
  259     template<
typename It>
 
  262     { this->copy_from_range(first, last); }
 
  270     template<
typename It>
 
  273     { this->copy_from_range(first, last); }
 
  282     template<
typename It>
 
  284           const comb_hash_fn& ch)
 
  285     : base_type(h, e, ch)
 
  286     { this->copy_from_range(first, last); }
 
  296     template<
typename It>
 
  298           const comb_hash_fn& ch, 
const resize_policy& rp)
 
  299     : base_type(h, e, ch, rp)
 
  300     { this->copy_from_range(first, last); }
 
  303     : base_type((const base_type&)other)
 
  325 #undef PB_DS_CC_HASH_BASE 
  328 #define PB_DS_GP_HASH_BASE \ 
  329   basic_hash_table<Key, Mapped, Hash_Fn, Eq_Fn, Resize_Policy, Store_Hash, \ 
  331   typename __gnu_cxx::typelist::create2<Comb_Probe_Fn, Probe_Fn>::type, _Alloc> 
  359   template<
typename Key,
 
  361        typename Hash_Fn = 
typename detail::default_hash_fn<Key>::type,
 
  362        typename Eq_Fn = 
typename detail::default_eq_fn<Key>::type,
 
  364        typename Probe_Fn = 
typename detail::default_probe_fn<Comb_Probe_Fn>::type,
 
  365        typename Resize_Policy = 
typename detail::default_resize_policy<Comb_Probe_Fn>::type,
 
  366        bool Store_Hash = detail::default_store_hash,
 
  371     typedef PB_DS_GP_HASH_BASE          base_type;
 
  375     typedef Hash_Fn                 hash_fn;
 
  377     typedef Comb_Probe_Fn           comb_probe_fn;
 
  378     typedef Probe_Fn                probe_fn;
 
  379     typedef Resize_Policy           resize_policy;
 
  394     : base_type(h, e) { }
 
  402     : base_type(h, e, cp) { }
 
  412     : base_type(h, e, cp, p) { }
 
  423           const probe_fn& p, 
const resize_policy& rp)
 
  424     : base_type(h, e, cp, p, rp) { }
 
  429     template<
typename It>
 
  431     { base_type::copy_from_range(first, last); }
 
  437     template<
typename It>
 
  440     { base_type::copy_from_range(first, last); }
 
  448     template<
typename It>
 
  451     { base_type::copy_from_range(first, last); }
 
  460     template<
typename It>
 
  462           const comb_probe_fn& cp)
 
  463     : base_type(h, e, cp)
 
  464     { base_type::copy_from_range(first, last); }
 
  474     template<
typename It>
 
  476           const comb_probe_fn& cp, 
const probe_fn& p)
 
  477     : base_type(h, e, cp, p)
 
  478     { base_type::copy_from_range(first, last); }
 
  490     template<
typename It>
 
  492           const comb_probe_fn& cp, 
const probe_fn& p,
 
  493           const resize_policy& rp)
 
  494     : base_type(h, e, cp, p, rp)
 
  495     { base_type::copy_from_range(first, last); }
 
  498     : base_type((const base_type&)other)
 
  520 #undef PB_DS_GP_HASH_BASE 
  528 #define PB_DS_BRANCH_BASE \ 
  529   detail::container_base_dispatch<Key, Mapped, _Alloc, Tag, Policy_Tl>::type 
  553   template<
typename Key, 
typename Mapped, 
typename Tag,
 
  554        typename Node_Update, 
typename Policy_Tl, 
typename _Alloc>
 
  558     typedef typename PB_DS_BRANCH_BASE          base_type;
 
  561     typedef Node_Update             node_update;
 
  570     : base_type((
const base_type&)other) { }
 
  572     template<
typename T0>
 
  575     template<
typename T0, 
typename T1>
 
  578     template<
typename T0, 
typename T1, 
typename T2>
 
  579       basic_branch(T0 t0, T1 t1, T2 t2) : base_type(t0, t1, t2) { }
 
  581     template<
typename T0, 
typename T1, 
typename T2, 
typename T3>
 
  583       : base_type(t0, t1, t2, t3) { }
 
  585     template<
typename T0, 
typename T1, 
typename T2, 
typename T3, 
typename T4>
 
  587       : base_type(t0, t1, t2, t3, t4) { }
 
  589     template<
typename T0, 
typename T1, 
typename T2, 
typename T3, 
typename T4,
 
  592       : base_type(t0, t1, t2, t3, t4, t5) { }
 
  594     template<
typename T0, 
typename T1, 
typename T2, 
typename T3, 
typename T4,
 
  595          typename T5, 
typename T6>
 
  596       basic_branch(T0 t0, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6)
 
  597       : base_type(t0, t1, t2, t3, t4, t5, t6) { }
 
  599 #undef PB_DS_BRANCH_BASE 
  602 #define PB_DS_TREE_NODE_AND_IT_TRAITS \ 
  603   detail::tree_traits<Key, Mapped,Cmp_Fn,Node_Update,Tag,_Alloc> 
  605 #define PB_DS_TREE_BASE \ 
  606   basic_branch<Key,Mapped, Tag, \ 
  607            typename PB_DS_TREE_NODE_AND_IT_TRAITS::node_update, \ 
  608            typename __gnu_cxx::typelist::create2<Cmp_Fn, \ 
  609            PB_DS_TREE_NODE_AND_IT_TRAITS>::type, _Alloc> 
  629   template<
typename Key, 
typename Mapped, 
typename Cmp_Fn = std::less<Key>,
 
  630        typename Tag = rb_tree_tag,
 
  631        template<
typename Node_CItr, 
typename Node_Itr,
 
  632             typename Cmp_Fn_, 
typename _Alloc_>
 
  635   class tree : 
public PB_DS_TREE_BASE
 
  638     typedef PB_DS_TREE_BASE             base_type;
 
  654     template<
typename It>
 
  656     { base_type::copy_from_range(first, last); }
 
  662     template<
typename It>
 
  663     tree(It first, It last, 
const cmp_fn& c)
 
  665     { base_type::copy_from_range(first, last); }
 
  668     : base_type((const base_type&)other) { }
 
  674     operator=(
const tree& other)
 
  689 #undef PB_DS_TREE_BASE 
  690 #undef PB_DS_TREE_NODE_AND_IT_TRAITS 
  693 #define PB_DS_TRIE_NODE_AND_IT_TRAITS \ 
  694   detail::trie_traits<Key,Mapped,_ATraits,Node_Update,Tag,_Alloc> 
  696 #define PB_DS_TRIE_BASE \ 
  697   basic_branch<Key,Mapped,Tag, \ 
  698            typename PB_DS_TRIE_NODE_AND_IT_TRAITS::node_update, \ 
  699            typename __gnu_cxx::typelist::create2<_ATraits, \ 
  700            PB_DS_TRIE_NODE_AND_IT_TRAITS >::type, _Alloc> 
  720   template<
typename Key,
 
  722        typename _ATraits = \
 
  723             typename detail::default_trie_access_traits<Key>::type,
 
  724        typename Tag = pat_trie_tag,
 
  725        template<
typename Node_CItr,
 
  729        class Node_Update = null_node_update,
 
  731   class trie : 
public PB_DS_TRIE_BASE
 
  734     typedef PB_DS_TRIE_BASE         base_type;
 
  750     template<
typename It>
 
  752     { base_type::copy_from_range(first, last); }
 
  757     template<
typename It>
 
  758     trie(It first, It last, 
const access_traits& t)
 
  760     { base_type::copy_from_range(first, last); }
 
  763     : base_type((const base_type&)other) { }
 
  769     operator=(
const trie& other)
 
  784 #undef PB_DS_TRIE_BASE 
  785 #undef PB_DS_TRIE_NODE_AND_IT_TRAITS 
  793 #define PB_DS_LU_BASE \ 
  794   detail::container_base_dispatch<Key, Mapped, _Alloc, list_update_tag, \ 
  795     typename __gnu_cxx::typelist::create2<Eq_Fn, Update_Policy>::type>::type 
  810   template<
typename Key,
 
  812        class Eq_Fn = 
typename detail::default_eq_fn<Key>::type,
 
  818     typedef typename PB_DS_LU_BASE      base_type;
 
  823     typedef Update_Policy           update_policy;
 
  830     template<
typename It>
 
  832     { base_type::copy_from_range(first, last); }
 
  835     : base_type((const base_type&)other) { }
 
  841     operator=(
const list_update& other)
 
  845       list_update tmp(other);
 
  852     swap(list_update& other)
 
cc_hash_table(const hash_fn &h, const eq_fn &e)
Constructor taking some policy objects. r_hash_fn will be copied by the hash_fn object of the contain...
gp_hash_table()
Default constructor. 
cc_hash_table(It first, It last, const hash_fn &h, const eq_fn &e)
Constructor taking __iterators to a range of value_types and some policy objects The value_types betw...
cc_hash_table(It first, It last, const hash_fn &h, const eq_fn &e, const comb_hash_fn &ch, const resize_policy &rp)
Constructor taking __iterators to a range of value_types and some policy objects The value_types betw...
trie(It first, It last, const access_traits &t)
Constructor taking __iterators to a range of value_types and some policy objects. The value_types bet...
std::tr1::hash< Key > type
Dispatched type. 
trie(const access_traits &t)
Constructor taking some policy objects. r_access_traits will be copied by the _ATraits object of the ...
gp_hash_table(It first, It last)
Constructor taking __iterators to a range of value_types. The value_types between first_it and last_i...
gp_hash_table(It first, It last, const hash_fn &h, const eq_fn &e, const comb_probe_fn &cp, const probe_fn &p, const resize_policy &rp)
Constructor taking __iterators to a range of value_types and some policy objects. The value_types bet...
GNU extensions for policy-based data structures for public use. 
Cmp_Fn cmp_fn
Comparison functor type. 
gp_hash_table(const hash_fn &h, const eq_fn &e, const comb_probe_fn &cp)
Constructor taking some policy objects. r_hash_fn will be copied by the hash_fn object of the contain...
gp_hash_table(const hash_fn &h, const eq_fn &e)
Constructor taking some policy objects. r_hash_fn will be copied by the hash_fn object of the contain...
gp_hash_table(const hash_fn &h, const eq_fn &e, const comb_probe_fn &cp, const probe_fn &p, const resize_policy &rp)
Constructor taking some policy objects. r_hash_fn will be copied by the hash_fn object of the contain...
list_update(It first, It last)
Constructor taking __iterators to a range of value_types. The value_types between first_it and last_i...
gp_hash_table(It first, It last, const hash_fn &h, const eq_fn &e, const comb_probe_fn &cp, const probe_fn &p)
Constructor taking __iterators to a range of value_types and some policy objects. The value_types bet...
cc_hash_table(const hash_fn &h, const eq_fn &e, const comb_hash_fn &ch, const resize_policy &rp)
Constructor taking some policy objects. r_hash_fn will be copied by the hash_fn object of the contain...
cc_hash_table(It first, It last, const hash_fn &h, const eq_fn &e, const comb_hash_fn &ch)
Constructor taking __iterators to a range of value_types and some policy objects The value_types betw...
cc_hash_table(const hash_fn &h, const eq_fn &e, const comb_hash_fn &ch)
Constructor taking some policy objects. r_hash_fn will be copied by the hash_fn object of the contain...
tree(const cmp_fn &c)
Constructor taking some policy objects. r_cmp_fn will be copied by the Cmp_Fn object of the container...
The standard allocator, as per [20.4]. 
One of the comparison functors. 
gp_hash_table(const hash_fn &h)
Constructor taking some policy objects. r_hash_fn will be copied by the hash_fn object of the contain...
tree(It first, It last)
Constructor taking __iterators to a range of value_types. The value_types between first_it and last_i...
gp_hash_table(const hash_fn &h, const eq_fn &e, const comb_probe_fn &cp, const probe_fn &p)
Constructor taking some policy objects. r_hash_fn will be copied by the hash_fn object of the contain...
gp_hash_table(It first, It last, const hash_fn &h, const eq_fn &e, const comb_probe_fn &cp)
Constructor taking __iterators to a range of value_types and some policy objects. The value_types bet...
gp_hash_table(It first, It last, const hash_fn &h)
Constructor taking __iterators to a range of value_types and some policy objects. The value_types bet...
A resize policy which delegates operations to size and trigger policies. 
cc_hash_table(const hash_fn &h)
Constructor taking some policy objects. r_hash_fn will be copied by the Hash_Fn object of the contain...
direct_mask_range_hashing type
Dispatched type. 
A null node updator, indicating that no node updates are required. 
trie(It first, It last)
Constructor taking __iterators to a range of value_types. The value_types between first_it and last_i...
_ATraits access_traits
Element access traits type. 
cc_hash_table(It first, It last, const hash_fn &h)
Constructor taking __iterators to a range of value_types and some policy objects. The value_types bet...
cc_hash_table(It first, It last)
Constructor taking __iterators to a range of value_types. The value_types between first_it and last_i...
void swap(_Tp &, _Tp &) noexcept(__and_< is_nothrow_move_constructible< _Tp >, is_nothrow_move_assignable< _Tp >>::value)
Swaps two values. 
tree(It first, It last, const cmp_fn &c)
Constructor taking __iterators to a range of value_types and some policy objects The value_types betw...
lu_move_to_front_policy type
Dispatched type. 
gp_hash_table(It first, It last, const hash_fn &h, const eq_fn &e)
Constructor taking __iterators to a range of value_types and some policy objects. The value_types bet...
cc_hash_table()
Default constructor.