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
00045 #ifndef ASSOC_CNTNR_HPP
00046 #define ASSOC_CNTNR_HPP
00047
00048 #include <ext/pb_assoc/ms_trait.hpp>
00049 #include <ext/pb_assoc/ds_trait.hpp>
00050 #include <ext/pb_assoc/detail/type_utils.hpp>
00051 #include <ext/pb_assoc/detail/typelist.hpp>
00052 #include <ext/pb_assoc/detail/standard_policies.hpp>
00053 #include <ext/pb_assoc/detail/mapping_level_imp.hpp>
00054 #include <ext/pb_assoc/detail/assoc_cntnr_base.hpp>
00055 #include <ext/pb_assoc/detail/value_type_adapter/value_type_adapter.hpp>
00056
00057 namespace pb_assoc
00058 {
00059
00060 #define PB_ASSOC_CLASS_T_DEC \
00061 template< \
00062 typename Key, \
00063 typename Data, \
00064 class DS_Tag, \
00065 class Policy_Tl, \
00066 class Allocator>
00067
00068 #define PB_ASSOC_CLASS_C_DEC \
00069 basic_assoc_cntnr< \
00070 Key, \
00071 Data, \
00072 DS_Tag, \
00073 Policy_Tl, \
00074 Allocator>
00075
00076 #define PB_ASSOC_BASE_C_DEC \
00077 detail::assoc_cntnr_base< \
00078 Key, \
00079 Data, \
00080 DS_Tag, \
00081 Policy_Tl, \
00082 Allocator>::type
00083
00084 #define PB_ASSOC_DIRECT_BASE_C_DEC \
00085 detail::assoc_cntnr_base< \
00086 Key, \
00087 Data, \
00088 DS_Tag, \
00089 Policy_Tl, \
00090 Allocator>::type
00091
00092 template<typename Key,
00093 typename Data,
00094 class DS_Tag,
00095 class Policy_Tl,
00096 class Allocator>
00097 class basic_assoc_cntnr
00098 : public detail::assoc_cntnr_base<Key, Data, DS_Tag, Policy_Tl, Allocator>::type
00099 {
00100 public:
00101 typedef typename Allocator::size_type size_type;
00102 typedef typename Allocator::difference_type difference_type;
00103 typedef DS_Tag ds_category;
00104 typedef data_enabled_ms_tag ms_category;
00105 typedef Allocator allocator;
00106
00107 typedef
00108 typename allocator::template rebind<
00109 Key>::other::value_type
00110 key_type;
00111
00112 typedef
00113 typename allocator::template rebind<
00114 Key>::other::reference
00115 key_reference;
00116
00117 typedef
00118 typename allocator::template rebind<
00119 Key>::other::const_reference
00120 const_key_reference;
00121
00122 typedef
00123 typename allocator::template rebind<
00124 Key>::other::pointer
00125 key_pointer;
00126
00127 typedef
00128 typename allocator::template rebind<
00129 Key>::other::const_pointer
00130 const_key_pointer;
00131
00132 typedef
00133 typename allocator::template rebind<
00134 Data>::other::value_type
00135 data_type;
00136
00137 typedef
00138 typename allocator::template rebind<
00139 Data>::other::reference
00140 data_reference;
00141
00142 typedef
00143 typename allocator::template rebind<
00144 Data>::other::const_reference
00145 const_data_reference;
00146
00147 typedef
00148 typename allocator::template rebind<
00149 Data>::other::pointer
00150 data_pointer;
00151
00152 typedef
00153 typename allocator::template rebind<
00154 Data>::other::const_pointer
00155 const_data_pointer;
00156
00157 typedef
00158 typename allocator::template rebind<
00159 std::pair<const key_type, data_type> >::other::value_type
00160 value_type;
00161
00162 typedef
00163 typename allocator::template rebind<
00164 std::pair<const key_type, data_type> >::other::reference
00165 reference;
00166
00167 typedef
00168 typename allocator::template rebind<
00169 std::pair<const key_type, data_type> >::other::const_reference
00170 const_reference;
00171
00172 typedef
00173 typename allocator::template rebind<
00174 std::pair<const key_type, data_type> >::other::pointer
00175 pointer;
00176
00177 typedef
00178 typename allocator::template rebind<
00179 std::pair<const key_type, data_type> >::other::const_pointer
00180 const_pointer;
00181
00182 typedef
00183 typename PB_ASSOC_BASE_C_DEC::const_find_iterator
00184 const_find_iterator;
00185
00186 typedef typename PB_ASSOC_BASE_C_DEC::find_iterator find_iterator;
00187
00188 typedef typename PB_ASSOC_BASE_C_DEC::const_iterator const_iterator;
00189
00190 typedef typename PB_ASSOC_BASE_C_DEC::iterator iterator;
00191
00192 public:
00193
00194 virtual
00195 ~basic_assoc_cntnr();
00196
00197 inline size_type
00198 size() const;
00199
00200 inline size_type
00201 max_size() const;
00202
00203 inline bool
00204 empty() const;
00205
00206 inline static const_key_reference
00207 extract_key(const_reference r_val);
00208
00209 inline std::pair<find_iterator, bool>
00210 insert(const_reference r_val);
00211
00212 inline data_reference
00213 operator[](const_key_reference r_key);
00214
00215 inline find_iterator
00216 find(const_key_reference r_key)
00217 {
00218 return (my_base::find(r_key));
00219 }
00220
00221 inline const_find_iterator
00222 find(const_key_reference r_key) const
00223 {
00224 return (my_base::find(r_key));
00225 }
00226
00227 inline const_data_reference
00228 operator[](const_key_reference r_key) const;
00229
00230 inline size_type
00231 erase(const_key_reference r_key);
00232
00233 template<class Pred>
00234 inline size_type
00235 erase_if(Pred prd);
00236
00237 void
00238 clear();
00239
00240 inline iterator
00241 begin();
00242
00243 inline const_iterator
00244 begin() const;
00245
00246 inline iterator
00247 end();
00248
00249 inline const_iterator
00250 end() const;
00251
00252 protected:
00253
00254 #define PB_ASSOC_CLASS_NAME basic_assoc_cntnr
00255
00256 #define PB_ASSOC_DIRECT_BASE_CAST_C_DEC \
00257 typename PB_ASSOC_DIRECT_BASE_C_DEC
00258
00259 #include <ext/pb_assoc/detail/constructors_destructor_fn_imps.hpp>
00260
00261 #undef PB_ASSOC_DIRECT_BASE_CAST_C_DEC
00262
00263 #undef PB_ASSOC_CLASS_NAME
00264
00265 private:
00266 typedef typename PB_ASSOC_BASE_C_DEC my_base;
00267
00268 private:
00269 basic_assoc_cntnr&
00270 operator=(const PB_ASSOC_CLASS_C_DEC& r_other);
00271 };
00272
00273 #include <ext/pb_assoc/detail/basic_assoc_cntnr/constructors_destructor_fn_imps.hpp>
00274 #include <ext/pb_assoc/detail/basic_assoc_cntnr/iterators_fn_imps.hpp>
00275 #include <ext/pb_assoc/detail/basic_assoc_cntnr/info_fn_imps.hpp>
00276 #include <ext/pb_assoc/detail/basic_assoc_cntnr/erase_fn_imps.hpp>
00277 #include <ext/pb_assoc/detail/basic_assoc_cntnr/insert_fn_imps.hpp>
00278 #include <ext/pb_assoc/detail/basic_assoc_cntnr/d_insert_fn_imps.hpp>
00279 #include <ext/pb_assoc/detail/basic_assoc_cntnr/d_find_fn_imps.hpp>
00280 #include <ext/pb_assoc/detail/basic_assoc_cntnr/d_extract_key.hpp>
00281
00282 #undef PB_ASSOC_CLASS_T_DEC
00283
00284 #undef PB_ASSOC_CLASS_C_DEC
00285
00286 #undef PB_ASSOC_BASE_C_DEC
00287
00288 #undef PB_ASSOC_DIRECT_BASE_C_DEC
00289
00290 #define PB_ASSOC_CLASS_T_DEC \
00291 template< \
00292 typename Key, \
00293 class Cntnr, \
00294 class DS_Tag, \
00295 class Policy_Tl, \
00296 class Allocator>
00297
00298 #define PB_ASSOC_CLASS_C_DEC \
00299 basic_assoc_cntnr< \
00300 Key, \
00301 compound_data_type< \
00302 Cntnr>, \
00303 DS_Tag, \
00304 Policy_Tl, \
00305 Allocator>
00306
00307 #define PB_ASSOC_DIRECT_BASE_C_DEC \
00308 detail::value_type_adapter< \
00309 Key, \
00310 compound_data_type< \
00311 Cntnr>, \
00312 DS_Tag, \
00313 Policy_Tl, \
00314 Allocator, \
00315 detail::mapping_level_imp< \
00316 compound_data_type< \
00317 Cntnr> >::value - 1>
00318
00319 #define PB_ASSOC_BASE_C_DEC \
00320 detail::assoc_cntnr_base< \
00321 Key, \
00322 compound_data_type< \
00323 Cntnr>, \
00324 DS_Tag, \
00325 Policy_Tl, \
00326 Allocator>::type
00327
00328 template<typename Key,
00329 class Cntnr,
00330 class DS_Tag,
00331 class Policy_Tl,
00332 class Allocator>
00333 class basic_assoc_cntnr<Key, compound_data_type< Cntnr>, DS_Tag, Policy_Tl, Allocator> : public PB_ASSOC_DIRECT_BASE_C_DEC
00334 {
00335 public:
00336 typedef typename Allocator::size_type size_type;
00337 typedef typename Allocator::difference_type difference_type;
00338 typedef DS_Tag ds_category;
00339 typedef compound_data_enabled_ms_tag ms_category;
00340 typedef Allocator allocator;
00341
00342 typedef
00343 typename allocator::template rebind<
00344 Key>::other::value_type
00345 key_type;
00346
00347 typedef
00348 typename allocator::template rebind<
00349 Key>::other::reference
00350 key_reference;
00351
00352 typedef
00353 typename allocator::template rebind<
00354 Key>::other::const_reference
00355 const_key_reference;
00356
00357 typedef
00358 typename allocator::template rebind<
00359 Key>::other::pointer
00360 key_pointer;
00361
00362 typedef
00363 typename allocator::template rebind<
00364 Key>::other::const_pointer
00365 const_key_pointer;
00366
00367 typedef
00368 typename allocator::template rebind<
00369 Cntnr>::other::value_type
00370 data_type;
00371
00372 typedef
00373 typename allocator::template rebind<
00374 Cntnr>::other::reference
00375 data_reference;
00376
00377 typedef
00378 typename allocator::template rebind<
00379 Cntnr>::other::const_reference
00380 const_data_reference;
00381
00382 typedef
00383 typename allocator::template rebind<
00384 Cntnr>::other::pointer
00385 data_pointer;
00386
00387 typedef
00388 typename allocator::template rebind<
00389 Cntnr>::other::const_pointer
00390 const_data_pointer;
00391
00392 typedef
00393 typename allocator::template rebind<
00394 std::pair<const key_type, Cntnr> >::other::value_type
00395 value_type;
00396
00397 typedef
00398 typename allocator::template rebind<
00399 std::pair<const key_type, Cntnr> >::other::reference
00400 reference;
00401
00402 typedef
00403 typename allocator::template rebind<
00404 std::pair<const key_type, Cntnr> >::other::const_reference
00405 const_reference;
00406
00407 typedef
00408 typename allocator::template rebind<
00409 std::pair<const key_type, Cntnr> >::other::pointer
00410 pointer;
00411
00412 typedef
00413 typename allocator::template rebind<
00414 std::pair<const key_type, Cntnr> >::other::const_pointer
00415 const_pointer;
00416
00417 typedef
00418 typename PB_ASSOC_BASE_C_DEC::const_find_iterator
00419 const_find_iterator;
00420
00421 typedef typename PB_ASSOC_BASE_C_DEC::find_iterator find_iterator;
00422
00423 typedef typename PB_ASSOC_BASE_C_DEC::const_iterator const_iterator;
00424
00425 typedef typename PB_ASSOC_BASE_C_DEC::iterator iterator;
00426
00427 template<int Mapping_Level>
00428 struct rebind
00429 {
00430 private:
00431 enum
00432 {
00433 mapping_level =
00434 detail::mapping_level_imp<compound_data_type<Cntnr> >::value
00435 };
00436
00437 public:
00438 typedef
00439 detail::value_type_adapter<
00440 Key,
00441 compound_data_type<
00442 Cntnr>,
00443 DS_Tag,
00444 Policy_Tl,
00445 Allocator,
00446 mapping_level - Mapping_Level>
00447 other;
00448 };
00449
00450 public:
00451
00452 virtual
00453 ~basic_assoc_cntnr();
00454
00455 inline size_type
00456 size() const;
00457
00458 inline size_type
00459 max_size() const;
00460
00461 inline bool
00462 empty() const;
00463
00464 inline static const_key_reference
00465 extract_key(const_reference r_val);
00466
00467 inline std::pair<find_iterator, bool>
00468 insert(const_reference r_val);
00469
00470 inline data_reference
00471 operator[](const_key_reference r_key);
00472
00473 inline find_iterator
00474 find(const_key_reference r_key)
00475 {
00476 return (my_base::find(r_key));
00477 }
00478
00479 inline const_find_iterator
00480 find(const_key_reference r_key) const
00481 {
00482 return (my_base::find(r_key));
00483 }
00484
00485 inline const_data_reference
00486 operator[](const_key_reference r_key) const;
00487
00488 inline size_type
00489 erase(const_key_reference r_key);
00490
00491 template<class Pred>
00492 inline size_type
00493 erase_if(Pred prd);
00494
00495 void
00496 clear();
00497
00498 inline iterator
00499 begin();
00500
00501 inline const_iterator
00502 begin() const;
00503
00504 inline iterator
00505 end();
00506
00507 inline const_iterator
00508 end() const;
00509
00510 protected:
00511
00512 #define PB_ASSOC_CLASS_NAME basic_assoc_cntnr
00513
00514 #define PB_ASSOC_DIRECT_BASE_CAST_C_DEC \
00515 typename PB_ASSOC_DIRECT_BASE_C_DEC
00516
00517 #include <ext/pb_assoc/detail/constructors_destructor_fn_imps.hpp>
00518
00519 #undef PB_ASSOC_DIRECT_BASE_CAST_C_DEC
00520
00521 #undef PB_ASSOC_CLASS_NAME
00522
00523 private:
00524 typedef typename PB_ASSOC_BASE_C_DEC my_base;
00525
00526 private:
00527 basic_assoc_cntnr&
00528 operator=(const PB_ASSOC_CLASS_C_DEC& r_other);
00529 };
00530
00531 #include <ext/pb_assoc/detail/basic_assoc_cntnr/constructors_destructor_fn_imps.hpp>
00532 #include <ext/pb_assoc/detail/basic_assoc_cntnr/iterators_fn_imps.hpp>
00533 #include <ext/pb_assoc/detail/basic_assoc_cntnr/info_fn_imps.hpp>
00534 #include <ext/pb_assoc/detail/basic_assoc_cntnr/erase_fn_imps.hpp>
00535 #include <ext/pb_assoc/detail/basic_assoc_cntnr/insert_fn_imps.hpp>
00536 #include <ext/pb_assoc/detail/basic_assoc_cntnr/d_insert_fn_imps.hpp>
00537 #include <ext/pb_assoc/detail/basic_assoc_cntnr/d_find_fn_imps.hpp>
00538 #include <ext/pb_assoc/detail/basic_assoc_cntnr/d_extract_key.hpp>
00539
00540 #undef PB_ASSOC_CLASS_T_DEC
00541
00542 #undef PB_ASSOC_CLASS_C_DEC
00543
00544 #undef PB_ASSOC_BASE_C_DEC
00545
00546 #undef PB_ASSOC_DIRECT_BASE_C_DEC
00547
00548 #define PB_ASSOC_CLASS_T_DEC \
00549 template<typename Key, class DS_Tag, class Policy_Tl, class Allocator>
00550
00551 #define PB_ASSOC_CLASS_C_DEC \
00552 basic_assoc_cntnr< \
00553 Key, \
00554 null_data_type, \
00555 DS_Tag, \
00556 Policy_Tl, \
00557 Allocator>
00558
00559 #define PB_ASSOC_BASE_C_DEC \
00560 detail::assoc_cntnr_base< \
00561 Key, \
00562 null_data_type, \
00563 DS_Tag, \
00564 Policy_Tl, \
00565 Allocator>::type
00566
00567 template<typename Key, class DS_Tag, class Policy_Tl, class Allocator>
00568 class basic_assoc_cntnr<Key, null_data_type, DS_Tag, Policy_Tl, Allocator> : public PB_ASSOC_BASE_C_DEC
00569 {
00570 public:
00571 typedef typename Allocator::size_type size_type;
00572 typedef typename Allocator::difference_type difference_type;
00573 typedef DS_Tag ds_category;
00574 typedef basic_ms_tag ms_category;
00575 typedef Allocator allocator;
00576
00577 typedef
00578 typename allocator::template rebind<
00579 Key>::other::value_type
00580 key_type;
00581
00582 typedef
00583 typename allocator::template rebind<
00584 Key>::other::reference
00585 key_reference;
00586
00587 typedef
00588 typename allocator::template rebind<
00589 Key>::other::const_reference
00590 const_key_reference;
00591
00592 typedef
00593 typename allocator::template rebind<
00594 Key>::other::pointer
00595 key_pointer;
00596
00597 typedef
00598 typename allocator::template rebind<
00599 Key>::other::const_pointer
00600 const_key_pointer;
00601
00602 typedef
00603 typename allocator::template rebind<
00604 key_type>::other::value_type
00605 value_type;
00606
00607 typedef
00608 typename allocator::template rebind<
00609 key_type>::other::const_reference
00610 reference;
00611
00612 typedef
00613 typename allocator::template rebind<
00614 key_type>::other::const_reference
00615 const_reference;
00616
00617 typedef
00618 typename allocator::template rebind<
00619 key_type>::other::const_pointer
00620 pointer;
00621
00622 typedef
00623 typename allocator::template rebind<key_type>::other::const_pointer
00624 const_pointer;
00625
00626 typedef
00627 typename PB_ASSOC_BASE_C_DEC::const_find_iterator
00628 const_find_iterator;
00629
00630 typedef typename PB_ASSOC_BASE_C_DEC::find_iterator find_iterator;
00631
00632 typedef typename PB_ASSOC_BASE_C_DEC::const_iterator const_iterator;
00633
00634 typedef typename PB_ASSOC_BASE_C_DEC::iterator iterator;
00635
00636 public:
00637
00638 virtual
00639 ~basic_assoc_cntnr();
00640
00641 inline size_type
00642 size() const;
00643
00644 inline size_type
00645 max_size() const;
00646
00647 inline bool
00648 empty() const;
00649
00650 inline static const_key_reference
00651 extract_key(const_reference r_val);
00652
00653 inline std::pair<find_iterator, bool>
00654 insert(const_reference r_val);
00655
00656 inline find_iterator
00657 find(const_key_reference r_key)
00658 { return (my_base::find(r_key)); }
00659
00660 inline const_find_iterator
00661 find(const_key_reference r_key) const
00662 { return (my_base::find(r_key)); }
00663
00664 inline size_type
00665 erase(const_key_reference r_key);
00666
00667 template<class Pred>
00668 inline size_type
00669 erase_if(Pred prd);
00670
00671 void
00672 clear();
00673
00674 inline iterator
00675 begin();
00676
00677 inline const_iterator
00678 begin() const;
00679
00680 inline iterator
00681 end();
00682
00683 inline const_iterator
00684 end() const;
00685
00686 protected:
00687
00688 #define PB_ASSOC_CLASS_NAME basic_assoc_cntnr
00689
00690 #define PB_ASSOC_DIRECT_BASE_C_DEC PB_ASSOC_BASE_C_DEC
00691
00692 #define PB_ASSOC_DIRECT_BASE_CAST_C_DEC \
00693 typename PB_ASSOC_DIRECT_BASE_C_DEC
00694
00695 #include <ext/pb_assoc/detail/constructors_destructor_fn_imps.hpp>
00696
00697 #undef PB_ASSOC_DIRECT_BASE_CAST_C_DEC
00698
00699 #undef PB_ASSOC_DIRECT_BASE_C_DEC
00700
00701 #undef PB_ASSOC_CLASS_NAME
00702
00703 private:
00704 typedef typename PB_ASSOC_BASE_C_DEC my_base;
00705
00706 private:
00707 basic_assoc_cntnr&
00708 operator=(const PB_ASSOC_CLASS_C_DEC& r_other);
00709 };
00710
00711 #include <ext/pb_assoc/detail/basic_assoc_cntnr/constructors_destructor_fn_imps.hpp>
00712 #include <ext/pb_assoc/detail/basic_assoc_cntnr/iterators_fn_imps.hpp>
00713 #include <ext/pb_assoc/detail/basic_assoc_cntnr/info_fn_imps.hpp>
00714 #include <ext/pb_assoc/detail/basic_assoc_cntnr/erase_fn_imps.hpp>
00715 #include <ext/pb_assoc/detail/basic_assoc_cntnr/insert_fn_imps.hpp>
00716 #include <ext/pb_assoc/detail/basic_assoc_cntnr/extract_key.hpp>
00717
00718 #undef PB_ASSOC_CLASS_T_DEC
00719
00720 #undef PB_ASSOC_CLASS_C_DEC
00721
00722 #undef PB_ASSOC_BASE_C_DEC
00723
00724 #define PB_ASSOC_TYPELIST_CHAIN1(X0) pb_assoc::detail::typelist_chain<X0, pb_assoc::detail::null_type>
00725 #define PB_ASSOC_TYPELIST_CHAIN2(X0, X1) pb_assoc::detail::typelist_chain<X0, PB_ASSOC_TYPELIST_CHAIN1(X1) >
00726 #define PB_ASSOC_TYPELIST_CHAIN3(X0, X1, X2) pb_assoc::detail::typelist_chain<X0, PB_ASSOC_TYPELIST_CHAIN2(X1, X2) >
00727 #define PB_ASSOC_TYPELIST_CHAIN4(X0, X1, X2, X3) pb_assoc::detail::typelist_chain<X0, PB_ASSOC_TYPELIST_CHAIN3(X1, X2, X3) >
00728 #define PB_ASSOC_TYPELIST_CHAIN5(X0, X1, X2, X3, X4) pb_assoc::detail::typelist_chain<X0, PB_ASSOC_TYPELIST_CHAIN4(X1, X2, X3, X4) >
00729 #define PB_ASSOC_TYPELIST_CHAIN6(X0, X1, X2, X3, X4, X5) pb_assoc::detail::typelist_chain<X0, PB_ASSOC_TYPELIST_CHAIN5(X1, X2, X3, X4, X5) >
00730 #define PB_ASSOC_TYPELIST_CHAIN7(X0, X1, X2, X3, X4, X5, X6) pb_assoc::detail::typelist_chain<X0, PB_ASSOC_TYPELIST_CHAIN6(X1, X2, X3, X4, X5, X6) >
00731 #define PB_ASSOC_TYPELIST_CHAIN8(X0, X1, X2, X3, X4, X5, X6, X7) pb_assoc::detail::typelist_chain<X0, PB_ASSOC_TYPELIST_CHAIN7(X1, X2, X3, X4, X5, X6, X7) >
00732 #define PB_ASSOC_TYPELIST_CHAIN9(X0, X1, X2, X3, X4, X5, X6, X7, X8) pb_assoc::detail::typelist_chain<X0, PB_ASSOC_TYPELIST_CHAIN8(X1, X2, X3, X4, X5, X6, X7, X8) >
00733 #define PB_ASSOC_TYPELIST_CHAIN10(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9) pb_assoc::detail::typelist_chain<X0, PB_ASSOC_TYPELIST_CHAIN9(X1, X2, X3, X4, X5, X6, X7, X8, X9) >
00734 #define PB_ASSOC_TYPELIST_CHAIN11(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10) pb_assoc::detail::typelist_chain<X0, PB_ASSOC_TYPELIST_CHAIN10(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10) >
00735 #define PB_ASSOC_TYPELIST_CHAIN12(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11) pb_assoc::detail::typelist_chain<X0, PB_ASSOC_TYPELIST_CHAIN11(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11) >
00736 #define PB_ASSOC_TYPELIST_CHAIN13(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12) pb_assoc::detail::typelist_chain<X0, PB_ASSOC_TYPELIST_CHAIN12(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12) >
00737 #define PB_ASSOC_TYPELIST_CHAIN14(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13) pb_assoc::detail::typelist_chain<X0, PB_ASSOC_TYPELIST_CHAIN13(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13) >
00738 #define PB_ASSOC_TYPELIST_CHAIN15(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14) pb_assoc::detail::typelist_chain<X0, PB_ASSOC_TYPELIST_CHAIN14(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14) >
00739
00740 #define PB_ASSOC_CLASS_T_DEC \
00741 template< \
00742 typename Key, \
00743 typename Data, \
00744 class Hash_Fn, \
00745 class Eq_Fn, \
00746 class Resize_Policy, \
00747 bool Store_Hash, \
00748 class DS_Tag, \
00749 class Policy_TL, \
00750 class Allocator>
00751
00752 #define PB_ASSOC_CLASS_C_DEC \
00753 basic_hash_assoc_cntnr< \
00754 Key, \
00755 Data, \
00756 Hash_Fn, \
00757 Eq_Fn, \
00758 Resize_Policy, \
00759 Store_Hash, \
00760 DS_Tag, \
00761 Policy_TL, \
00762 Allocator>
00763
00764 #define PB_ASSOC_BASE_C_DEC \
00765 basic_assoc_cntnr< \
00766 Key, \
00767 Data, \
00768 DS_Tag, \
00769 typename pb_assoc::detail::typelist_append< \
00770 pb_assoc::detail::typelist< \
00771 PB_ASSOC_TYPELIST_CHAIN4( Hash_Fn, Eq_Fn, Resize_Policy, pb_assoc::detail::int_to_type<Store_Hash>) >, \
00772 Policy_TL>::type, \
00773 Allocator>
00774
00775 template<typename Key,
00776 typename Data,
00777 class Hash_Fn,
00778 class Eq_Fn,
00779 class Resize_Policy,
00780 bool Store_Hash,
00781 class DS_Tag,
00782 class Policy_TL,
00783 class Allocator>
00784 class basic_hash_assoc_cntnr : public PB_ASSOC_BASE_C_DEC
00785 {
00786 public:
00787 typedef Hash_Fn hash_fn;
00788
00789 typedef Eq_Fn eq_fn;
00790
00791 typedef Resize_Policy resize_policy;
00792
00793 enum
00794 {
00795 store_hash = Store_Hash
00796 };
00797
00798 virtual
00799 ~basic_hash_assoc_cntnr();
00800
00801 hash_fn&
00802 get_hash_fn();
00803
00804 const hash_fn&
00805 get_hash_fn() const;
00806
00807 eq_fn&
00808 get_eq_fn();
00809
00810 const eq_fn&
00811 get_eq_fn() const;
00812
00813 Resize_Policy&
00814 get_resize_policy();
00815
00816 const resize_policy&
00817 get_resize_policy() const;
00818
00819 protected:
00820
00821 typedef typename Allocator::size_type size_type;
00822
00823 virtual void
00824 do_resize(size_type new_size);
00825
00826 #define PB_ASSOC_CLASS_NAME basic_hash_assoc_cntnr
00827
00828 #define PB_ASSOC_DIRECT_BASE_C_DEC PB_ASSOC_BASE_C_DEC
00829
00830 #define PB_ASSOC_DIRECT_BASE_CAST_C_DEC \
00831 PB_ASSOC_DIRECT_BASE_C_DEC
00832
00833 #include <ext/pb_assoc/detail/constructors_destructor_fn_imps.hpp>
00834
00835 #undef PB_ASSOC_DIRECT_BASE_C_DEC
00836
00837 #undef PB_ASSOC_CLASS_NAME
00838
00839 #undef PB_ASSOC_DIRECT_BASE_C_DEC
00840
00841 private:
00842 typedef PB_ASSOC_BASE_C_DEC my_base;
00843
00844 basic_hash_assoc_cntnr&
00845 operator=(const PB_ASSOC_CLASS_C_DEC& r_other);
00846 };
00847
00848 #include <ext/pb_assoc/detail/basic_hash_assoc_cntnr/constructors_destructor_fn_imps.hpp>
00849 #include <ext/pb_assoc/detail/basic_hash_assoc_cntnr/resize_fn_imps.hpp>
00850
00851 #undef PB_ASSOC_CLASS_T_DEC
00852
00853 #undef PB_ASSOC_CLASS_C_DEC
00854
00855 #undef PB_ASSOC_BASE_C_DEC
00856
00857 #define PB_ASSOC_CLASS_T_DEC \
00858 template< \
00859 typename Key, \
00860 typename Data, \
00861 class Hash_Fn, \
00862 class Eq_Fn, \
00863 class Comb_Hash_Fn, \
00864 class Resize_Policy, \
00865 bool Store_Hash, \
00866 class Allocator>
00867
00868 #define PB_ASSOC_CLASS_C_DEC \
00869 cc_hash_assoc_cntnr< \
00870 Key, \
00871 Data, \
00872 Hash_Fn, \
00873 Eq_Fn, \
00874 Comb_Hash_Fn, \
00875 Resize_Policy, \
00876 Store_Hash, \
00877 Allocator>
00878
00879 #define PB_ASSOC_BASE_C_DEC \
00880 basic_hash_assoc_cntnr< \
00881 Key, \
00882 Data, \
00883 Hash_Fn, \
00884 Eq_Fn, \
00885 Resize_Policy, \
00886 Store_Hash, \
00887 cc_hash_ds_tag, \
00888 pb_assoc::detail::typelist< \
00889 PB_ASSOC_TYPELIST_CHAIN1( \
00890 Comb_Hash_Fn) >, \
00891 Allocator>
00892
00893 template<typename Key,
00894 typename Data,
00895 class Hash_Fn = typename pb_assoc::detail::def_hash_fn<Key>::type,
00896 class Eq_Fn = typename pb_assoc::detail::def_eq_fn<Key>::type,
00897 class Comb_Hash_Fn = pb_assoc::detail::def_comb_hash_fn::type,
00898 class Resize_Policy =
00899 typename pb_assoc::detail::def_resize_policy<Comb_Hash_Fn>::type,
00900 bool Store_Hash = pb_assoc::detail::def_store_hash,
00901 class Allocator = std::allocator<char> >
00902 class cc_hash_assoc_cntnr : public PB_ASSOC_BASE_C_DEC
00903 {
00904 public:
00905 typedef Comb_Hash_Fn comb_hash_fn;
00906
00907 cc_hash_assoc_cntnr();
00908
00909 cc_hash_assoc_cntnr(const Hash_Fn& r_hash_fn);
00910
00911 cc_hash_assoc_cntnr(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn);
00912
00913 cc_hash_assoc_cntnr(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn,
00914 const Comb_Hash_Fn& r_comb_hash_fn);
00915
00916 cc_hash_assoc_cntnr(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn,
00917 const Comb_Hash_Fn& r_comb_hash_fn,
00918 const Resize_Policy& r_resize_policy);
00919
00920 template<class It>
00921 cc_hash_assoc_cntnr(It first_it, It last_it);
00922
00923 template<class It>
00924 cc_hash_assoc_cntnr(It first_it, It last_it, const Hash_Fn& r_hash_fn);
00925
00926 template<class It>
00927 cc_hash_assoc_cntnr(It first_it, It last_it, const Hash_Fn& r_hash_fn,
00928 const Eq_Fn& r_eq_fn);
00929
00930 template<class It>
00931 cc_hash_assoc_cntnr(It first_it, It last_it, const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn, const Comb_Hash_Fn& r_comb_hash_fn);
00932
00933 template<class It>
00934 cc_hash_assoc_cntnr(It first_it, It last_it, const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn, const Comb_Hash_Fn& r_comb_hash_fn, const Resize_Policy& r_resize_policy);
00935
00936 cc_hash_assoc_cntnr(const PB_ASSOC_CLASS_C_DEC& r_other);
00937
00938 virtual
00939 ~cc_hash_assoc_cntnr();
00940
00941 PB_ASSOC_CLASS_C_DEC&
00942 operator=(const PB_ASSOC_CLASS_C_DEC& r_other);
00943
00944 void
00945 swap(PB_ASSOC_CLASS_C_DEC& r_other);
00946
00947 comb_hash_fn&
00948 get_comb_hash_fn();
00949
00950 const comb_hash_fn&
00951 get_comb_hash_fn() const;
00952
00953 private:
00954 typedef PB_ASSOC_BASE_C_DEC my_base;
00955 };
00956
00957 #include <ext/pb_assoc/detail/cc_hash_assoc_cntnr/constructor_destructor_fn_imps.hpp>
00958
00959 #undef PB_ASSOC_CLASS_T_DEC
00960
00961 #undef PB_ASSOC_CLASS_C_DEC
00962
00963 #undef PB_ASSOC_BASE_C_DEC
00964
00965 #define PB_ASSOC_CLASS_T_DEC \
00966 template< \
00967 typename Key, \
00968 typename Data, \
00969 class Hash_Fn, \
00970 class Eq_Fn, \
00971 class Comb_Probe_Fn, \
00972 class Probe_Fn, \
00973 class Resize_Policy, \
00974 bool Store_Hash, \
00975 class Allocator>
00976
00977 #define PB_ASSOC_CLASS_C_DEC \
00978 gp_hash_assoc_cntnr< \
00979 Key, \
00980 Data, \
00981 Hash_Fn, \
00982 Eq_Fn, \
00983 Comb_Probe_Fn, \
00984 Probe_Fn, \
00985 Resize_Policy, \
00986 Store_Hash, \
00987 Allocator>
00988
00989 #define PB_ASSOC_BASE_C_DEC \
00990 basic_hash_assoc_cntnr< \
00991 Key, \
00992 Data, \
00993 Hash_Fn, \
00994 Eq_Fn, \
00995 Resize_Policy, \
00996 Store_Hash, \
00997 gp_hash_ds_tag, \
00998 pb_assoc::detail::typelist< \
00999 PB_ASSOC_TYPELIST_CHAIN2( Comb_Probe_Fn, Probe_Fn) >, \
01000 Allocator>
01001
01002 template<typename Key,
01003 typename Data,
01004 class Hash_Fn = typename pb_assoc::detail::def_hash_fn<Key>::type,
01005 class Eq_Fn = typename pb_assoc::detail::def_eq_fn<Key>::type,
01006 class Comb_Probe_Fn = pb_assoc::detail::def_comb_hash_fn::type,
01007 class Probe_Fn = typename detail::def_probe_fn<Comb_Probe_Fn>::type,
01008 class Resize_Policy =
01009 typename pb_assoc::detail::def_resize_policy<Comb_Probe_Fn>::type,
01010
01011 bool Store_Hash = pb_assoc::detail::def_store_hash,
01012 class Allocator = std::allocator<char> >
01013 class gp_hash_assoc_cntnr : public PB_ASSOC_BASE_C_DEC
01014 {
01015 public:
01016 typedef Comb_Probe_Fn comb_probe_fn;
01017 typedef Probe_Fn probe_fn;
01018
01019 gp_hash_assoc_cntnr();
01020
01021 gp_hash_assoc_cntnr(const Hash_Fn& r_hash_fn);
01022
01023 gp_hash_assoc_cntnr(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn);
01024
01025 gp_hash_assoc_cntnr(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn,
01026 const Comb_Probe_Fn& r_comb_probe_fn);
01027
01028 gp_hash_assoc_cntnr(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn,
01029 const Comb_Probe_Fn& r_comb_probe_fn,
01030 const Probe_Fn& r_probe_fn);
01031
01032 gp_hash_assoc_cntnr(const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn,
01033 const Comb_Probe_Fn& r_comb_probe_fn,
01034 const Probe_Fn& r_probe_fn,
01035 const Resize_Policy& r_resize_policy);
01036
01037 template<class It>
01038 gp_hash_assoc_cntnr(It first_it, It last_it);
01039
01040 template<class It>
01041 gp_hash_assoc_cntnr(It first_it, It last_it, const Hash_Fn& r_hash_fn);
01042
01043 template<class It>
01044 gp_hash_assoc_cntnr(It first_it, It last_it, const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn);
01045
01046 template<class It>
01047 gp_hash_assoc_cntnr(It first_it, It last_it, const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn, const Comb_Probe_Fn& r_comb_probe_fn);
01048
01049 template<class It>
01050 gp_hash_assoc_cntnr(It first_it, It last_it, const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn, const Comb_Probe_Fn& r_comb_probe_fn, const Probe_Fn& r_probe_fn);
01051
01052 template<class It>
01053 gp_hash_assoc_cntnr(It first_it, It last_it, const Hash_Fn& r_hash_fn, const Eq_Fn& r_eq_fn, const Comb_Probe_Fn& r_comb_probe_fn, const Probe_Fn& r_probe_fn, const Resize_Policy& r_resize_policy);
01054
01055 gp_hash_assoc_cntnr(const PB_ASSOC_CLASS_C_DEC& r_other);
01056
01057 virtual
01058 ~gp_hash_assoc_cntnr();
01059
01060 PB_ASSOC_CLASS_C_DEC&
01061 operator=(const PB_ASSOC_CLASS_C_DEC& r_other);
01062
01063 void
01064 swap(PB_ASSOC_CLASS_C_DEC& r_other);
01065
01066 comb_probe_fn&
01067 get_comb_probe_fn();
01068
01069 const comb_probe_fn&
01070 get_comb_probe_fn() const;
01071
01072 probe_fn&
01073 get_probe_fn();
01074
01075 const probe_fn&
01076 get_probe_fn() const;
01077
01078 private:
01079 typedef PB_ASSOC_BASE_C_DEC my_base;
01080 };
01081
01082 #include <ext/pb_assoc/detail/gp_hash_assoc_cntnr/constructor_destructor_fn_imps.hpp>
01083
01084 #undef PB_ASSOC_CLASS_T_DEC
01085
01086 #undef PB_ASSOC_CLASS_C_DEC
01087
01088 #undef PB_ASSOC_BASE_C_DEC
01089
01090 #define PB_ASSOC_CLASS_T_DEC \
01091 template< \
01092 typename Key, \
01093 typename Data, \
01094 class Cmp_Fn, \
01095 class DS_Tag, \
01096 class Node_Updator, \
01097 class Allocator>
01098
01099 #define PB_ASSOC_CLASS_C_DEC \
01100 basic_tree_assoc_cntnr< \
01101 Key, \
01102 Data, \
01103 Cmp_Fn, \
01104 DS_Tag, \
01105 Node_Updator, \
01106 Allocator>
01107
01108 #define PB_ASSOC_BASE_C_DEC \
01109 basic_assoc_cntnr< \
01110 Key, \
01111 Data, \
01112 DS_Tag, \
01113 pb_assoc::detail::typelist< \
01114 PB_ASSOC_TYPELIST_CHAIN2( Cmp_Fn, Node_Updator) >, \
01115 Allocator>
01116
01117 template<typename Key,
01118 typename Data,
01119 class Cmp_Fn,
01120 class DS_Tag,
01121 class Node_Updator,
01122 class Allocator>
01123 class basic_tree_assoc_cntnr : public PB_ASSOC_BASE_C_DEC
01124 {
01125 public:
01126 typedef typename Allocator::size_type size_type;
01127
01128 typedef
01129 typename Allocator::template rebind<
01130 Key>::other::const_reference
01131 const_key_reference;
01132
01133 typedef Cmp_Fn cmp_fn;
01134
01135 typedef Node_Updator node_updator;
01136
01137 typedef typename PB_ASSOC_BASE_C_DEC::const_iterator const_iterator;
01138
01139 typedef typename PB_ASSOC_BASE_C_DEC::iterator iterator;
01140
01141 typedef
01142 typename PB_ASSOC_BASE_C_DEC::const_reverse_iterator
01143 const_reverse_iterator;
01144
01145 typedef
01146 typename PB_ASSOC_BASE_C_DEC::reverse_iterator
01147 reverse_iterator;
01148
01149 typedef
01150 typename PB_ASSOC_BASE_C_DEC::const_node_iterator
01151 const_node_iterator;
01152
01153 typedef typename PB_ASSOC_BASE_C_DEC::node_iterator node_iterator;
01154
01155 virtual
01156 ~basic_tree_assoc_cntnr();
01157
01158 cmp_fn&
01159 get_cmp_fn();
01160
01161 const cmp_fn&
01162 get_cmp_fn() const;
01163
01164 node_updator&
01165 get_node_updator();
01166
01167 const node_updator&
01168 get_node_updator() const;
01169
01170 inline size_type
01171 erase(const_key_reference r_key);
01172
01173 inline iterator
01174 erase(iterator it);
01175
01176 inline reverse_iterator
01177 erase(reverse_iterator it)
01178 {
01179 return (my_base::erase(it));
01180 }
01181
01182 inline reverse_iterator
01183 rbegin()
01184 {
01185 return (my_base::rbegin());
01186 }
01187
01188 inline const_reverse_iterator
01189 rbegin() const
01190 {
01191 return (my_base::rbegin());
01192 }
01193
01194 inline reverse_iterator
01195 rend()
01196 {
01197 return (my_base::rend());
01198 }
01199
01200 inline const_reverse_iterator
01201 rend() const
01202 {
01203 return (my_base::rend());
01204 }
01205
01206 inline node_iterator
01207 node_begin()
01208 {
01209 return (my_base::node_begin());
01210 }
01211
01212 inline const_node_iterator
01213 node_begin() const
01214 {
01215 return (my_base::node_begin());
01216 }
01217
01218 inline node_iterator
01219 node_end()
01220 {
01221 return (my_base::node_end());
01222 }
01223
01224 inline const_node_iterator
01225 node_end() const
01226 {
01227 return (my_base::node_end());
01228 }
01229
01230 void
01231 join(PB_ASSOC_CLASS_C_DEC& r_other);
01232
01233 inline void
01234 split(const_key_reference r_key, PB_ASSOC_CLASS_C_DEC& r_other);
01235
01236 protected:
01237
01238 #define PB_ASSOC_CLASS_NAME basic_tree_assoc_cntnr
01239
01240 #define PB_ASSOC_DIRECT_BASE_C_DEC PB_ASSOC_BASE_C_DEC
01241
01242 #define PB_ASSOC_DIRECT_BASE_CAST_C_DEC \
01243 PB_ASSOC_DIRECT_BASE_C_DEC
01244
01245 #include <ext/pb_assoc/detail/constructors_destructor_fn_imps.hpp>
01246
01247 #undef PB_ASSOC_DIRECT_BASE_CAST_C_DEC
01248
01249 #undef PB_ASSOC_CLASS_NAME
01250
01251 #undef PB_ASSOC_DIRECT_BASE_C_DEC
01252
01253 private:
01254 typedef PB_ASSOC_BASE_C_DEC my_base;
01255 };
01256
01257 #include <ext/pb_assoc/detail/basic_tree_assoc_cntnr/constructors_destructor_fn_imps.hpp>
01258 #include <ext/pb_assoc/detail/basic_tree_assoc_cntnr/policy_access_fn_imps.hpp>
01259 #include <ext/pb_assoc/detail/basic_tree_assoc_cntnr/range_iteration_fn_imps.hpp>
01260 #include <ext/pb_assoc/detail/basic_tree_assoc_cntnr/r_range_iteration_fn_imps.hpp>
01261 #include <ext/pb_assoc/detail/basic_tree_assoc_cntnr/node_iteration_fn_imps.hpp>
01262 #include <ext/pb_assoc/detail/basic_tree_assoc_cntnr/split_join_fn_imps.hpp>
01263 #include <ext/pb_assoc/detail/basic_tree_assoc_cntnr/erase_fn_imps.hpp>
01264 #include <ext/pb_assoc/detail/basic_tree_assoc_cntnr/r_erase_fn_imps.hpp>
01265
01266 #undef PB_ASSOC_CLASS_T_DEC
01267
01268 #undef PB_ASSOC_CLASS_C_DEC
01269
01270 #undef PB_ASSOC_BASE_C_DEC
01271
01272 #define PB_ASSOC_CLASS_T_DEC \
01273 template< \
01274 typename Key, \
01275 typename Data, \
01276 class Cmp_Fn, \
01277 class Node_Updator, \
01278 class Allocator>
01279
01280 #define PB_ASSOC_CLASS_C_DEC \
01281 basic_tree_assoc_cntnr< \
01282 Key, \
01283 Data, \
01284 Cmp_Fn, \
01285 ov_tree_ds_tag, \
01286 Node_Updator, \
01287 Allocator>
01288
01289 #define PB_ASSOC_BASE_C_DEC \
01290 basic_assoc_cntnr< \
01291 Key, \
01292 Data, \
01293 ov_tree_ds_tag, \
01294 pb_assoc::detail::typelist< \
01295 PB_ASSOC_TYPELIST_CHAIN2( Cmp_Fn, Node_Updator) >, \
01296 Allocator>
01297
01298 template<typename Key,
01299 typename Data,
01300 typename Cmp_Fn,
01301 typename Node_Updator,
01302 typename Allocator>
01303 class basic_tree_assoc_cntnr<Key, Data, Cmp_Fn, ov_tree_ds_tag, Node_Updator, Allocator>
01304 : public PB_ASSOC_BASE_C_DEC
01305 {
01306 public:
01307 typedef typename Allocator::size_type size_type;
01308
01309 typedef
01310 typename Allocator::template rebind<
01311 Key>::other::const_reference
01312 const_key_reference;
01313
01314 typedef Cmp_Fn cmp_fn;
01315
01316 typedef Node_Updator node_updator;
01317
01318 typedef typename PB_ASSOC_BASE_C_DEC::const_iterator const_iterator;
01319
01320 typedef typename PB_ASSOC_BASE_C_DEC::iterator iterator;
01321
01322 typedef
01323 typename PB_ASSOC_BASE_C_DEC::const_node_iterator
01324 const_node_iterator;
01325
01326 typedef typename PB_ASSOC_BASE_C_DEC::node_iterator node_iterator;
01327
01328 virtual
01329 ~basic_tree_assoc_cntnr();
01330
01331 cmp_fn&
01332 get_cmp_fn();
01333
01334 const cmp_fn&
01335 get_cmp_fn() const;
01336
01337 node_updator&
01338 get_node_updator();
01339
01340 const node_updator&
01341 get_node_updator() const;
01342
01343 inline size_type
01344 erase(const_key_reference r_key);
01345
01346 inline iterator
01347 erase(iterator it);
01348
01349 inline node_iterator
01350 node_begin()
01351 {
01352 return (my_base::node_begin());
01353 }
01354
01355 inline const_node_iterator
01356 node_begin() const
01357 {
01358 return (my_base::node_begin());
01359 }
01360
01361 inline node_iterator
01362 node_end()
01363 {
01364 return (my_base::node_end());
01365 }
01366
01367 inline const_node_iterator
01368 node_end() const
01369 {
01370 return (my_base::node_end());
01371 }
01372
01373 void
01374 join(PB_ASSOC_CLASS_C_DEC& r_other);
01375
01376 inline void
01377 split(const_key_reference r_key, PB_ASSOC_CLASS_C_DEC& r_other);
01378
01379 protected:
01380
01381 #define PB_ASSOC_CLASS_NAME basic_tree_assoc_cntnr
01382
01383 #define PB_ASSOC_DIRECT_BASE_C_DEC PB_ASSOC_BASE_C_DEC
01384
01385 #define PB_ASSOC_DIRECT_BASE_CAST_C_DEC \
01386 PB_ASSOC_DIRECT_BASE_C_DEC
01387
01388 #include <ext/pb_assoc/detail/constructors_destructor_fn_imps.hpp>
01389
01390 #undef PB_ASSOC_DIRECT_BASE_CAST_C_DEC
01391
01392 #undef PB_ASSOC_CLASS_NAME
01393
01394 #undef PB_ASSOC_DIRECT_BASE_C_DEC
01395
01396 private:
01397 typedef PB_ASSOC_BASE_C_DEC my_base;
01398 };
01399
01400 #include <ext/pb_assoc/detail/basic_tree_assoc_cntnr/constructors_destructor_fn_imps.hpp>
01401 #include <ext/pb_assoc/detail/basic_tree_assoc_cntnr/policy_access_fn_imps.hpp>
01402 #include <ext/pb_assoc/detail/basic_tree_assoc_cntnr/range_iteration_fn_imps.hpp>
01403 #include <ext/pb_assoc/detail/basic_tree_assoc_cntnr/node_iteration_fn_imps.hpp>
01404 #include <ext/pb_assoc/detail/basic_tree_assoc_cntnr/split_join_fn_imps.hpp>
01405 #include <ext/pb_assoc/detail/basic_tree_assoc_cntnr/erase_fn_imps.hpp>
01406
01407 #undef PB_ASSOC_CLASS_T_DEC
01408
01409 #undef PB_ASSOC_CLASS_C_DEC
01410
01411 #undef PB_ASSOC_BASE_C_DEC
01412
01413 #define PB_ASSOC_CLASS_T_DEC \
01414 template< \
01415 typename Key, \
01416 typename Data, \
01417 class Cmp_Fn, \
01418 class DS_Tag, \
01419 class Node_Updator, \
01420 class Allocator>
01421
01422 #define PB_ASSOC_CLASS_C_DEC \
01423 tree_assoc_cntnr< \
01424 Key, \
01425 Data, \
01426 Cmp_Fn, \
01427 DS_Tag, \
01428 Node_Updator, \
01429 Allocator>
01430
01431 #define PB_ASSOC_BASE_C_DEC \
01432 basic_tree_assoc_cntnr< \
01433 Key, \
01434 Data, \
01435 Cmp_Fn, \
01436 DS_Tag, \
01437 Node_Updator, \
01438 Allocator>
01439
01440 template<typename Key, typename Data, class Cmp_Fn = std::less<Key>,
01441 typename DS_Tag = rb_tree_ds_tag,
01442 typename Node_Updator = pb_assoc::detail::def_node_updator,
01443 typename Allocator = std::allocator<char> >
01444 class tree_assoc_cntnr : public PB_ASSOC_BASE_C_DEC
01445 {
01446 typedef Cmp_Fn cmp_fn;
01447 typedef Node_Updator node_updator;
01448
01449 public:
01450 tree_assoc_cntnr();
01451 tree_assoc_cntnr(const cmp_fn& r_cmp_fn);
01452 tree_assoc_cntnr(const cmp_fn& r_cmp_fn, const Node_Updator&r);
01453
01454 template<typename It>
01455 tree_assoc_cntnr(It first_it, It last_it);
01456
01457 template<typename It>
01458 tree_assoc_cntnr(It first_it, It last_it, const cmp_fn& r_cmp_fn);
01459
01460 template<typename It>
01461 tree_assoc_cntnr(It, It, const cmp_fn&, const Node_Updator&);
01462
01463 tree_assoc_cntnr(const PB_ASSOC_CLASS_C_DEC& r_other);
01464
01465 virtual
01466 ~tree_assoc_cntnr();
01467
01468 PB_ASSOC_CLASS_C_DEC&
01469 operator=(const PB_ASSOC_CLASS_C_DEC& r_other);
01470
01471 void
01472 swap(PB_ASSOC_CLASS_C_DEC& r_other);
01473
01474 private:
01475 typedef PB_ASSOC_BASE_C_DEC my_base;
01476 };
01477
01478 #include <ext/pb_assoc/detail/tree_assoc_cntnr/constructor_destructor_fn_imps.hpp>
01479
01480 #undef PB_ASSOC_CLASS_T_DEC
01481
01482 #undef PB_ASSOC_CLASS_C_DEC
01483
01484 #undef PB_ASSOC_BASE_C_DEC
01485
01486 #define PB_ASSOC_CLASS_T_DEC \
01487 template< \
01488 typename Key, \
01489 typename Data, \
01490 class Eq_Fn, \
01491 class Update_Policy, \
01492 class Allocator>
01493
01494 #define PB_ASSOC_CLASS_C_DEC \
01495 lu_assoc_cntnr< \
01496 Key, \
01497 Data, \
01498 Eq_Fn, \
01499 Update_Policy, \
01500 Allocator>
01501
01502 #define PB_ASSOC_BASE_C_DEC \
01503 basic_assoc_cntnr< \
01504 Key, \
01505 Data, \
01506 lu_ds_tag, \
01507 pb_assoc::detail::typelist< \
01508 PB_ASSOC_TYPELIST_CHAIN2( Eq_Fn, Update_Policy) >, \
01509 Allocator>
01510
01511 template<typename Key,
01512 typename Data,
01513 typename Eq_Fn = typename pb_assoc::detail::def_eq_fn<Key>::type,
01514 typename Update_Policy = pb_assoc::detail::def_update_policy::type,
01515 typename Allocator = std::allocator<char> >
01516 class lu_assoc_cntnr : public PB_ASSOC_BASE_C_DEC
01517 {
01518 public:
01519 typedef Eq_Fn eq_fn;
01520 typedef Allocator allocator;
01521 typedef Update_Policy update_policy;
01522
01523 lu_assoc_cntnr();
01524 lu_assoc_cntnr(const Eq_Fn& r_eq_fn);
01525 lu_assoc_cntnr(const Eq_Fn& r_eq_fn, const Update_Policy& r_update_policy);
01526
01527 template<typename It>
01528 lu_assoc_cntnr(It first_it, It last_it);
01529
01530 template<typename It>
01531 lu_assoc_cntnr(It first_it, It last_it, const Eq_Fn& r_eq_fn);
01532
01533 template<typename It>
01534 lu_assoc_cntnr(It, It, const Eq_Fn&, const Update_Policy&);
01535
01536 lu_assoc_cntnr(const PB_ASSOC_CLASS_C_DEC& r_other);
01537
01538 virtual
01539 ~lu_assoc_cntnr();
01540
01541 PB_ASSOC_CLASS_C_DEC&
01542 operator=(const PB_ASSOC_CLASS_C_DEC& r_other);
01543
01544 void
01545 swap(PB_ASSOC_CLASS_C_DEC& r_other);
01546
01547 eq_fn&
01548 get_eq_fn();
01549
01550 const eq_fn&
01551 get_eq_fn() const;
01552
01553 update_policy&
01554 get_update_policy();
01555
01556 const update_policy&
01557 get_update_policy() const;
01558
01559 private:
01560 typedef PB_ASSOC_BASE_C_DEC my_base;
01561 };
01562
01563 #include <ext/pb_assoc/detail/lu_assoc_cntnr/constructor_destructor_fn_imps.hpp>
01564 #include <ext/pb_assoc/detail/lu_assoc_cntnr/policy_access_fn_imps.hpp>
01565
01566 #undef PB_ASSOC_CLASS_T_DEC
01567
01568 #undef PB_ASSOC_CLASS_C_DEC
01569
01570 #undef PB_ASSOC_BASE_C_DEC
01571
01572 #undef PB_ASSOC_TYPELIST_CHAIN1
01573 #undef PB_ASSOC_TYPELIST_CHAIN2
01574 #undef PB_ASSOC_TYPELIST_CHAIN3
01575 #undef PB_ASSOC_TYPELIST_CHAIN4
01576 #undef PB_ASSOC_TYPELIST_CHAIN5
01577 #undef PB_ASSOC_TYPELIST_CHAIN6
01578 #undef PB_ASSOC_TYPELIST_CHAIN7
01579 #undef PB_ASSOC_TYPELIST_CHAIN8
01580 #undef PB_ASSOC_TYPELIST_CHAIN9
01581 #undef PB_ASSOC_TYPELIST_CHAIN10
01582 #undef PB_ASSOC_TYPELIST_CHAIN11
01583 #undef PB_ASSOC_TYPELIST_CHAIN12
01584 #undef PB_ASSOC_TYPELIST_CHAIN13
01585 #undef PB_ASSOC_TYPELIST_CHAIN14
01586 #undef PB_ASSOC_TYPELIST_CHAIN15
01587
01588 }
01589
01590 #endif // #ifndef ASSOC_CNTNR_HPP