ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

_set.h
Go to the documentation of this file.
00001 /*
00002  * Copyright (c) 2005
00003  * Francois Dumont
00004  *
00005  * This material is provided "as is", with absolutely no warranty expressed
00006  * or implied. Any use is at your own risk.
00007  *
00008  * Permission to use or copy this software for any purpose is hereby granted
00009  * without fee, provided the above notices are retained on all copies.
00010  * Permission to modify the code and to distribute modified code is granted,
00011  * provided the above notices are retained, and a notice that the code was
00012  * modified is included with the above copyright notice.
00013  */
00014 
00015 /* NOTE: This is an internal header file, included by other STL headers.
00016  *   You should not attempt to use it directly.
00017  */
00018 
00019 #ifndef _STLP_PTR_SPECIALIZED_SET_H
00020 #define _STLP_PTR_SPECIALIZED_SET_H
00021 
00022 #ifndef _STLP_POINTERS_SPEC_TOOLS_H
00023 #  include <stl/pointers/_tools.h>
00024 #endif
00025 
00026 _STLP_BEGIN_NAMESPACE
00027 
00028 #if defined (__BORLANDC__) || defined (__DMC__)
00029 #  define typename
00030 #endif
00031 
00032 //Specific iterator traits creation
00033 _STLP_CREATE_ITERATOR_TRAITS(SetTraitsT, Const_traits)
00034 
00035 #if defined (_STLP_USE_TEMPLATE_EXPORT) && !defined (_STLP_USE_MSVC6_MEM_T_BUG_WORKAROUND)
00036 _STLP_EXPORT template struct _STLP_CLASS_DECLSPEC less<void*>;
00037 
00038 _STLP_MOVE_TO_PRIV_NAMESPACE
00039 
00040 typedef _Rb_tree_node<void*> _Node;
00041 _STLP_EXPORT_TEMPLATE_CLASS _STLP_alloc_proxy<_Rb_tree_node_base, _Node,  allocator<_Node> >;
00042 _STLP_EXPORT_TEMPLATE_CLASS _Rb_tree_base<void*, allocator<void*> >;
00043 #  if defined (_STLP_DEBUG)
00044 _STLP_EXPORT_TEMPLATE_CLASS _DbgCompare<void*, less<void*> >;
00045 #    define _Rb_tree _STLP_NON_DBG_NAME(Rb_tree)
00046 _STLP_EXPORT_TEMPLATE_CLASS _Rb_tree<void*, _DbgCompare<void*, less<void*> >, void*, _Identity<void*>,
00047                                      _SetTraitsT<void*>, allocator<void*> >;
00048 #    undef _Rb_tree
00049 #  endif
00050 _STLP_EXPORT_TEMPLATE_CLASS _Rb_tree<void*, less<void*>, void*, _Identity<void*>,
00051                                      _SetTraitsT<void*>, allocator<void*> >;
00052 _STLP_MOVE_TO_STD_NAMESPACE
00053 #endif
00054 
00055 template <class _Key, _STLP_DFL_TMPL_PARAM(_Compare, less<_Key>),
00056                       _STLP_DFL_TMPL_PARAM(_Alloc, allocator<_Key>) >
00057 class set
00058 #if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND)
00059           : public __stlport_class<set<_Key, _Compare, _Alloc> >
00060 #endif
00061 {
00062 #if !defined (__BORLANDC__)
00063   typedef _STLP_PRIV _AssocStorageTypes<_Key, _Compare> _AssocStorageTypes;
00064   typedef typename _AssocStorageTypes::_KeyStorageType _KeyStorageType;
00065   typedef typename _AssocStorageTypes::_CompareStorageType _CompareStorageType;
00066 #else
00067   typedef _STLP_PRIV _AssocStorageTypes<_Key, _Compare>::_KeyStorageType _KeyStorageType;
00068   typedef _STLP_PRIV _AssocStorageTypes<_Key, _Compare>::_CompareStorageType _CompareStorageType;
00069 #endif
00070   typedef typename _Alloc_traits<_KeyStorageType, _Alloc>::allocator_type _StorageTypeAlloc;
00071   typedef _STLP_PRIV _CastTraits<_KeyStorageType, _Key> cast_traits;
00072 
00073   typedef set<_Key, _Compare, _Alloc> _Self;
00074 public:
00075   typedef _Key     key_type;
00076   typedef _Key     value_type;
00077   typedef _Compare key_compare;
00078   typedef _Compare value_compare;
00079 
00080 protected:
00081   //Specific iterator traits creation
00082   typedef _STLP_PRIV _SetTraitsT<value_type> _SetTraits;
00083   typedef _STLP_PRIV _Rb_tree<key_type, key_compare,
00084                               value_type, _STLP_PRIV _Identity<value_type>,
00085                               _SetTraits, _Alloc> _Priv_Rep_type;
00086 
00087   typedef _STLP_PRIV _SetTraitsT<_KeyStorageType> _SetStorageTraits;
00088 
00089 public:
00090   //dums: need the following public for the __move_traits framework
00091   typedef _STLP_PRIV _Rb_tree<_KeyStorageType, _CompareStorageType,
00092                               _KeyStorageType, _STLP_PRIV _Identity<_KeyStorageType>,
00093                               _SetStorageTraits, _StorageTypeAlloc> _Rep_type;
00094 
00095 private:
00096   typedef typename _Rep_type::iterator base_iterator;
00097   typedef typename _Rep_type::const_iterator const_base_iterator;
00098 
00099 public:
00100   typedef typename _Priv_Rep_type::pointer pointer;
00101   typedef typename _Priv_Rep_type::const_pointer const_pointer;
00102   typedef typename _Priv_Rep_type::reference reference;
00103   typedef typename _Priv_Rep_type::const_reference const_reference;
00104   typedef typename _Priv_Rep_type::iterator iterator;
00105   typedef typename _Priv_Rep_type::const_iterator const_iterator;
00106   typedef typename _Priv_Rep_type::reverse_iterator reverse_iterator;
00107   typedef typename _Priv_Rep_type::const_reverse_iterator const_reverse_iterator;
00108   typedef typename _Priv_Rep_type::size_type size_type;
00109   typedef typename _Priv_Rep_type::difference_type difference_type;
00110   typedef typename _Priv_Rep_type::allocator_type allocator_type;
00111 
00112 private:
00113   _Rep_type _M_t;  // red-black tree representing set
00114   _STLP_KEY_TYPE_FOR_CONT_EXT(key_type)
00115 
00116 #if defined (_STLP_DEBUG)
00117   static iterator _S_to_value_ite(const_base_iterator __ite)
00118   { return iterator(__ite._Owner(), __ite._M_iterator._M_node); }
00119   static base_iterator _S_to_storage_ite(const_iterator __ite)
00120   { return base_iterator(__ite._Owner(), __ite._M_iterator._M_node); }
00121 #else
00122   static iterator _S_to_value_ite(const_base_iterator __ite)
00123   { return iterator(__ite._M_node); }
00124   static base_iterator _S_to_storage_ite(const_iterator __ite)
00125   { return base_iterator(__ite._M_node); }
00126 #endif
00127 
00128 public:
00129   set() : _M_t(_CompareStorageType(), _StorageTypeAlloc()) {}
00130   explicit set(const _Compare& __comp,
00131                const allocator_type& __a = allocator_type())
00132     : _M_t(__comp, _STLP_CONVERT_ALLOCATOR(__a, _KeyStorageType)) {}
00133 
00134 #if defined (_STLP_MEMBER_TEMPLATES)
00135   template <class _InputIterator>
00136   set(_InputIterator __first, _InputIterator __last)
00137     : _M_t(_Compare(), _StorageTypeAlloc()) {
00138 #  if defined (_STLP_USE_ITERATOR_WRAPPER)
00139     _M_t.insert_unique(_STLP_TYPENAME _STLP_PRIV _IteWrapper<_KeyStorageType, _Key, _InputIterator>::_Ite(__first),
00140                        _STLP_TYPENAME _STLP_PRIV _IteWrapper<_KeyStorageType, _Key, _InputIterator>::_Ite(__last));
00141 #  else
00142     _M_t.insert_unique(__first, __last);
00143 #  endif
00144   }
00145 
00146 #  if defined (_STLP_NEEDS_EXTRA_TEMPLATE_CONSTRUCTORS)
00147   template <class _InputIterator>
00148   set(_InputIterator __first, _InputIterator __last, const _Compare& __comp)
00149     : _M_t(__comp, _StorageTypeAlloc()) {
00150 #    if defined (_STLP_USE_ITERATOR_WRAPPER)
00151     _M_t.insert_unique(_STLP_TYPENAME _STLP_PRIV _IteWrapper<_KeyStorageType, _Key, _InputIterator>::_Ite(__first),
00152                        _STLP_TYPENAME _STLP_PRIV _IteWrapper<_KeyStorageType, _Key, _InputIterator>::_Ite(__last));
00153 #    else
00154     _M_t.insert_unique(__first, __last);
00155 #    endif
00156   }
00157 #  endif
00158   template <class _InputIterator>
00159   set(_InputIterator __first, _InputIterator __last, const _Compare& __comp,
00160       const allocator_type& __a _STLP_ALLOCATOR_TYPE_DFL)
00161     : _M_t(__comp, _STLP_CONVERT_ALLOCATOR(__a, _KeyStorageType)) {
00162 #  if defined (_STLP_USE_ITERATOR_WRAPPER)
00163     _M_t.insert_unique(_STLP_TYPENAME _STLP_PRIV _IteWrapper<_KeyStorageType, _Key, _InputIterator>::_Ite(__first),
00164                        _STLP_TYPENAME _STLP_PRIV _IteWrapper<_KeyStorageType, _Key, _InputIterator>::_Ite(__last));
00165 #  else
00166     _M_t.insert_unique(__first, __last);
00167 #  endif
00168   }
00169 #else
00170   set(const value_type* __first, const value_type* __last)
00171     : _M_t(_Compare(), _StorageTypeAlloc()) {
00172     _M_t.insert_unique(cast_traits::to_storage_type_cptr(__first),
00173                        cast_traits::to_storage_type_cptr(__last));
00174   }
00175 
00176   set(const value_type* __first, const value_type* __last,
00177       const _Compare& __comp, const allocator_type& __a = allocator_type())
00178     : _M_t(__comp, _STLP_CONVERT_ALLOCATOR(__a, _KeyStorageType)) {
00179     _M_t.insert_unique(cast_traits::to_storage_type_cptr(__first),
00180                        cast_traits::to_storage_type_cptr(__last));
00181   }
00182 
00183   set(const_iterator __first, const_iterator __last)
00184     : _M_t(_Compare(), _StorageTypeAlloc())
00185   { _M_t.insert_unique(_S_to_storage_ite(__first), _S_to_storage_ite(__last)); }
00186 
00187   set(const_iterator __first, const_iterator __last,
00188       const _Compare& __comp, const allocator_type& __a = allocator_type())
00189     : _M_t(__comp, _STLP_CONVERT_ALLOCATOR(__a, _KeyStorageType))
00190   { _M_t.insert_unique(_S_to_storage_ite(__first), _S_to_storage_ite(__last)); }
00191 #endif /* _STLP_MEMBER_TEMPLATES */
00192 
00193   set(const _Self& __x) : _M_t(__x._M_t) {}
00194 
00195 #if !defined (_STLP_NO_MOVE_SEMANTIC)
00196   set(__move_source<_Self> src)
00197     : _M_t(__move_source<_Rep_type>(src.get()._M_t)) {}
00198 #endif
00199 
00200   _Self& operator=(const _Self& __x) {
00201     _M_t = __x._M_t;
00202     return *this;
00203   }
00204 
00205   // accessors:
00206   key_compare key_comp() const { return _M_t.key_comp(); }
00207   value_compare value_comp() const { return _M_t.key_comp(); }
00208   allocator_type get_allocator() const
00209   { return _STLP_CONVERT_ALLOCATOR(_M_t.get_allocator(), value_type); }
00210 
00211   iterator begin() { return _S_to_value_ite(_M_t.begin()); }
00212   iterator end() { return _S_to_value_ite(_M_t.end()); }
00213   const_iterator begin() const { return _S_to_value_ite(_M_t.begin()); }
00214   const_iterator end() const { return _S_to_value_ite(_M_t.end()); }
00215   reverse_iterator rbegin() { return reverse_iterator(end()); }
00216   reverse_iterator rend() { return reverse_iterator(begin()); }
00217   const_reverse_iterator rbegin() const { return const_reverse_iterator(end()); }
00218   const_reverse_iterator rend() const { return const_reverse_iterator(begin()); }
00219   bool empty() const { return _M_t.empty(); }
00220   size_type size() const { return _M_t.size(); }
00221   size_type max_size() const { return _M_t.max_size(); }
00222   void swap(_Self& __x) { _M_t.swap(__x._M_t); }
00223 #if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) && !defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER)
00224   void _M_swap_workaround(_Self& __x) { swap(__x); }
00225 #endif
00226 
00227   // insert/erase
00228   pair<iterator,bool> insert(const value_type& __x) {
00229     pair<base_iterator, bool> ret = _M_t.insert_unique(cast_traits::to_storage_type_cref(__x));
00230     return pair<iterator, bool>(_S_to_value_ite(ret.first), ret.second);
00231   }
00232   iterator insert(iterator __pos, const value_type& __x)
00233   { return _S_to_value_ite(_M_t.insert_unique(_S_to_storage_ite(__pos), cast_traits::to_storage_type_cref(__x))); }
00234 
00235 #if defined (_STLP_MEMBER_TEMPLATES)
00236   template <class _InputIterator>
00237   void insert(_InputIterator __first, _InputIterator __last) {
00238 #  if defined (_STLP_USE_ITERATOR_WRAPPER)
00239     _M_t.insert_unique(_STLP_TYPENAME _STLP_PRIV _IteWrapper<_KeyStorageType, _Key, _InputIterator>::_Ite(__first),
00240                        _STLP_TYPENAME _STLP_PRIV _IteWrapper<_KeyStorageType, _Key, _InputIterator>::_Ite(__last));
00241 #  else
00242     _M_t.insert_unique(__first, __last);
00243 #  endif
00244   }
00245 #else
00246   void insert(const_iterator __first, const_iterator __last)
00247   { _M_t.insert_unique(_S_to_storage_ite(__first), _S_to_storage_ite(__last)); }
00248   void insert(const value_type* __first, const value_type* __last) {
00249     _M_t.insert_unique(cast_traits::to_storage_type_cptr(__first),
00250                        cast_traits::to_storage_type_cptr(__last));
00251   }
00252 #endif
00253   void erase(iterator __pos)
00254   { _M_t.erase(_S_to_storage_ite(__pos)); }
00255   size_type erase(const key_type& __x)
00256   { return _M_t.erase_unique(cast_traits::to_storage_type_cref(__x)); }
00257   void erase(iterator __first, iterator __last)
00258   { _M_t.erase(_S_to_storage_ite(__first), _S_to_storage_ite(__last)); }
00259   void clear() { _M_t.clear(); }
00260 
00261   // set operations:
00262   _STLP_TEMPLATE_FOR_CONT_EXT
00263   const_iterator find(const _KT& __x) const
00264   { return _S_to_value_ite(_M_t.find(cast_traits::to_storage_type_crefT(__x))); }
00265   _STLP_TEMPLATE_FOR_CONT_EXT
00266   iterator find(const _KT& __x)
00267   { return _S_to_value_ite(_M_t.find(cast_traits::to_storage_type_crefT(__x))); }
00268   _STLP_TEMPLATE_FOR_CONT_EXT
00269   size_type count(const _KT& __x) const
00270   { return _M_t.find(cast_traits::to_storage_type_crefT(__x)) == _M_t.end() ? 0 : 1; }
00271   _STLP_TEMPLATE_FOR_CONT_EXT
00272   iterator lower_bound(const _KT& __x)
00273   { return _S_to_value_ite(_M_t.lower_bound(cast_traits::to_storage_type_crefT(__x))); }
00274   _STLP_TEMPLATE_FOR_CONT_EXT
00275   const_iterator lower_bound(const _KT& __x) const
00276   { return _S_to_value_ite(_M_t.lower_bound(cast_traits::to_storage_type_crefT(__x))); }
00277   _STLP_TEMPLATE_FOR_CONT_EXT
00278   iterator upper_bound(const _KT& __x)
00279   { return _S_to_value_ite(_M_t.upper_bound(cast_traits::to_storage_type_crefT(__x))); }
00280   _STLP_TEMPLATE_FOR_CONT_EXT
00281   const_iterator upper_bound(const _KT& __x) const
00282   { return _S_to_value_ite(_M_t.upper_bound(cast_traits::to_storage_type_crefT(__x))); }
00283   _STLP_TEMPLATE_FOR_CONT_EXT
00284   pair<iterator, iterator> equal_range(const _KT& __x) {
00285     pair<base_iterator, base_iterator> __ret;
00286     __ret = _M_t.equal_range(cast_traits::to_storage_type_crefT(__x));
00287     return pair<iterator, iterator>(_S_to_value_ite(__ret.first),
00288                                     _S_to_value_ite(__ret.second));
00289   }
00290   _STLP_TEMPLATE_FOR_CONT_EXT
00291   pair<const_iterator, const_iterator> equal_range(const _KT& __x) const {
00292     pair<const_base_iterator, const_base_iterator> __ret;
00293     __ret = _M_t.equal_range_unique(cast_traits::to_storage_type_crefT(__x));
00294     return pair<const_iterator, const_iterator>(_S_to_value_ite(__ret.first),
00295                                                 _S_to_value_ite(__ret.second));
00296   }
00297 };
00298 
00299 //Specific iterator traits creation
00300 _STLP_CREATE_ITERATOR_TRAITS(MultisetTraitsT, Const_traits)
00301 
00302 template <class _Key, _STLP_DFL_TMPL_PARAM(_Compare, less<_Key>),
00303                      _STLP_DFL_TMPL_PARAM(_Alloc, allocator<_Key>) >
00304 class multiset
00305 #if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND)
00306                : public __stlport_class<multiset<_Key, _Compare, _Alloc> >
00307 #endif
00308 {
00309 #if !defined (__BORLANDC__)
00310   typedef _STLP_PRIV _AssocStorageTypes<_Key, _Compare> _AssocStorageTypes;
00311   typedef typename _AssocStorageTypes::_KeyStorageType _KeyStorageType;
00312   typedef typename _AssocStorageTypes::_CompareStorageType _CompareStorageType;
00313 #else
00314   typedef _STLP_PRIV _AssocStorageTypes<_Key, _Compare>::_KeyStorageType _KeyStorageType;
00315   typedef _STLP_PRIV _AssocStorageTypes<_Key, _Compare>::_CompareStorageType _CompareStorageType;
00316 #endif
00317   typedef typename _Alloc_traits<_KeyStorageType, _Alloc>::allocator_type _StorageTypeAlloc;
00318   typedef _STLP_PRIV _CastTraits<_KeyStorageType, _Key> cast_traits;
00319 
00320   typedef multiset<_Key, _Compare, _Alloc> _Self;
00321 public:
00322   // typedefs:
00323   typedef _Key     key_type;
00324   typedef _Key     value_type;
00325   typedef _Compare key_compare;
00326   typedef _Compare value_compare;
00327 
00328 protected:
00329   //Specific iterator traits creation
00330   typedef _STLP_PRIV _MultisetTraitsT<value_type> _MultisetTraits;
00331   typedef _STLP_PRIV _Rb_tree<key_type, key_compare,
00332                               value_type, _STLP_PRIV _Identity<value_type>,
00333                               _MultisetTraits, _Alloc> _Priv_Rep_type;
00334 
00335   typedef _STLP_PRIV _MultisetTraitsT<_KeyStorageType> _MultisetStorageTraits;
00336 public:
00337   //dums: need the following public for the __move_traits framework
00338   typedef _STLP_PRIV _Rb_tree<_KeyStorageType, _CompareStorageType,
00339                               _KeyStorageType, _STLP_PRIV _Identity<_KeyStorageType>,
00340                               _MultisetStorageTraits, _StorageTypeAlloc> _Rep_type;
00341 
00342 private:
00343   typedef typename _Rep_type::iterator base_iterator;
00344   typedef typename _Rep_type::const_iterator const_base_iterator;
00345 
00346 public:
00347   typedef typename _Priv_Rep_type::pointer pointer;
00348   typedef typename _Priv_Rep_type::const_pointer const_pointer;
00349   typedef typename _Priv_Rep_type::reference reference;
00350   typedef typename _Priv_Rep_type::const_reference const_reference;
00351   typedef typename _Priv_Rep_type::iterator iterator;
00352   typedef typename _Priv_Rep_type::const_iterator const_iterator;
00353   typedef typename _Priv_Rep_type::reverse_iterator reverse_iterator;
00354   typedef typename _Priv_Rep_type::const_reverse_iterator const_reverse_iterator;
00355   typedef typename _Priv_Rep_type::size_type size_type;
00356   typedef typename _Priv_Rep_type::difference_type difference_type;
00357   typedef typename _Priv_Rep_type::allocator_type allocator_type;
00358 
00359 private:
00360   _Rep_type _M_t;  // red-black tree representing multiset
00361   _STLP_KEY_TYPE_FOR_CONT_EXT(key_type)
00362 
00363 #if defined (_STLP_DEBUG)
00364   static iterator _S_to_value_ite(const_base_iterator __ite)
00365   { return iterator(__ite._Owner(), __ite._M_iterator._M_node); }
00366   static base_iterator _S_to_storage_ite(const_iterator __ite)
00367   { return base_iterator(__ite._Owner(), __ite._M_iterator._M_node); }
00368 #else
00369   static iterator _S_to_value_ite(const_base_iterator __ite)
00370   { return iterator(__ite._M_node); }
00371   static base_iterator _S_to_storage_ite(const_iterator __ite)
00372   { return base_iterator(__ite._M_node); }
00373 #endif
00374 
00375 public:
00376   multiset() : _M_t(_Compare(), _StorageTypeAlloc()) {}
00377   explicit multiset(const _Compare& __comp,
00378                     const allocator_type& __a = allocator_type())
00379     : _M_t(__comp, _STLP_CONVERT_ALLOCATOR(__a, _KeyStorageType)) {}
00380 
00381 #if defined (_STLP_MEMBER_TEMPLATES)
00382   template <class _InputIterator>
00383   multiset(_InputIterator __first, _InputIterator __last)
00384     : _M_t(_Compare(), _StorageTypeAlloc()) {
00385 #  if defined (_STLP_USE_ITERATOR_WRAPPER)
00386     _M_t.insert_equal(_STLP_TYPENAME _STLP_PRIV _IteWrapper<_KeyStorageType, _Key, _InputIterator>::_Ite(__first),
00387                       _STLP_TYPENAME _STLP_PRIV _IteWrapper<_KeyStorageType, _Key, _InputIterator>::_Ite(__last));
00388 #  else
00389     _M_t.insert_equal(__first, __last);
00390 #  endif
00391   }
00392 
00393 #  if defined (_STLP_NEEDS_EXTRA_TEMPLATE_CONSTRUCTORS)
00394   template <class _InputIterator>
00395   multiset(_InputIterator __first, _InputIterator __last,
00396            const _Compare& __comp)
00397     : _M_t(__comp, _StorageTypeAlloc()) {
00398 #    if defined (_STLP_USE_ITERATOR_WRAPPER)
00399     _M_t.insert_equal(_STLP_TYPENAME _STLP_PRIV _IteWrapper<_KeyStorageType, _Key, _InputIterator>::_Ite(__first),
00400                       _STLP_TYPENAME _STLP_PRIV _IteWrapper<_KeyStorageType, _Key, _InputIterator>::_Ite(__last));
00401 #    else
00402     _M_t.insert_equal(__first, __last);
00403 #    endif
00404   }
00405 #  endif
00406   template <class _InputIterator>
00407   multiset(_InputIterator __first, _InputIterator __last,
00408            const _Compare& __comp,
00409            const allocator_type& __a _STLP_ALLOCATOR_TYPE_DFL)
00410     : _M_t(__comp, _STLP_CONVERT_ALLOCATOR(__a, _KeyStorageType)) {
00411 #  if defined (_STLP_USE_ITERATOR_WRAPPER)
00412     _M_t.insert_equal(_STLP_TYPENAME _STLP_PRIV _IteWrapper<_KeyStorageType, _Key, _InputIterator>::_Ite(__first),
00413                       _STLP_TYPENAME _STLP_PRIV _IteWrapper<_KeyStorageType, _Key, _InputIterator>::_Ite(__last));
00414 #  else
00415     _M_t.insert_equal(__first, __last);
00416 #  endif
00417   }
00418 
00419 #else
00420   multiset(const value_type* __first, const value_type* __last)
00421     : _M_t(_Compare(), _StorageTypeAlloc()) {
00422     _M_t.insert_equal(cast_traits::to_storage_type_cptr(__first),
00423                       cast_traits::to_storage_type_cptr(__last));
00424   }
00425 
00426   multiset(const value_type* __first, const value_type* __last,
00427            const _Compare& __comp,
00428            const allocator_type& __a = allocator_type())
00429     : _M_t(__comp, _STLP_CONVERT_ALLOCATOR(__a, _KeyStorageType)) {
00430     _M_t.insert_equal(cast_traits::to_storage_type_cptr(__first),
00431                       cast_traits::to_storage_type_cptr(__last));
00432   }
00433 
00434   multiset(const_iterator __first, const_iterator __last)
00435     : _M_t(_Compare(), _StorageTypeAlloc())
00436   { _M_t.insert_equal(_S_to_storage_ite(__first), _S_to_storage_ite(__last)); }
00437 
00438   multiset(const_iterator __first, const_iterator __last,
00439            const _Compare& __comp,
00440            const allocator_type& __a = allocator_type())
00441     : _M_t(__comp, _STLP_CONVERT_ALLOCATOR(__a, _KeyStorageType))
00442   { _M_t.insert_equal(_S_to_storage_ite(__first), _S_to_storage_ite(__last)); }
00443 #endif /* _STLP_MEMBER_TEMPLATES */
00444 
00445   multiset(const _Self& __x)
00446     : _M_t(__x._M_t) {}
00447 
00448   _Self& operator=(const _Self& __x) {
00449     _M_t = __x._M_t;
00450     return *this;
00451   }
00452 
00453 #if !defined (_STLP_NO_MOVE_SEMANTIC)
00454   multiset(__move_source<_Self> src)
00455     : _M_t(__move_source<_Rep_type>(src.get()._M_t)) {}
00456 #endif
00457 
00458   // accessors:
00459   key_compare key_comp() const { return _M_t.key_comp(); }
00460   value_compare value_comp() const { return _M_t.key_comp(); }
00461   allocator_type get_allocator() const
00462   { return _STLP_CONVERT_ALLOCATOR(_M_t.get_allocator(), value_type); }
00463 
00464   iterator begin() { return _S_to_value_ite(_M_t.begin()); }
00465   iterator end() { return _S_to_value_ite(_M_t.end()); }
00466   const_iterator begin() const { return _S_to_value_ite(_M_t.begin()); }
00467   const_iterator end() const { return _S_to_value_ite(_M_t.end()); }
00468   reverse_iterator rbegin() { return reverse_iterator(end()); }
00469   reverse_iterator rend() { return reverse_iterator(begin()); }
00470   const_reverse_iterator rbegin() const { return const_reverse_iterator(end()); }
00471   const_reverse_iterator rend() const { return const_reverse_iterator(begin()); }
00472   bool empty() const { return _M_t.empty(); }
00473   size_type size() const { return _M_t.size(); }
00474   size_type max_size() const { return _M_t.max_size(); }
00475   void swap(_Self& __x) { _M_t.swap(__x._M_t); }
00476 #if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) && !defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER)
00477   void _M_swap_workaround(_Self& __x) { swap(__x); }
00478 #endif
00479 
00480   // insert/erase
00481   iterator insert(const value_type& __x)
00482   { return _S_to_value_ite(_M_t.insert_equal(cast_traits::to_storage_type_cref(__x))); }
00483   iterator insert(iterator __pos, const value_type& __x) {
00484     return _S_to_value_ite(_M_t.insert_equal(_S_to_storage_ite(__pos),
00485                                              cast_traits::to_storage_type_cref(__x)));
00486   }
00487 
00488 #if defined (_STLP_MEMBER_TEMPLATES)
00489   template <class _InputIterator>
00490   void insert(_InputIterator __first, _InputIterator __last) {
00491 #  if defined (_STLP_USE_ITERATOR_WRAPPER)
00492     _M_t.insert_equal(_STLP_TYPENAME _STLP_PRIV _IteWrapper<_KeyStorageType, _Key, _InputIterator>::_Ite(__first),
00493                       _STLP_TYPENAME _STLP_PRIV _IteWrapper<_KeyStorageType, _Key, _InputIterator>::_Ite(__last));
00494 #  else
00495     _M_t.insert_equal(__first, __last);
00496 #  endif
00497   }
00498 #else
00499   void insert(const value_type* __first, const value_type* __last) {
00500     _M_t.insert_equal(cast_traits::to_storage_type_cptr(__first),
00501                       cast_traits::to_storage_type_cptr(__last));
00502   }
00503   void insert(const_iterator __first, const_iterator __last)
00504   { _M_t.insert_equal(_S_to_storage_ite(__first), _S_to_storage_ite(__last)); }
00505 #endif /* _STLP_MEMBER_TEMPLATES */
00506 
00507   void erase(iterator __pos)
00508   { _M_t.erase(_S_to_storage_ite(__pos)); }
00509   size_type erase(const key_type& __x)
00510   { return _M_t.erase(cast_traits::to_storage_type_cref(__x)); }
00511   void erase(iterator __first, iterator __last)
00512   { _M_t.erase(_S_to_storage_ite(__first), _S_to_storage_ite(__last)); }
00513   void clear() { _M_t.clear(); }
00514 
00515   // multiset operations:
00516 
00517   _STLP_TEMPLATE_FOR_CONT_EXT
00518   iterator find(const _KT& __x)
00519   { return _S_to_value_ite(_M_t.find(cast_traits::to_storage_type_crefT(__x))); }
00520   _STLP_TEMPLATE_FOR_CONT_EXT
00521   const_iterator find(const _KT& __x) const
00522   { return _S_to_value_ite(_M_t.find(cast_traits::to_storage_type_crefT(__x))); }
00523   _STLP_TEMPLATE_FOR_CONT_EXT
00524   size_type count(const _KT& __x) const
00525   { return _M_t.count(cast_traits::to_storage_type_crefT(__x)); }
00526   _STLP_TEMPLATE_FOR_CONT_EXT
00527   iterator lower_bound(const _KT& __x)
00528   { return _S_to_value_ite(_M_t.lower_bound(cast_traits::to_storage_type_crefT(__x))); }
00529   _STLP_TEMPLATE_FOR_CONT_EXT
00530   const_iterator lower_bound(const _KT& __x) const
00531   { return _S_to_value_ite(_M_t.lower_bound(cast_traits::to_storage_type_crefT(__x))); }
00532   _STLP_TEMPLATE_FOR_CONT_EXT
00533   iterator upper_bound(const _KT& __x)
00534   { return _S_to_value_ite(_M_t.upper_bound(cast_traits::to_storage_type_crefT(__x))); }
00535   _STLP_TEMPLATE_FOR_CONT_EXT
00536   const_iterator upper_bound(const _KT& __x) const
00537   { return _S_to_value_ite(_M_t.upper_bound(cast_traits::to_storage_type_crefT(__x))); }
00538   _STLP_TEMPLATE_FOR_CONT_EXT
00539   pair<iterator, iterator> equal_range(const _KT& __x) {
00540     pair<base_iterator, base_iterator> __ret;
00541     __ret = _M_t.equal_range(cast_traits::to_storage_type_crefT(__x));
00542     return pair<iterator, iterator>(_S_to_value_ite(__ret.first),
00543                                     _S_to_value_ite(__ret.second));
00544   }
00545   _STLP_TEMPLATE_FOR_CONT_EXT
00546   pair<const_iterator, const_iterator> equal_range(const _KT& __x) const {
00547     pair<const_base_iterator, const_base_iterator> __ret;
00548     __ret = _M_t.equal_range(cast_traits::to_storage_type_crefT(__x));
00549     return pair<const_iterator, const_iterator>(_S_to_value_ite(__ret.first),
00550                                                 _S_to_value_ite(__ret.second));
00551   }
00552 };
00553 
00554 #if defined (__BORLANDC__) || defined (__DMC__)
00555 #  undef typename
00556 #endif
00557 
00558 _STLP_END_NAMESPACE
00559 
00560 #endif /* _STLP_PTR_SPECIALIZED_SET_H */
00561 
00562 // Local Variables:
00563 // mode:C++
00564 // End:

Generated on Sun May 27 2012 04:29:27 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.