1*e4b17023SJohn Marino // -*- C++ -*- 2*e4b17023SJohn Marino 3*e4b17023SJohn Marino // Copyright (C) 2005, 2006, 2009, 2011 Free Software Foundation, Inc. 4*e4b17023SJohn Marino // 5*e4b17023SJohn Marino // This file is part of the GNU ISO C++ Library. This library is free 6*e4b17023SJohn Marino // software; you can redistribute it and/or modify it under the terms 7*e4b17023SJohn Marino // of the GNU General Public License as published by the Free Software 8*e4b17023SJohn Marino // Foundation; either version 3, or (at your option) any later 9*e4b17023SJohn Marino // version. 10*e4b17023SJohn Marino 11*e4b17023SJohn Marino // This library is distributed in the hope that it will be useful, but 12*e4b17023SJohn Marino // WITHOUT ANY WARRANTY; without even the implied warranty of 13*e4b17023SJohn Marino // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14*e4b17023SJohn Marino // General Public License for more details. 15*e4b17023SJohn Marino 16*e4b17023SJohn Marino // Under Section 7 of GPL version 3, you are granted additional 17*e4b17023SJohn Marino // permissions described in the GCC Runtime Library Exception, version 18*e4b17023SJohn Marino // 3.1, as published by the Free Software Foundation. 19*e4b17023SJohn Marino 20*e4b17023SJohn Marino // You should have received a copy of the GNU General Public License and 21*e4b17023SJohn Marino // a copy of the GCC Runtime Library Exception along with this program; 22*e4b17023SJohn Marino // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 23*e4b17023SJohn Marino // <http://www.gnu.org/licenses/>. 24*e4b17023SJohn Marino 25*e4b17023SJohn Marino // Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL. 26*e4b17023SJohn Marino 27*e4b17023SJohn Marino // Permission to use, copy, modify, sell, and distribute this software 28*e4b17023SJohn Marino // is hereby granted without fee, provided that the above copyright 29*e4b17023SJohn Marino // notice appears in all copies, and that both that copyright notice 30*e4b17023SJohn Marino // and this permission notice appear in supporting documentation. None 31*e4b17023SJohn Marino // of the above authors, nor IBM Haifa Research Laboratories, make any 32*e4b17023SJohn Marino // representation about the suitability of this software for any 33*e4b17023SJohn Marino // purpose. It is provided "as is" without express or implied 34*e4b17023SJohn Marino // warranty. 35*e4b17023SJohn Marino 36*e4b17023SJohn Marino /** 37*e4b17023SJohn Marino * @file container_base_dispatch.hpp 38*e4b17023SJohn Marino * Contains associative container dispatching. 39*e4b17023SJohn Marino */ 40*e4b17023SJohn Marino 41*e4b17023SJohn Marino #ifndef PB_DS_ASSOC_CNTNR_BASE_DS_DISPATCHER_HPP 42*e4b17023SJohn Marino #define PB_DS_ASSOC_CNTNR_BASE_DS_DISPATCHER_HPP 43*e4b17023SJohn Marino 44*e4b17023SJohn Marino #include <ext/typelist.h> 45*e4b17023SJohn Marino 46*e4b17023SJohn Marino #define PB_DS_ASSERT_VALID(X) \ 47*e4b17023SJohn Marino _GLIBCXX_DEBUG_ONLY(X.assert_valid(__FILE__, __LINE__);) 48*e4b17023SJohn Marino 49*e4b17023SJohn Marino #define PB_DS_DEBUG_VERIFY(_Cond) \ 50*e4b17023SJohn Marino _GLIBCXX_DEBUG_VERIFY_AT(_Cond, \ 51*e4b17023SJohn Marino _M_message(#_Cond" assertion from %1;:%2;") \ 52*e4b17023SJohn Marino ._M_string(__FILE__)._M_integer(__LINE__) \ 53*e4b17023SJohn Marino ,__file,__line) 54*e4b17023SJohn Marino 55*e4b17023SJohn Marino #define PB_DS_CHECK_KEY_EXISTS(_Key) \ 56*e4b17023SJohn Marino _GLIBCXX_DEBUG_ONLY(debug_base::check_key_exists(_Key, __FILE__, __LINE__);) 57*e4b17023SJohn Marino 58*e4b17023SJohn Marino #define PB_DS_CHECK_KEY_DOES_NOT_EXIST(_Key) \ 59*e4b17023SJohn Marino _GLIBCXX_DEBUG_ONLY(debug_base::check_key_does_not_exist(_Key, \ 60*e4b17023SJohn Marino __FILE__, __LINE__);) 61*e4b17023SJohn Marino 62*e4b17023SJohn Marino #define PB_DS_DATA_TRUE_INDICATOR 63*e4b17023SJohn Marino #define PB_DS_V2F(X) (X).first 64*e4b17023SJohn Marino #define PB_DS_V2S(X) (X).second 65*e4b17023SJohn Marino #define PB_DS_EP2VP(X)& ((X)->m_value) 66*e4b17023SJohn Marino #include <ext/pb_ds/detail/list_update_map_/lu_map_.hpp> 67*e4b17023SJohn Marino #include <ext/pb_ds/detail/bin_search_tree_/bin_search_tree_.hpp> 68*e4b17023SJohn Marino #include <ext/pb_ds/detail/rb_tree_map_/rb_tree_.hpp> 69*e4b17023SJohn Marino #include <ext/pb_ds/detail/splay_tree_/splay_tree_.hpp> 70*e4b17023SJohn Marino #include <ext/pb_ds/detail/ov_tree_map_/ov_tree_map_.hpp> 71*e4b17023SJohn Marino #include <ext/pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp> 72*e4b17023SJohn Marino #include <ext/pb_ds/detail/gp_hash_table_map_/gp_ht_map_.hpp> 73*e4b17023SJohn Marino #include <ext/pb_ds/detail/pat_trie_/pat_trie_.hpp> 74*e4b17023SJohn Marino #undef PB_DS_DATA_TRUE_INDICATOR 75*e4b17023SJohn Marino #undef PB_DS_V2F 76*e4b17023SJohn Marino #undef PB_DS_V2S 77*e4b17023SJohn Marino #undef PB_DS_EP2VP 78*e4b17023SJohn Marino 79*e4b17023SJohn Marino #define PB_DS_DATA_FALSE_INDICATOR 80*e4b17023SJohn Marino #define PB_DS_V2F(X) (X) 81*e4b17023SJohn Marino #define PB_DS_V2S(X) Mapped_Data() 82*e4b17023SJohn Marino #define PB_DS_EP2VP(X)& ((X)->m_value.first) 83*e4b17023SJohn Marino #include <ext/pb_ds/detail/list_update_map_/lu_map_.hpp> 84*e4b17023SJohn Marino #include <ext/pb_ds/detail/bin_search_tree_/bin_search_tree_.hpp> 85*e4b17023SJohn Marino #include <ext/pb_ds/detail/rb_tree_map_/rb_tree_.hpp> 86*e4b17023SJohn Marino #include <ext/pb_ds/detail/splay_tree_/splay_tree_.hpp> 87*e4b17023SJohn Marino #include <ext/pb_ds/detail/ov_tree_map_/ov_tree_map_.hpp> 88*e4b17023SJohn Marino #include <ext/pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp> 89*e4b17023SJohn Marino #include <ext/pb_ds/detail/gp_hash_table_map_/gp_ht_map_.hpp> 90*e4b17023SJohn Marino #include <ext/pb_ds/detail/pat_trie_/pat_trie_.hpp> 91*e4b17023SJohn Marino #undef PB_DS_DATA_FALSE_INDICATOR 92*e4b17023SJohn Marino #undef PB_DS_V2F 93*e4b17023SJohn Marino #undef PB_DS_V2S 94*e4b17023SJohn Marino #undef PB_DS_EP2VP 95*e4b17023SJohn Marino 96*e4b17023SJohn Marino #undef PB_DS_CHECK_KEY_DOES_NOT_EXIST 97*e4b17023SJohn Marino #undef PB_DS_CHECK_KEY_EXISTS 98*e4b17023SJohn Marino #undef PB_DS_DEBUG_VERIFY 99*e4b17023SJohn Marino #undef PB_DS_ASSERT_VALID 100*e4b17023SJohn Marino 101*e4b17023SJohn Marino namespace __gnu_pbds 102*e4b17023SJohn Marino { 103*e4b17023SJohn Marino namespace detail 104*e4b17023SJohn Marino { 105*e4b17023SJohn Marino /// Specialization for list-update map. 106*e4b17023SJohn Marino template<typename Key, typename Mapped, typename _Alloc, typename Policy_Tl> 107*e4b17023SJohn Marino struct container_base_dispatch<Key, Mapped, _Alloc, list_update_tag, 108*e4b17023SJohn Marino Policy_Tl> 109*e4b17023SJohn Marino { 110*e4b17023SJohn Marino private: 111*e4b17023SJohn Marino typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0> at0; 112*e4b17023SJohn Marino typedef typename at0::type at0t; 113*e4b17023SJohn Marino typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1> at1; 114*e4b17023SJohn Marino typedef typename at1::type at1t; 115*e4b17023SJohn Marino 116*e4b17023SJohn Marino public: 117*e4b17023SJohn Marino /// Dispatched type. 118*e4b17023SJohn Marino typedef lu_map<Key, Mapped, at0t, _Alloc, at1t> type; 119*e4b17023SJohn Marino }; 120*e4b17023SJohn Marino 121*e4b17023SJohn Marino /// Specialization for list-update set. 122*e4b17023SJohn Marino template<typename Key, typename _Alloc, typename Policy_Tl> 123*e4b17023SJohn Marino struct container_base_dispatch<Key, null_type, _Alloc, list_update_tag, 124*e4b17023SJohn Marino Policy_Tl> 125*e4b17023SJohn Marino { 126*e4b17023SJohn Marino private: 127*e4b17023SJohn Marino typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0> at0; 128*e4b17023SJohn Marino typedef typename at0::type at0t; 129*e4b17023SJohn Marino typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1> at1; 130*e4b17023SJohn Marino typedef typename at1::type at1t; 131*e4b17023SJohn Marino 132*e4b17023SJohn Marino public: 133*e4b17023SJohn Marino /// Dispatched type. 134*e4b17023SJohn Marino typedef lu_set<Key, null_type, at0t, _Alloc, at1t> type; 135*e4b17023SJohn Marino }; 136*e4b17023SJohn Marino 137*e4b17023SJohn Marino /// Specialization for PATRICIA trie map. 138*e4b17023SJohn Marino template<typename Key, typename Mapped, typename _Alloc, typename Policy_Tl> 139*e4b17023SJohn Marino struct container_base_dispatch<Key, Mapped, _Alloc, pat_trie_tag, Policy_Tl> 140*e4b17023SJohn Marino { 141*e4b17023SJohn Marino private: 142*e4b17023SJohn Marino typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1> at1; 143*e4b17023SJohn Marino typedef typename at1::type at1t; 144*e4b17023SJohn Marino 145*e4b17023SJohn Marino public: 146*e4b17023SJohn Marino typedef pat_trie_map<Key, Mapped, at1t, _Alloc> type; 147*e4b17023SJohn Marino }; 148*e4b17023SJohn Marino 149*e4b17023SJohn Marino /// Specialization for PATRICIA trie set. 150*e4b17023SJohn Marino template<typename Key, typename _Alloc, typename Policy_Tl> 151*e4b17023SJohn Marino struct container_base_dispatch<Key, null_type, _Alloc, pat_trie_tag, 152*e4b17023SJohn Marino Policy_Tl> 153*e4b17023SJohn Marino { 154*e4b17023SJohn Marino private: 155*e4b17023SJohn Marino typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1> at1; 156*e4b17023SJohn Marino typedef typename at1::type at1t; 157*e4b17023SJohn Marino 158*e4b17023SJohn Marino public: 159*e4b17023SJohn Marino /// Dispatched type. 160*e4b17023SJohn Marino typedef pat_trie_set<Key, null_type, at1t, _Alloc> type; 161*e4b17023SJohn Marino }; 162*e4b17023SJohn Marino 163*e4b17023SJohn Marino /// Specialization for R-B tree map. 164*e4b17023SJohn Marino template<typename Key, typename Mapped, typename _Alloc, typename Policy_Tl> 165*e4b17023SJohn Marino struct container_base_dispatch<Key, Mapped, _Alloc, rb_tree_tag, Policy_Tl> 166*e4b17023SJohn Marino { 167*e4b17023SJohn Marino private: 168*e4b17023SJohn Marino typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0> at0; 169*e4b17023SJohn Marino typedef typename at0::type at0t; 170*e4b17023SJohn Marino typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1> at1; 171*e4b17023SJohn Marino typedef typename at1::type at1t; 172*e4b17023SJohn Marino 173*e4b17023SJohn Marino public: 174*e4b17023SJohn Marino /// Dispatched type. 175*e4b17023SJohn Marino typedef rb_tree_map<Key, Mapped, at0t, at1t, _Alloc> type; 176*e4b17023SJohn Marino }; 177*e4b17023SJohn Marino 178*e4b17023SJohn Marino /// Specialization for R-B tree set. 179*e4b17023SJohn Marino template<typename Key, typename _Alloc, typename Policy_Tl> 180*e4b17023SJohn Marino struct container_base_dispatch<Key, null_type, _Alloc, rb_tree_tag, 181*e4b17023SJohn Marino Policy_Tl> 182*e4b17023SJohn Marino { 183*e4b17023SJohn Marino private: 184*e4b17023SJohn Marino typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0> at0; 185*e4b17023SJohn Marino typedef typename at0::type at0t; 186*e4b17023SJohn Marino typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1> at1; 187*e4b17023SJohn Marino typedef typename at1::type at1t; 188*e4b17023SJohn Marino 189*e4b17023SJohn Marino public: 190*e4b17023SJohn Marino typedef rb_tree_set<Key, null_type, at0t, at1t, _Alloc> type; 191*e4b17023SJohn Marino }; 192*e4b17023SJohn Marino 193*e4b17023SJohn Marino /// Specialization splay tree map. 194*e4b17023SJohn Marino template<typename Key, typename Mapped, typename _Alloc, typename Policy_Tl> 195*e4b17023SJohn Marino struct container_base_dispatch<Key, Mapped, _Alloc, splay_tree_tag, 196*e4b17023SJohn Marino Policy_Tl> 197*e4b17023SJohn Marino { 198*e4b17023SJohn Marino private: 199*e4b17023SJohn Marino typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0> at0; 200*e4b17023SJohn Marino typedef typename at0::type at0t; 201*e4b17023SJohn Marino typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1> at1; 202*e4b17023SJohn Marino typedef typename at1::type at1t; 203*e4b17023SJohn Marino 204*e4b17023SJohn Marino public: 205*e4b17023SJohn Marino /// Dispatched type. 206*e4b17023SJohn Marino typedef splay_tree_map<Key, Mapped, at0t, at1t, _Alloc> type; 207*e4b17023SJohn Marino }; 208*e4b17023SJohn Marino 209*e4b17023SJohn Marino /// Specialization splay tree set. 210*e4b17023SJohn Marino template<typename Key, typename _Alloc, typename Policy_Tl> 211*e4b17023SJohn Marino struct container_base_dispatch<Key, null_type, _Alloc, splay_tree_tag, 212*e4b17023SJohn Marino Policy_Tl> 213*e4b17023SJohn Marino { 214*e4b17023SJohn Marino private: 215*e4b17023SJohn Marino typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0> at0; 216*e4b17023SJohn Marino typedef typename at0::type at0t; 217*e4b17023SJohn Marino typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1> at1; 218*e4b17023SJohn Marino typedef typename at1::type at1t; 219*e4b17023SJohn Marino 220*e4b17023SJohn Marino public: 221*e4b17023SJohn Marino /// Dispatched type. 222*e4b17023SJohn Marino typedef splay_tree_set<Key, null_type, at0t, at1t, _Alloc> type; 223*e4b17023SJohn Marino }; 224*e4b17023SJohn Marino 225*e4b17023SJohn Marino /// Specialization ordered-vector tree map. 226*e4b17023SJohn Marino template<typename Key, typename Mapped, typename _Alloc, typename Policy_Tl> 227*e4b17023SJohn Marino struct container_base_dispatch<Key, Mapped, _Alloc, ov_tree_tag, Policy_Tl> 228*e4b17023SJohn Marino { 229*e4b17023SJohn Marino private: 230*e4b17023SJohn Marino typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0> at0; 231*e4b17023SJohn Marino typedef typename at0::type at0t; 232*e4b17023SJohn Marino typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1> at1; 233*e4b17023SJohn Marino typedef typename at1::type at1t; 234*e4b17023SJohn Marino 235*e4b17023SJohn Marino public: 236*e4b17023SJohn Marino /// Dispatched type. 237*e4b17023SJohn Marino typedef ov_tree_map<Key, Mapped, at0t, at1t, _Alloc> type; 238*e4b17023SJohn Marino }; 239*e4b17023SJohn Marino 240*e4b17023SJohn Marino /// Specialization ordered-vector tree set. 241*e4b17023SJohn Marino template<typename Key, typename _Alloc, typename Policy_Tl> 242*e4b17023SJohn Marino struct container_base_dispatch<Key, null_type, _Alloc, ov_tree_tag, 243*e4b17023SJohn Marino Policy_Tl> 244*e4b17023SJohn Marino { 245*e4b17023SJohn Marino private: 246*e4b17023SJohn Marino typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0> at0; 247*e4b17023SJohn Marino typedef typename at0::type at0t; 248*e4b17023SJohn Marino typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1> at1; 249*e4b17023SJohn Marino typedef typename at1::type at1t; 250*e4b17023SJohn Marino 251*e4b17023SJohn Marino public: 252*e4b17023SJohn Marino /// Dispatched type. 253*e4b17023SJohn Marino typedef ov_tree_set<Key, null_type, at0t, at1t, _Alloc> type; 254*e4b17023SJohn Marino }; 255*e4b17023SJohn Marino 256*e4b17023SJohn Marino /// Specialization colision-chaining hash map. 257*e4b17023SJohn Marino template<typename Key, typename Mapped, typename _Alloc, typename Policy_Tl> 258*e4b17023SJohn Marino struct container_base_dispatch<Key, Mapped, _Alloc, cc_hash_tag, Policy_Tl> 259*e4b17023SJohn Marino { 260*e4b17023SJohn Marino private: 261*e4b17023SJohn Marino typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0> at0; 262*e4b17023SJohn Marino typedef typename at0::type at0t; 263*e4b17023SJohn Marino typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1> at1; 264*e4b17023SJohn Marino typedef typename at1::type at1t; 265*e4b17023SJohn Marino typedef __gnu_cxx::typelist::at_index<Policy_Tl, 2> at2; 266*e4b17023SJohn Marino typedef typename at2::type at2t; 267*e4b17023SJohn Marino typedef __gnu_cxx::typelist::at_index<Policy_Tl, 3> at3; 268*e4b17023SJohn Marino typedef typename at3::type at3t; 269*e4b17023SJohn Marino typedef __gnu_cxx::typelist::at_index<Policy_Tl, 4> at4; 270*e4b17023SJohn Marino typedef typename at4::type at4t; 271*e4b17023SJohn Marino 272*e4b17023SJohn Marino public: 273*e4b17023SJohn Marino /// Dispatched type. 274*e4b17023SJohn Marino typedef cc_ht_map<Key, Mapped, at0t, at1t, _Alloc, 275*e4b17023SJohn Marino at3t::value, at4t, at2t> type; 276*e4b17023SJohn Marino }; 277*e4b17023SJohn Marino 278*e4b17023SJohn Marino /// Specialization colision-chaining hash set. 279*e4b17023SJohn Marino template<typename Key, typename _Alloc, typename Policy_Tl> 280*e4b17023SJohn Marino struct container_base_dispatch<Key, null_type, _Alloc, cc_hash_tag, 281*e4b17023SJohn Marino Policy_Tl> 282*e4b17023SJohn Marino { 283*e4b17023SJohn Marino private: 284*e4b17023SJohn Marino typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0> at0; 285*e4b17023SJohn Marino typedef typename at0::type at0t; 286*e4b17023SJohn Marino typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1> at1; 287*e4b17023SJohn Marino typedef typename at1::type at1t; 288*e4b17023SJohn Marino typedef __gnu_cxx::typelist::at_index<Policy_Tl, 2> at2; 289*e4b17023SJohn Marino typedef typename at2::type at2t; 290*e4b17023SJohn Marino typedef __gnu_cxx::typelist::at_index<Policy_Tl, 3> at3; 291*e4b17023SJohn Marino typedef typename at3::type at3t; 292*e4b17023SJohn Marino typedef __gnu_cxx::typelist::at_index<Policy_Tl, 4> at4; 293*e4b17023SJohn Marino typedef typename at4::type at4t; 294*e4b17023SJohn Marino 295*e4b17023SJohn Marino public: 296*e4b17023SJohn Marino /// Dispatched type. 297*e4b17023SJohn Marino typedef cc_ht_set<Key, null_type, at0t, at1t, _Alloc, 298*e4b17023SJohn Marino at3t::value, at4t, at2t> type; 299*e4b17023SJohn Marino }; 300*e4b17023SJohn Marino 301*e4b17023SJohn Marino /// Specialization general-probe hash map. 302*e4b17023SJohn Marino template<typename Key, typename Mapped, typename _Alloc, typename Policy_Tl> 303*e4b17023SJohn Marino struct container_base_dispatch<Key, Mapped, _Alloc, gp_hash_tag, Policy_Tl> 304*e4b17023SJohn Marino { 305*e4b17023SJohn Marino private: 306*e4b17023SJohn Marino typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0> at0; 307*e4b17023SJohn Marino typedef typename at0::type at0t; 308*e4b17023SJohn Marino typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1> at1; 309*e4b17023SJohn Marino typedef typename at1::type at1t; 310*e4b17023SJohn Marino typedef __gnu_cxx::typelist::at_index<Policy_Tl, 2> at2; 311*e4b17023SJohn Marino typedef typename at2::type at2t; 312*e4b17023SJohn Marino typedef __gnu_cxx::typelist::at_index<Policy_Tl, 3> at3; 313*e4b17023SJohn Marino typedef typename at3::type at3t; 314*e4b17023SJohn Marino typedef __gnu_cxx::typelist::at_index<Policy_Tl, 4> at4; 315*e4b17023SJohn Marino typedef typename at4::type at4t; 316*e4b17023SJohn Marino typedef __gnu_cxx::typelist::at_index<Policy_Tl, 5> at5; 317*e4b17023SJohn Marino typedef typename at5::type at5t; 318*e4b17023SJohn Marino 319*e4b17023SJohn Marino public: 320*e4b17023SJohn Marino /// Dispatched type. 321*e4b17023SJohn Marino typedef gp_ht_map<Key, Mapped, at0t, at1t, _Alloc, 322*e4b17023SJohn Marino at3t::value, at4t, at5t, at2t> type; 323*e4b17023SJohn Marino }; 324*e4b17023SJohn Marino 325*e4b17023SJohn Marino /// Specialization general-probe hash set. 326*e4b17023SJohn Marino template<typename Key, typename _Alloc, typename Policy_Tl> 327*e4b17023SJohn Marino struct container_base_dispatch<Key, null_type, _Alloc, gp_hash_tag, 328*e4b17023SJohn Marino Policy_Tl> 329*e4b17023SJohn Marino { 330*e4b17023SJohn Marino private: 331*e4b17023SJohn Marino typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0> at0; 332*e4b17023SJohn Marino typedef typename at0::type at0t; 333*e4b17023SJohn Marino typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1> at1; 334*e4b17023SJohn Marino typedef typename at1::type at1t; 335*e4b17023SJohn Marino typedef __gnu_cxx::typelist::at_index<Policy_Tl, 2> at2; 336*e4b17023SJohn Marino typedef typename at2::type at2t; 337*e4b17023SJohn Marino typedef __gnu_cxx::typelist::at_index<Policy_Tl, 3> at3; 338*e4b17023SJohn Marino typedef typename at3::type at3t; 339*e4b17023SJohn Marino typedef __gnu_cxx::typelist::at_index<Policy_Tl, 4> at4; 340*e4b17023SJohn Marino typedef typename at4::type at4t; 341*e4b17023SJohn Marino typedef __gnu_cxx::typelist::at_index<Policy_Tl, 5> at5; 342*e4b17023SJohn Marino typedef typename at5::type at5t; 343*e4b17023SJohn Marino 344*e4b17023SJohn Marino public: 345*e4b17023SJohn Marino /// Dispatched type. 346*e4b17023SJohn Marino typedef gp_ht_set<Key, null_type, at0t, at1t, _Alloc, 347*e4b17023SJohn Marino at3t::value, at4t, at5t, at2t> type; 348*e4b17023SJohn Marino }; 349*e4b17023SJohn Marino } // namespace detail 350*e4b17023SJohn Marino } // namespace __gnu_pbds 351*e4b17023SJohn Marino 352*e4b17023SJohn Marino #endif 353