00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 #ifndef PB_DS_ASSOC_CNTNR_BASE_DS_DISPATCHER_HPP
00042 #define PB_DS_ASSOC_CNTNR_BASE_DS_DISPATCHER_HPP
00043
00044 #include <ext/typelist.h>
00045
00046 #define PB_DS_DATA_TRUE_INDICATOR
00047 #include <ext/pb_ds/detail/list_update_map_/lu_map_.hpp>
00048 #undef PB_DS_DATA_TRUE_INDICATOR
00049
00050 #define PB_DS_DATA_FALSE_INDICATOR
00051 #include <ext/pb_ds/detail/list_update_map_/lu_map_.hpp>
00052 #undef PB_DS_DATA_FALSE_INDICATOR
00053
00054 #define PB_DS_DATA_TRUE_INDICATOR
00055 #include <ext/pb_ds/detail/rb_tree_map_/rb_tree_.hpp>
00056 #undef PB_DS_DATA_TRUE_INDICATOR
00057
00058 #define PB_DS_DATA_FALSE_INDICATOR
00059 #include <ext/pb_ds/detail/rb_tree_map_/rb_tree_.hpp>
00060 #undef PB_DS_DATA_FALSE_INDICATOR
00061
00062 #define PB_DS_DATA_TRUE_INDICATOR
00063 #include <ext/pb_ds/detail/splay_tree_/splay_tree_.hpp>
00064 #undef PB_DS_DATA_TRUE_INDICATOR
00065
00066 #define PB_DS_DATA_FALSE_INDICATOR
00067 #include <ext/pb_ds/detail/splay_tree_/splay_tree_.hpp>
00068 #undef PB_DS_DATA_FALSE_INDICATOR
00069
00070 #define PB_DS_DATA_TRUE_INDICATOR
00071 #include <ext/pb_ds/detail/ov_tree_map_/ov_tree_map_.hpp>
00072 #undef PB_DS_DATA_TRUE_INDICATOR
00073
00074 #define PB_DS_DATA_FALSE_INDICATOR
00075 #include <ext/pb_ds/detail/ov_tree_map_/ov_tree_map_.hpp>
00076 #undef PB_DS_DATA_FALSE_INDICATOR
00077
00078 #define PB_DS_DATA_TRUE_INDICATOR
00079 #include <ext/pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp>
00080 #undef PB_DS_DATA_TRUE_INDICATOR
00081
00082 #define PB_DS_DATA_FALSE_INDICATOR
00083 #include <ext/pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp>
00084 #undef PB_DS_DATA_FALSE_INDICATOR
00085
00086 #define PB_DS_DATA_TRUE_INDICATOR
00087 #include <ext/pb_ds/detail/gp_hash_table_map_/gp_ht_map_.hpp>
00088 #undef PB_DS_DATA_TRUE_INDICATOR
00089
00090 #define PB_DS_DATA_FALSE_INDICATOR
00091 #include <ext/pb_ds/detail/gp_hash_table_map_/gp_ht_map_.hpp>
00092 #undef PB_DS_DATA_FALSE_INDICATOR
00093
00094 #define PB_DS_DATA_TRUE_INDICATOR
00095 #include <ext/pb_ds/detail/pat_trie_/pat_trie_.hpp>
00096 #undef PB_DS_DATA_TRUE_INDICATOR
00097
00098 #define PB_DS_DATA_FALSE_INDICATOR
00099 #include <ext/pb_ds/detail/pat_trie_/pat_trie_.hpp>
00100 #undef PB_DS_DATA_FALSE_INDICATOR
00101
00102 namespace __gnu_pbds
00103 {
00104 namespace detail
00105 {
00106
00107 template<typename Key, typename Mapped, typename Data_Structure_Taq,
00108 typename Policy_Tl, typename Alloc>
00109 struct container_base_dispatch;
00110
00111 template<typename Key, typename Mapped, typename Policy_Tl, typename Alloc>
00112 struct container_base_dispatch<Key, Mapped, list_update_tag,
00113 Policy_Tl, Alloc>
00114 {
00115 private:
00116 typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0> at0;
00117 typedef typename at0::type at0t;
00118 typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1> at1;
00119 typedef typename at1::type at1t;
00120
00121 public:
00122 typedef lu_map_data_<Key, Mapped, at0t, Alloc, at1t> type;
00123 };
00124
00125 template<typename Key, typename Policy_Tl, typename Alloc>
00126 struct container_base_dispatch<Key, null_mapped_type, list_update_tag,
00127 Policy_Tl, Alloc>
00128 {
00129 private:
00130 typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0> at0;
00131 typedef typename at0::type at0t;
00132 typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1> at1;
00133 typedef typename at1::type at1t;
00134
00135 public:
00136 typedef lu_map_no_data_<Key, null_mapped_type, at0t, Alloc, at1t> type;
00137 };
00138
00139 template<typename Key, typename Mapped, typename Policy_Tl, typename Alloc>
00140 struct container_base_dispatch<Key, Mapped, pat_trie_tag, Policy_Tl, Alloc>
00141 {
00142 private:
00143 typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1> at1;
00144 typedef typename at1::type at1t;
00145
00146 public:
00147 typedef pat_trie_data_<Key, Mapped, at1t, Alloc> type;
00148 };
00149
00150 template<typename Key, typename Policy_Tl, typename Alloc>
00151 struct container_base_dispatch<Key, null_mapped_type, pat_trie_tag,
00152 Policy_Tl, Alloc>
00153 {
00154 private:
00155 typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1> at1;
00156 typedef typename at1::type at1t;
00157
00158 public:
00159 typedef pat_trie_no_data_<Key, null_mapped_type, at1t, Alloc> type;
00160 };
00161
00162 template<typename Key, typename Mapped, typename Policy_Tl, typename Alloc>
00163 struct container_base_dispatch<Key, Mapped, rb_tree_tag, Policy_Tl, Alloc>
00164 {
00165 private:
00166 typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0> at0;
00167 typedef typename at0::type at0t;
00168 typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1> at1;
00169 typedef typename at1::type at1t;
00170
00171 public:
00172 typedef rb_tree_data_<Key, Mapped, at0t, at1t, Alloc> type;
00173 };
00174
00175 template<typename Key, typename Policy_Tl, typename Alloc>
00176 struct container_base_dispatch<Key, null_mapped_type, rb_tree_tag,
00177 Policy_Tl, Alloc>
00178 {
00179 private:
00180 typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0> at0;
00181 typedef typename at0::type at0t;
00182 typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1> at1;
00183 typedef typename at1::type at1t;
00184
00185 public:
00186 typedef rb_tree_no_data_<Key, null_mapped_type, at0t, at1t, Alloc> type;
00187 };
00188
00189 template<typename Key, typename Mapped, typename Policy_Tl, typename Alloc>
00190 struct container_base_dispatch<Key, Mapped, splay_tree_tag,
00191 Policy_Tl, Alloc>
00192 {
00193 private:
00194 typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0> at0;
00195 typedef typename at0::type at0t;
00196 typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1> at1;
00197 typedef typename at1::type at1t;
00198
00199 public:
00200 typedef splay_tree_data_<Key, Mapped, at0t, at1t, Alloc> type;
00201 };
00202
00203 template<typename Key, typename Policy_Tl, typename Alloc>
00204 struct container_base_dispatch<Key, null_mapped_type, splay_tree_tag,
00205 Policy_Tl, Alloc>
00206 {
00207 private:
00208 typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0> at0;
00209 typedef typename at0::type at0t;
00210 typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1> at1;
00211 typedef typename at1::type at1t;
00212
00213 public:
00214 typedef splay_tree_no_data_<Key, null_mapped_type, at0t, at1t, Alloc> type;
00215 };
00216
00217 template<typename Key, typename Mapped, typename Policy_Tl, typename Alloc>
00218 struct container_base_dispatch<Key, Mapped, ov_tree_tag, Policy_Tl, Alloc>
00219 {
00220 private:
00221 typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0> at0;
00222 typedef typename at0::type at0t;
00223 typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1> at1;
00224 typedef typename at1::type at1t;
00225
00226 public:
00227 typedef ov_tree_data_<Key, Mapped, at0t, at1t, Alloc> type;
00228 };
00229
00230 template<typename Key, typename Policy_Tl, typename Alloc>
00231 struct container_base_dispatch<Key, null_mapped_type, ov_tree_tag,
00232 Policy_Tl, Alloc>
00233 {
00234 private:
00235 typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0> at0;
00236 typedef typename at0::type at0t;
00237 typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1> at1;
00238 typedef typename at1::type at1t;
00239
00240 public:
00241 typedef ov_tree_no_data_<Key, null_mapped_type, at0t, at1t, Alloc> type;
00242 };
00243
00244 template<typename Key, typename Mapped, typename Policy_Tl, typename Alloc>
00245 struct container_base_dispatch<Key, Mapped, cc_hash_tag, Policy_Tl, Alloc>
00246 {
00247 private:
00248 typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0> at0;
00249 typedef typename at0::type at0t;
00250 typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1> at1;
00251 typedef typename at1::type at1t;
00252 typedef __gnu_cxx::typelist::at_index<Policy_Tl, 2> at2;
00253 typedef typename at2::type at2t;
00254 typedef __gnu_cxx::typelist::at_index<Policy_Tl, 3> at3;
00255 typedef typename at3::type at3t;
00256 typedef __gnu_cxx::typelist::at_index<Policy_Tl, 4> at4;
00257 typedef typename at4::type at4t;
00258
00259 public:
00260 typedef cc_ht_map_data_<Key, Mapped, at0t, at1t, Alloc, at3t::value,
00261 at4t, at2t> type;
00262 };
00263
00264 template<typename Key, typename Policy_Tl, typename Alloc>
00265 struct container_base_dispatch<Key, null_mapped_type, cc_hash_tag,
00266 Policy_Tl, Alloc>
00267 {
00268 private:
00269 typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0> at0;
00270 typedef typename at0::type at0t;
00271 typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1> at1;
00272 typedef typename at1::type at1t;
00273 typedef __gnu_cxx::typelist::at_index<Policy_Tl, 2> at2;
00274 typedef typename at2::type at2t;
00275 typedef __gnu_cxx::typelist::at_index<Policy_Tl, 3> at3;
00276 typedef typename at3::type at3t;
00277 typedef __gnu_cxx::typelist::at_index<Policy_Tl, 4> at4;
00278 typedef typename at4::type at4t;
00279
00280 public:
00281 typedef cc_ht_map_no_data_<Key, null_mapped_type, at0t, at1t, Alloc,
00282 at3t::value, at4t, at2t> type;
00283 };
00284
00285 template<typename Key, typename Mapped, typename Policy_Tl, typename Alloc>
00286 struct container_base_dispatch<Key, Mapped, gp_hash_tag, Policy_Tl, Alloc>
00287 {
00288 private:
00289 typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0> at0;
00290 typedef typename at0::type at0t;
00291 typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1> at1;
00292 typedef typename at1::type at1t;
00293 typedef __gnu_cxx::typelist::at_index<Policy_Tl, 2> at2;
00294 typedef typename at2::type at2t;
00295 typedef __gnu_cxx::typelist::at_index<Policy_Tl, 3> at3;
00296 typedef typename at3::type at3t;
00297 typedef __gnu_cxx::typelist::at_index<Policy_Tl, 4> at4;
00298 typedef typename at4::type at4t;
00299 typedef __gnu_cxx::typelist::at_index<Policy_Tl, 5> at5;
00300 typedef typename at5::type at5t;
00301
00302 public:
00303 typedef gp_ht_map_data_<Key, Mapped, at0t, at1t, Alloc, at3t::value,
00304 at4t, at5t, at2t> type;
00305 };
00306
00307 template<typename Key, typename Policy_Tl, typename Alloc>
00308 struct container_base_dispatch<Key, null_mapped_type, gp_hash_tag,
00309 Policy_Tl, Alloc>
00310 {
00311 private:
00312 typedef __gnu_cxx::typelist::at_index<Policy_Tl, 0> at0;
00313 typedef typename at0::type at0t;
00314 typedef __gnu_cxx::typelist::at_index<Policy_Tl, 1> at1;
00315 typedef typename at1::type at1t;
00316 typedef __gnu_cxx::typelist::at_index<Policy_Tl, 2> at2;
00317 typedef typename at2::type at2t;
00318 typedef __gnu_cxx::typelist::at_index<Policy_Tl, 3> at3;
00319 typedef typename at3::type at3t;
00320 typedef __gnu_cxx::typelist::at_index<Policy_Tl, 4> at4;
00321 typedef typename at4::type at4t;
00322 typedef __gnu_cxx::typelist::at_index<Policy_Tl, 5> at5;
00323 typedef typename at5::type at5t;
00324
00325 public:
00326 typedef gp_ht_map_no_data_<Key, null_mapped_type, at0t, at1t, Alloc,
00327 at3t::value, at4t, at5t, at2t> type;
00328 };
00329 }
00330 }
00331
00332 #endif