19720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/*
29720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 2005
39720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Francois Dumont
49720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
59720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * This material is provided "as is", with absolutely no warranty expressed
69720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * or implied. Any use is at your own risk.
79720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
89720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to use or copy this software for any purpose is hereby granted
99720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * without fee, provided the above notices are retained on all copies.
109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to modify the code and to distribute modified code is granted,
119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * provided the above notices are retained, and a notice that the code was
129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * modified is included with the above copyright notice.
139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */
149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* NOTE: This is an internal header file, included by other STL headers.
169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *   You should not attempt to use it directly.
179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */
189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_PTR_SPECIALIZED_SET_H
209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_PTR_SPECIALIZED_SET_H
219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_POINTERS_SPEC_TOOLS_H
239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  include <stl/pointers/_tools.h>
249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE
279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
28e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (__BORLANDC__) || defined (__DMC__)
29e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  define typename
30e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
31e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//Specific iterator traits creation
339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_CREATE_ITERATOR_TRAITS(SetTraitsT, Const_traits)
349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_USE_TEMPLATE_EXPORT) && !defined (_STLP_USE_MSVC6_MEM_T_BUG_WORKAROUND)
369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_EXPORT template struct _STLP_CLASS_DECLSPEC less<void*>;
379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_PRIV_NAMESPACE
399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktypedef _Rb_tree_node<void*> _Node;
419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_EXPORT_TEMPLATE_CLASS _STLP_alloc_proxy<_Rb_tree_node_base, _Node,  allocator<_Node> >;
429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_EXPORT_TEMPLATE_CLASS _Rb_tree_base<void*, allocator<void*> >;
439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (_STLP_DEBUG)
449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_EXPORT_TEMPLATE_CLASS _DbgCompare<void*, less<void*> >;
459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _Rb_tree _STLP_NON_DBG_NAME(Rb_tree)
469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_EXPORT_TEMPLATE_CLASS _Rb_tree<void*, _DbgCompare<void*, less<void*> >, void*, _Identity<void*>,
479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                     _SetTraitsT<void*>, allocator<void*> >;
489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    undef _Rb_tree
499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_EXPORT_TEMPLATE_CLASS _Rb_tree<void*, less<void*>, void*, _Identity<void*>,
519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                     _SetTraitsT<void*>, allocator<void*> >;
529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE
539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Key, _STLP_DFL_TMPL_PARAM(_Compare, less<_Key>),
56e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                      _STLP_DFL_TMPL_PARAM(_Alloc, allocator<_Key>) >
579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass set
589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND)
599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          : public __stlport_class<set<_Key, _Compare, _Alloc> >
609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{
62e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (__BORLANDC__)
639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _STLP_PRIV _AssocStorageTypes<_Key, _Compare> _AssocStorageTypes;
649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _AssocStorageTypes::_KeyStorageType _KeyStorageType;
659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _AssocStorageTypes::_CompareStorageType _CompareStorageType;
66e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#else
67e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  typedef _STLP_PRIV _AssocStorageTypes<_Key, _Compare>::_KeyStorageType _KeyStorageType;
68e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  typedef _STLP_PRIV _AssocStorageTypes<_Key, _Compare>::_CompareStorageType _CompareStorageType;
69e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Alloc_traits<_KeyStorageType, _Alloc>::allocator_type _StorageTypeAlloc;
719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _STLP_PRIV _CastTraits<_KeyStorageType, _Key> cast_traits;
729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef set<_Key, _Compare, _Alloc> _Self;
749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Key     key_type;
769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Key     value_type;
779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Compare key_compare;
789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Compare value_compare;
799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  //Specific iterator traits creation
829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _STLP_PRIV _SetTraitsT<value_type> _SetTraits;
839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _STLP_PRIV _Rb_tree<key_type, key_compare,
849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                              value_type, _STLP_PRIV _Identity<value_type>,
859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                              _SetTraits, _Alloc> _Priv_Rep_type;
869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _STLP_PRIV _SetTraitsT<_KeyStorageType> _SetStorageTraits;
889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  //dums: need the following public for the __move_traits framework
919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _STLP_PRIV _Rb_tree<_KeyStorageType, _CompareStorageType,
929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                              _KeyStorageType, _STLP_PRIV _Identity<_KeyStorageType>,
939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                              _SetStorageTraits, _StorageTypeAlloc> _Rep_type;
949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Rep_type::iterator base_iterator;
979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Rep_type::const_iterator const_base_iterator;
989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
1009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Priv_Rep_type::pointer pointer;
1019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Priv_Rep_type::const_pointer const_pointer;
1029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Priv_Rep_type::reference reference;
1039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Priv_Rep_type::const_reference const_reference;
1049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Priv_Rep_type::iterator iterator;
1059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Priv_Rep_type::const_iterator const_iterator;
1069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Priv_Rep_type::reverse_iterator reverse_iterator;
1079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Priv_Rep_type::const_reverse_iterator const_reverse_iterator;
1089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Priv_Rep_type::size_type size_type;
1099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Priv_Rep_type::difference_type difference_type;
1109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Priv_Rep_type::allocator_type allocator_type;
1119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
1139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Rep_type _M_t;  // red-black tree representing set
1149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_KEY_TYPE_FOR_CONT_EXT(key_type)
1159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_DEBUG)
1179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static iterator _S_to_value_ite(const_base_iterator __ite)
1189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return iterator(__ite._Owner(), __ite._M_iterator._M_node); }
1199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static base_iterator _S_to_storage_ite(const_iterator __ite)
1209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return base_iterator(__ite._Owner(), __ite._M_iterator._M_node); }
1219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
1229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static iterator _S_to_value_ite(const_base_iterator __ite)
1239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return iterator(__ite._M_node); }
1249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static base_iterator _S_to_storage_ite(const_iterator __ite)
1259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return base_iterator(__ite._M_node); }
1269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
1279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
1299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  set() : _M_t(_CompareStorageType(), _StorageTypeAlloc()) {}
1309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit set(const _Compare& __comp,
1319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block               const allocator_type& __a = allocator_type())
1329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    : _M_t(__comp, _STLP_CONVERT_ALLOCATOR(__a, _KeyStorageType)) {}
1339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_MEMBER_TEMPLATES)
1359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template <class _InputIterator>
1369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  set(_InputIterator __first, _InputIterator __last)
1379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    : _M_t(_Compare(), _StorageTypeAlloc()) {
1389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (_STLP_USE_ITERATOR_WRAPPER)
139e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _M_t.insert_unique(_STLP_TYPENAME _STLP_PRIV _IteWrapper<_KeyStorageType, _Key, _InputIterator>::_Ite(__first),
140e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                       _STLP_TYPENAME _STLP_PRIV _IteWrapper<_KeyStorageType, _Key, _InputIterator>::_Ite(__last));
1419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  else
1429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_t.insert_unique(__first, __last);
1439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
1449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
1459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (_STLP_NEEDS_EXTRA_TEMPLATE_CONSTRUCTORS)
1479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template <class _InputIterator>
1489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  set(_InputIterator __first, _InputIterator __last, const _Compare& __comp)
1499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    : _M_t(__comp, _StorageTypeAlloc()) {
1509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    if defined (_STLP_USE_ITERATOR_WRAPPER)
151e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _M_t.insert_unique(_STLP_TYPENAME _STLP_PRIV _IteWrapper<_KeyStorageType, _Key, _InputIterator>::_Ite(__first),
152e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                       _STLP_TYPENAME _STLP_PRIV _IteWrapper<_KeyStorageType, _Key, _InputIterator>::_Ite(__last));
1539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    else
1549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_t.insert_unique(__first, __last);
1559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    endif
1569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
1579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
1589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template <class _InputIterator>
1599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  set(_InputIterator __first, _InputIterator __last, const _Compare& __comp,
1609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      const allocator_type& __a _STLP_ALLOCATOR_TYPE_DFL)
1619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    : _M_t(__comp, _STLP_CONVERT_ALLOCATOR(__a, _KeyStorageType)) {
1629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (_STLP_USE_ITERATOR_WRAPPER)
163e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _M_t.insert_unique(_STLP_TYPENAME _STLP_PRIV _IteWrapper<_KeyStorageType, _Key, _InputIterator>::_Ite(__first),
164e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                       _STLP_TYPENAME _STLP_PRIV _IteWrapper<_KeyStorageType, _Key, _InputIterator>::_Ite(__last));
1659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  else
1669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_t.insert_unique(__first, __last);
1679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
1689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
1699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
1709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  set(const value_type* __first, const value_type* __last)
1719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    : _M_t(_Compare(), _StorageTypeAlloc()) {
1729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_t.insert_unique(cast_traits::to_storage_type_cptr(__first),
1739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                       cast_traits::to_storage_type_cptr(__last));
1749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
1759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  set(const value_type* __first, const value_type* __last,
1779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      const _Compare& __comp, const allocator_type& __a = allocator_type())
1789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    : _M_t(__comp, _STLP_CONVERT_ALLOCATOR(__a, _KeyStorageType)) {
1799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_t.insert_unique(cast_traits::to_storage_type_cptr(__first),
1809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                       cast_traits::to_storage_type_cptr(__last));
1819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
1829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  set(const_iterator __first, const_iterator __last)
1849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    : _M_t(_Compare(), _StorageTypeAlloc())
1859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { _M_t.insert_unique(_S_to_storage_ite(__first), _S_to_storage_ite(__last)); }
1869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  set(const_iterator __first, const_iterator __last,
1889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      const _Compare& __comp, const allocator_type& __a = allocator_type())
1899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    : _M_t(__comp, _STLP_CONVERT_ALLOCATOR(__a, _KeyStorageType))
1909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { _M_t.insert_unique(_S_to_storage_ite(__first), _S_to_storage_ite(__last)); }
1919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_MEMBER_TEMPLATES */
1929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  set(const _Self& __x) : _M_t(__x._M_t) {}
1949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
195e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_NO_MOVE_SEMANTIC)
1969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  set(__move_source<_Self> src)
1979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    : _M_t(__move_source<_Rep_type>(src.get()._M_t)) {}
198e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
1999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& operator=(const _Self& __x) {
2019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_t = __x._M_t;
2029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
2039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
2049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // accessors:
2069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  key_compare key_comp() const { return _M_t.key_comp(); }
2079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  value_compare value_comp() const { return _M_t.key_comp(); }
2089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  allocator_type get_allocator() const
2099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return _STLP_CONVERT_ALLOCATOR(_M_t.get_allocator(), value_type); }
2109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  iterator begin() { return _S_to_value_ite(_M_t.begin()); }
2129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  iterator end() { return _S_to_value_ite(_M_t.end()); }
2139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  const_iterator begin() const { return _S_to_value_ite(_M_t.begin()); }
2149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  const_iterator end() const { return _S_to_value_ite(_M_t.end()); }
2159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  reverse_iterator rbegin() { return reverse_iterator(end()); }
2169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  reverse_iterator rend() { return reverse_iterator(begin()); }
2179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  const_reverse_iterator rbegin() const { return const_reverse_iterator(end()); }
2189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  const_reverse_iterator rend() const { return const_reverse_iterator(begin()); }
2199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  bool empty() const { return _M_t.empty(); }
2209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  size_type size() const { return _M_t.size(); }
2219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  size_type max_size() const { return _M_t.max_size(); }
2229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void swap(_Self& __x) { _M_t.swap(__x._M_t); }
223e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) && !defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER)
224e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  void _M_swap_workaround(_Self& __x) { swap(__x); }
225e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
2269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // insert/erase
2289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  pair<iterator,bool> insert(const value_type& __x) {
2299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    pair<base_iterator, bool> ret = _M_t.insert_unique(cast_traits::to_storage_type_cref(__x));
2309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return pair<iterator, bool>(_S_to_value_ite(ret.first), ret.second);
2319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
2329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  iterator insert(iterator __pos, const value_type& __x)
2339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return _S_to_value_ite(_M_t.insert_unique(_S_to_storage_ite(__pos), cast_traits::to_storage_type_cref(__x))); }
2349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_MEMBER_TEMPLATES)
2369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template <class _InputIterator>
2379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void insert(_InputIterator __first, _InputIterator __last) {
2389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (_STLP_USE_ITERATOR_WRAPPER)
239e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _M_t.insert_unique(_STLP_TYPENAME _STLP_PRIV _IteWrapper<_KeyStorageType, _Key, _InputIterator>::_Ite(__first),
240e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                       _STLP_TYPENAME _STLP_PRIV _IteWrapper<_KeyStorageType, _Key, _InputIterator>::_Ite(__last));
2419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  else
2429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_t.insert_unique(__first, __last);
2439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
2449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
2459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
2469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void insert(const_iterator __first, const_iterator __last)
2479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { _M_t.insert_unique(_S_to_storage_ite(__first), _S_to_storage_ite(__last)); }
2489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void insert(const value_type* __first, const value_type* __last) {
2499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_t.insert_unique(cast_traits::to_storage_type_cptr(__first),
2509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                       cast_traits::to_storage_type_cptr(__last));
2519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
2529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
2539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void erase(iterator __pos)
2549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { _M_t.erase(_S_to_storage_ite(__pos)); }
2559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  size_type erase(const key_type& __x)
2569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return _M_t.erase_unique(cast_traits::to_storage_type_cref(__x)); }
2579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void erase(iterator __first, iterator __last)
2589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { _M_t.erase(_S_to_storage_ite(__first), _S_to_storage_ite(__last)); }
2599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void clear() { _M_t.clear(); }
2609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // set operations:
2629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_TEMPLATE_FOR_CONT_EXT
2639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  const_iterator find(const _KT& __x) const
2649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return _S_to_value_ite(_M_t.find(cast_traits::to_storage_type_crefT(__x))); }
2659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_TEMPLATE_FOR_CONT_EXT
2669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  iterator find(const _KT& __x)
2679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return _S_to_value_ite(_M_t.find(cast_traits::to_storage_type_crefT(__x))); }
2689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_TEMPLATE_FOR_CONT_EXT
2699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  size_type count(const _KT& __x) const
2709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return _M_t.find(cast_traits::to_storage_type_crefT(__x)) == _M_t.end() ? 0 : 1; }
2719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_TEMPLATE_FOR_CONT_EXT
2729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  iterator lower_bound(const _KT& __x)
2739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return _S_to_value_ite(_M_t.lower_bound(cast_traits::to_storage_type_crefT(__x))); }
2749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_TEMPLATE_FOR_CONT_EXT
2759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  const_iterator lower_bound(const _KT& __x) const
2769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return _S_to_value_ite(_M_t.lower_bound(cast_traits::to_storage_type_crefT(__x))); }
2779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_TEMPLATE_FOR_CONT_EXT
2789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  iterator upper_bound(const _KT& __x)
2799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return _S_to_value_ite(_M_t.upper_bound(cast_traits::to_storage_type_crefT(__x))); }
2809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_TEMPLATE_FOR_CONT_EXT
2819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  const_iterator upper_bound(const _KT& __x) const
2829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return _S_to_value_ite(_M_t.upper_bound(cast_traits::to_storage_type_crefT(__x))); }
2839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_TEMPLATE_FOR_CONT_EXT
2849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  pair<iterator, iterator> equal_range(const _KT& __x) {
2859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    pair<base_iterator, base_iterator> __ret;
2869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __ret = _M_t.equal_range(cast_traits::to_storage_type_crefT(__x));
2879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return pair<iterator, iterator>(_S_to_value_ite(__ret.first),
2889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                    _S_to_value_ite(__ret.second));
2899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
2909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_TEMPLATE_FOR_CONT_EXT
2919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  pair<const_iterator, const_iterator> equal_range(const _KT& __x) const {
2929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    pair<const_base_iterator, const_base_iterator> __ret;
2939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __ret = _M_t.equal_range_unique(cast_traits::to_storage_type_crefT(__x));
2949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return pair<const_iterator, const_iterator>(_S_to_value_ite(__ret.first),
2959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                                _S_to_value_ite(__ret.second));
2969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
2979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
2989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//Specific iterator traits creation
3009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_CREATE_ITERATOR_TRAITS(MultisetTraitsT, Const_traits)
3019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Key, _STLP_DFL_TMPL_PARAM(_Compare, less<_Key>),
303e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                     _STLP_DFL_TMPL_PARAM(_Alloc, allocator<_Key>) >
3049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass multiset
3059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND)
3069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block               : public __stlport_class<multiset<_Key, _Compare, _Alloc> >
3079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
3089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{
309e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (__BORLANDC__)
3109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _STLP_PRIV _AssocStorageTypes<_Key, _Compare> _AssocStorageTypes;
3119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _AssocStorageTypes::_KeyStorageType _KeyStorageType;
3129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _AssocStorageTypes::_CompareStorageType _CompareStorageType;
313e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#else
314e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  typedef _STLP_PRIV _AssocStorageTypes<_Key, _Compare>::_KeyStorageType _KeyStorageType;
315e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  typedef _STLP_PRIV _AssocStorageTypes<_Key, _Compare>::_CompareStorageType _CompareStorageType;
316e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
3179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Alloc_traits<_KeyStorageType, _Alloc>::allocator_type _StorageTypeAlloc;
3189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _STLP_PRIV _CastTraits<_KeyStorageType, _Key> cast_traits;
3199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef multiset<_Key, _Compare, _Alloc> _Self;
3219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
3229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // typedefs:
3239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Key     key_type;
3249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Key     value_type;
3259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Compare key_compare;
3269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Compare value_compare;
3279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
3299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  //Specific iterator traits creation
3309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _STLP_PRIV _MultisetTraitsT<value_type> _MultisetTraits;
3319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _STLP_PRIV _Rb_tree<key_type, key_compare,
3329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                              value_type, _STLP_PRIV _Identity<value_type>,
3339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                              _MultisetTraits, _Alloc> _Priv_Rep_type;
3349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _STLP_PRIV _MultisetTraitsT<_KeyStorageType> _MultisetStorageTraits;
3369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
3379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  //dums: need the following public for the __move_traits framework
3389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _STLP_PRIV _Rb_tree<_KeyStorageType, _CompareStorageType,
3399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                              _KeyStorageType, _STLP_PRIV _Identity<_KeyStorageType>,
3409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                              _MultisetStorageTraits, _StorageTypeAlloc> _Rep_type;
3419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
3439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Rep_type::iterator base_iterator;
3449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Rep_type::const_iterator const_base_iterator;
3459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
3479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Priv_Rep_type::pointer pointer;
3489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Priv_Rep_type::const_pointer const_pointer;
3499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Priv_Rep_type::reference reference;
3509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Priv_Rep_type::const_reference const_reference;
3519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Priv_Rep_type::iterator iterator;
3529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Priv_Rep_type::const_iterator const_iterator;
3539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Priv_Rep_type::reverse_iterator reverse_iterator;
3549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Priv_Rep_type::const_reverse_iterator const_reverse_iterator;
3559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Priv_Rep_type::size_type size_type;
3569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Priv_Rep_type::difference_type difference_type;
3579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Priv_Rep_type::allocator_type allocator_type;
3589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
3609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Rep_type _M_t;  // red-black tree representing multiset
3619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_KEY_TYPE_FOR_CONT_EXT(key_type)
3629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_DEBUG)
3649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static iterator _S_to_value_ite(const_base_iterator __ite)
3659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return iterator(__ite._Owner(), __ite._M_iterator._M_node); }
3669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static base_iterator _S_to_storage_ite(const_iterator __ite)
3679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return base_iterator(__ite._Owner(), __ite._M_iterator._M_node); }
3689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
3699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static iterator _S_to_value_ite(const_base_iterator __ite)
3709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return iterator(__ite._M_node); }
3719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static base_iterator _S_to_storage_ite(const_iterator __ite)
3729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return base_iterator(__ite._M_node); }
3739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
3749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
3769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  multiset() : _M_t(_Compare(), _StorageTypeAlloc()) {}
3779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit multiset(const _Compare& __comp,
3789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                    const allocator_type& __a = allocator_type())
3799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    : _M_t(__comp, _STLP_CONVERT_ALLOCATOR(__a, _KeyStorageType)) {}
3809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_MEMBER_TEMPLATES)
3829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template <class _InputIterator>
3839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  multiset(_InputIterator __first, _InputIterator __last)
3849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    : _M_t(_Compare(), _StorageTypeAlloc()) {
3859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (_STLP_USE_ITERATOR_WRAPPER)
386e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _M_t.insert_equal(_STLP_TYPENAME _STLP_PRIV _IteWrapper<_KeyStorageType, _Key, _InputIterator>::_Ite(__first),
387e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                      _STLP_TYPENAME _STLP_PRIV _IteWrapper<_KeyStorageType, _Key, _InputIterator>::_Ite(__last));
3889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  else
3899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_t.insert_equal(__first, __last);
3909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
3919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
3929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (_STLP_NEEDS_EXTRA_TEMPLATE_CONSTRUCTORS)
3949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template <class _InputIterator>
3959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  multiset(_InputIterator __first, _InputIterator __last,
3969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block           const _Compare& __comp)
3979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    : _M_t(__comp, _StorageTypeAlloc()) {
3989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    if defined (_STLP_USE_ITERATOR_WRAPPER)
399e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _M_t.insert_equal(_STLP_TYPENAME _STLP_PRIV _IteWrapper<_KeyStorageType, _Key, _InputIterator>::_Ite(__first),
400e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                      _STLP_TYPENAME _STLP_PRIV _IteWrapper<_KeyStorageType, _Key, _InputIterator>::_Ite(__last));
4019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    else
4029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_t.insert_equal(__first, __last);
4039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    endif
4049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
4059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
4069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template <class _InputIterator>
4079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  multiset(_InputIterator __first, _InputIterator __last,
4089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block           const _Compare& __comp,
4099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block           const allocator_type& __a _STLP_ALLOCATOR_TYPE_DFL)
4109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    : _M_t(__comp, _STLP_CONVERT_ALLOCATOR(__a, _KeyStorageType)) {
4119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (_STLP_USE_ITERATOR_WRAPPER)
412e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _M_t.insert_equal(_STLP_TYPENAME _STLP_PRIV _IteWrapper<_KeyStorageType, _Key, _InputIterator>::_Ite(__first),
413e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                      _STLP_TYPENAME _STLP_PRIV _IteWrapper<_KeyStorageType, _Key, _InputIterator>::_Ite(__last));
4149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  else
4159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_t.insert_equal(__first, __last);
4169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
4179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
4189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
4209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  multiset(const value_type* __first, const value_type* __last)
4219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    : _M_t(_Compare(), _StorageTypeAlloc()) {
4229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_t.insert_equal(cast_traits::to_storage_type_cptr(__first),
4239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                      cast_traits::to_storage_type_cptr(__last));
4249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
4259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  multiset(const value_type* __first, const value_type* __last,
4279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block           const _Compare& __comp,
4289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block           const allocator_type& __a = allocator_type())
4299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    : _M_t(__comp, _STLP_CONVERT_ALLOCATOR(__a, _KeyStorageType)) {
4309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_t.insert_equal(cast_traits::to_storage_type_cptr(__first),
4319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                      cast_traits::to_storage_type_cptr(__last));
4329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
4339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  multiset(const_iterator __first, const_iterator __last)
4359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    : _M_t(_Compare(), _StorageTypeAlloc())
4369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { _M_t.insert_equal(_S_to_storage_ite(__first), _S_to_storage_ite(__last)); }
4379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  multiset(const_iterator __first, const_iterator __last,
4399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block           const _Compare& __comp,
4409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block           const allocator_type& __a = allocator_type())
4419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    : _M_t(__comp, _STLP_CONVERT_ALLOCATOR(__a, _KeyStorageType))
4429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { _M_t.insert_equal(_S_to_storage_ite(__first), _S_to_storage_ite(__last)); }
4439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_MEMBER_TEMPLATES */
4449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  multiset(const _Self& __x)
4469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    : _M_t(__x._M_t) {}
4479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& operator=(const _Self& __x) {
4499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_t = __x._M_t;
4509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
4519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
4529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
453e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_NO_MOVE_SEMANTIC)
4549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  multiset(__move_source<_Self> src)
4559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    : _M_t(__move_source<_Rep_type>(src.get()._M_t)) {}
456e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
4579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // accessors:
4599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  key_compare key_comp() const { return _M_t.key_comp(); }
4609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  value_compare value_comp() const { return _M_t.key_comp(); }
4619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  allocator_type get_allocator() const
4629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return _STLP_CONVERT_ALLOCATOR(_M_t.get_allocator(), value_type); }
4639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  iterator begin() { return _S_to_value_ite(_M_t.begin()); }
4659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  iterator end() { return _S_to_value_ite(_M_t.end()); }
4669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  const_iterator begin() const { return _S_to_value_ite(_M_t.begin()); }
4679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  const_iterator end() const { return _S_to_value_ite(_M_t.end()); }
4689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  reverse_iterator rbegin() { return reverse_iterator(end()); }
4699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  reverse_iterator rend() { return reverse_iterator(begin()); }
4709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  const_reverse_iterator rbegin() const { return const_reverse_iterator(end()); }
4719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  const_reverse_iterator rend() const { return const_reverse_iterator(begin()); }
4729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  bool empty() const { return _M_t.empty(); }
4739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  size_type size() const { return _M_t.size(); }
4749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  size_type max_size() const { return _M_t.max_size(); }
4759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void swap(_Self& __x) { _M_t.swap(__x._M_t); }
476e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) && !defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER)
477e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  void _M_swap_workaround(_Self& __x) { swap(__x); }
478e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
4799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // insert/erase
4819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  iterator insert(const value_type& __x)
4829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return _S_to_value_ite(_M_t.insert_equal(cast_traits::to_storage_type_cref(__x))); }
4839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  iterator insert(iterator __pos, const value_type& __x) {
4849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return _S_to_value_ite(_M_t.insert_equal(_S_to_storage_ite(__pos),
4859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                             cast_traits::to_storage_type_cref(__x)));
4869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
4879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_MEMBER_TEMPLATES)
4899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template <class _InputIterator>
4909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void insert(_InputIterator __first, _InputIterator __last) {
4919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (_STLP_USE_ITERATOR_WRAPPER)
492e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _M_t.insert_equal(_STLP_TYPENAME _STLP_PRIV _IteWrapper<_KeyStorageType, _Key, _InputIterator>::_Ite(__first),
493e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                      _STLP_TYPENAME _STLP_PRIV _IteWrapper<_KeyStorageType, _Key, _InputIterator>::_Ite(__last));
4949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  else
4959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_t.insert_equal(__first, __last);
4969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
4979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
4989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
4999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void insert(const value_type* __first, const value_type* __last) {
5009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_t.insert_equal(cast_traits::to_storage_type_cptr(__first),
5019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                      cast_traits::to_storage_type_cptr(__last));
5029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
5039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void insert(const_iterator __first, const_iterator __last)
5049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { _M_t.insert_equal(_S_to_storage_ite(__first), _S_to_storage_ite(__last)); }
5059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_MEMBER_TEMPLATES */
5069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void erase(iterator __pos)
5089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { _M_t.erase(_S_to_storage_ite(__pos)); }
5099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  size_type erase(const key_type& __x)
5109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return _M_t.erase(cast_traits::to_storage_type_cref(__x)); }
5119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void erase(iterator __first, iterator __last)
5129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { _M_t.erase(_S_to_storage_ite(__first), _S_to_storage_ite(__last)); }
5139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void clear() { _M_t.clear(); }
5149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // multiset operations:
5169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_TEMPLATE_FOR_CONT_EXT
5189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  iterator find(const _KT& __x)
5199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return _S_to_value_ite(_M_t.find(cast_traits::to_storage_type_crefT(__x))); }
5209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_TEMPLATE_FOR_CONT_EXT
5219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  const_iterator find(const _KT& __x) const
5229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return _S_to_value_ite(_M_t.find(cast_traits::to_storage_type_crefT(__x))); }
5239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_TEMPLATE_FOR_CONT_EXT
5249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  size_type count(const _KT& __x) const
5259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return _M_t.count(cast_traits::to_storage_type_crefT(__x)); }
5269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_TEMPLATE_FOR_CONT_EXT
5279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  iterator lower_bound(const _KT& __x)
5289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return _S_to_value_ite(_M_t.lower_bound(cast_traits::to_storage_type_crefT(__x))); }
5299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_TEMPLATE_FOR_CONT_EXT
5309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  const_iterator lower_bound(const _KT& __x) const
5319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return _S_to_value_ite(_M_t.lower_bound(cast_traits::to_storage_type_crefT(__x))); }
5329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_TEMPLATE_FOR_CONT_EXT
5339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  iterator upper_bound(const _KT& __x)
5349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return _S_to_value_ite(_M_t.upper_bound(cast_traits::to_storage_type_crefT(__x))); }
5359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_TEMPLATE_FOR_CONT_EXT
5369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  const_iterator upper_bound(const _KT& __x) const
5379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return _S_to_value_ite(_M_t.upper_bound(cast_traits::to_storage_type_crefT(__x))); }
5389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_TEMPLATE_FOR_CONT_EXT
5399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  pair<iterator, iterator> equal_range(const _KT& __x) {
5409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    pair<base_iterator, base_iterator> __ret;
5419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __ret = _M_t.equal_range(cast_traits::to_storage_type_crefT(__x));
5429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return pair<iterator, iterator>(_S_to_value_ite(__ret.first),
5439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                    _S_to_value_ite(__ret.second));
5449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
5459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_TEMPLATE_FOR_CONT_EXT
5469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  pair<const_iterator, const_iterator> equal_range(const _KT& __x) const {
5479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    pair<const_base_iterator, const_base_iterator> __ret;
5489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __ret = _M_t.equal_range(cast_traits::to_storage_type_crefT(__x));
5499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return pair<const_iterator, const_iterator>(_S_to_value_ite(__ret.first),
5509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                                _S_to_value_ite(__ret.second));
5519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
5529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
5539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
554e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (__BORLANDC__) || defined (__DMC__)
555e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  undef typename
556e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
557e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
5589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE
5599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_PTR_SPECIALIZED_SET_H */
5619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Local Variables:
5639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// mode:C++
5649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// End:
565