29 #ifndef _GLIBCXX_PROFILE_SET_H 
   30 #define _GLIBCXX_PROFILE_SET_H 1 
   34 namespace std _GLIBCXX_VISIBILITY(default) 
 
   39   template<
typename _Key, 
typename _Compare = std::less<_Key>,
 
   40        typename _Allocator = std::allocator<_Key> >
 
   44       typedef _GLIBCXX_STD_C::set<_Key, _Compare, _Allocator> 
_Base;
 
   48       typedef _Key                  key_type;
 
   49       typedef _Key                  value_type;
 
   50       typedef _Compare                  key_compare;
 
   51       typedef _Compare                  value_compare;
 
   52       typedef _Allocator                allocator_type;
 
   53       typedef typename _Base::reference             reference;
 
   54       typedef typename _Base::const_reference       const_reference;
 
   56       typedef typename _Base::iterator               iterator;
 
   57       typedef typename _Base::const_iterator         const_iterator;
 
   58       typedef typename _Base::reverse_iterator       reverse_iterator;
 
   59       typedef typename _Base::const_reverse_iterator const_reverse_iterator;
 
   61       typedef typename _Base::size_type             size_type;
 
   62       typedef typename _Base::difference_type       difference_type;
 
   63       typedef typename _Base::pointer               pointer;
 
   64       typedef typename _Base::const_pointer         const_pointer;
 
   67       explicit set(
const _Compare& __comp = _Compare(),
 
   68            const _Allocator& __a = _Allocator())
 
   69       : 
_Base(__comp, __a) { }
 
   71       template<
typename _InputIterator>
 
   72         set(_InputIterator __first, _InputIterator __last,
 
   73         const _Compare& __comp = _Compare(),
 
   74         const _Allocator& __a = _Allocator())
 
   75     : 
_Base(__first, __last, __comp, __a) { }
 
   83 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 
   85       : 
_Base(std::move(__x))
 
   89       const _Compare& __comp = _Compare(),
 
   90       const allocator_type& __a = allocator_type())
 
   91       : 
_Base(__l, __comp, __a) { }
 
   97       operator=(
const set& __x)
 
   99     *
static_cast<_Base*
>(
this) = __x;
 
  103 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 
  123       using _Base::get_allocator;
 
  128       { 
return iterator(_Base::begin()); }
 
  132       { 
return const_iterator(_Base::begin()); }
 
  136       { 
return iterator(_Base::end()); }
 
  140       { 
return const_iterator(_Base::end()); }
 
  144       { 
return reverse_iterator(end()); }
 
  146       const_reverse_iterator
 
  148       { 
return const_reverse_iterator(end()); }
 
  152       { 
return reverse_iterator(begin()); }
 
  154       const_reverse_iterator
 
  156       { 
return const_reverse_iterator(begin()); }
 
  158 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 
  161       { 
return const_iterator(_Base::begin()); }
 
  165       { 
return const_iterator(_Base::end()); }
 
  167       const_reverse_iterator
 
  169       { 
return const_reverse_iterator(end()); }
 
  171       const_reverse_iterator
 
  173       { 
return const_reverse_iterator(begin()); }
 
  179       using _Base::max_size;
 
  183       insert(
const value_type& __x)
 
  185     typedef typename _Base::iterator _Base_iterator;
 
  191 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 
  193       insert(value_type&& __x)
 
  195     typedef typename _Base::iterator _Base_iterator;
 
  197       = _Base::insert(std::move(__x));
 
  204       insert(const_iterator __position, 
const value_type& __x)
 
  205       { 
return iterator(_Base::insert(__position, __x)); }
 
  207 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 
  209       insert(const_iterator __position, value_type&& __x)
 
  210       { 
return iterator(_Base::insert(__position, std::move(__x))); }
 
  213       template <
typename _InputIterator>
 
  215         insert(_InputIterator __first, _InputIterator __last)
 
  216         { _Base::insert(__first, __last); }
 
  218 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 
  221       { _Base::insert(__l); }
 
  224 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 
  226       erase(const_iterator __position)
 
  227       { 
return iterator(_Base::erase(__position)); }
 
  230       erase(iterator __position)
 
  231       { _Base::erase(__position); }
 
  235       erase(
const key_type& __x)
 
  237     iterator __victim = find(__x);
 
  238     if (__victim == end())
 
  242       _Base::erase(__victim);
 
  247 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 
  249       erase(const_iterator __first, const_iterator __last)
 
  250       { 
return iterator(_Base::erase(__first, __last)); }
 
  253       erase(iterator __first, iterator __last)
 
  254       { _Base::erase(__first, __last); }
 
  259       { _Base::swap(__x); }
 
  263       { this->erase(begin(), end()); }
 
  266       using _Base::key_comp;
 
  267       using _Base::value_comp;
 
  271       find(
const key_type& __x)
 
  272       { 
return iterator(_Base::find(__x)); }
 
  277       find(
const key_type& __x)
 const 
  278       { 
return const_iterator(_Base::find(__x)); }
 
  283       lower_bound(
const key_type& __x)
 
  284       { 
return iterator(_Base::lower_bound(__x)); }
 
  289       lower_bound(
const key_type& __x)
 const 
  290       { 
return const_iterator(_Base::lower_bound(__x)); }
 
  293       upper_bound(
const key_type& __x)
 
  294       { 
return iterator(_Base::upper_bound(__x)); }
 
  299       upper_bound(
const key_type& __x)
 const 
  300       { 
return const_iterator(_Base::upper_bound(__x)); }
 
  303       equal_range(
const key_type& __x)
 
  305     typedef typename _Base::iterator _Base_iterator;
 
  307         _Base::equal_range(__x);
 
  315       equal_range(
const key_type& __x)
 const 
  317     typedef typename _Base::const_iterator _Base_iterator;
 
  319         _Base::equal_range(__x);
 
  321                   const_iterator(__res.
second));
 
  325       _M_base() { 
return *
this; }
 
  328       _M_base()
 const { 
return *
this; }
 
  332   template<
typename _Key, 
typename _Compare, 
typename _Allocator>
 
  336     { 
return __lhs._M_base() == __rhs._M_base(); }
 
  338   template<
typename _Key, 
typename _Compare, 
typename _Allocator>
 
  342     { 
return __lhs._M_base() != __rhs._M_base(); }
 
  344   template<
typename _Key, 
typename _Compare, 
typename _Allocator>
 
  346     operator<(const set<_Key, _Compare, _Allocator>& __lhs,
 
  347           const set<_Key, _Compare, _Allocator>& __rhs)
 
  348     { 
return __lhs._M_base() < __rhs._M_base(); }
 
  350   template<
typename _Key, 
typename _Compare, 
typename _Allocator>
 
  352     operator<=(const set<_Key, _Compare, _Allocator>& __lhs,
 
  353            const set<_Key, _Compare, _Allocator>& __rhs)
 
  354     { 
return __lhs._M_base() <= __rhs._M_base(); }
 
  356   template<
typename _Key, 
typename _Compare, 
typename _Allocator>
 
  358     operator>=(
const set<_Key, _Compare, _Allocator>& __lhs,
 
  359            const set<_Key, _Compare, _Allocator>& __rhs)
 
  360     { 
return __lhs._M_base() >= __rhs._M_base(); }
 
  362   template<
typename _Key, 
typename _Compare, 
typename _Allocator>
 
  364     operator>(
const set<_Key, _Compare, _Allocator>& __lhs,
 
  365           const set<_Key, _Compare, _Allocator>& __rhs)
 
  366     { 
return __lhs._M_base() > __rhs._M_base(); }
 
  368   template<
typename _Key, 
typename _Compare, 
typename _Allocator>
 
  370     swap(set<_Key, _Compare, _Allocator>& __x,
 
  371      set<_Key, _Compare, _Allocator>& __y)
 
  372     { 
return __x.swap(__y); }