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