stl_tree.h (_Rb_tree<>::__is_transparent<>): Move to outer scope and rename to ...

2015-06-07  François Dumont  <fdumont@gcc.gnu.org>

	* include/bits/stl_tree.h (_Rb_tree<>::__is_transparent<>): Move to
	outer scope and rename to ...
	(std::__hash_is_transparent<>): ... this.
	* include/debug/stl_map.h (map::find<>,
	map::lower_bound<>, map::upper_bound<>, map::equal_range<>): New
	member function templates to perform heterogeneous lookup.
	* include/debug/stl_multimap.h (multimap::find<>,
	multimap::lower_bound<>, multimap::upper_bound<>,
	multimap::equal_range<>): Likewise.
	* include/debug/stl_multiset.h (multiset::find<>,
	multiset::lower_bound<>, multiset::upper_bound<>,
	multiset::equal_range<>): Likewise.
	* include/debug/stl_set.h (set::find<>,
	set::lower_bound<>, set::upper_bound<>, set::equal_range<>): Likewise.
	* include/profile/stl_map.h (map::find<>, map::count<>,
	map::lower_bound<>, map::upper_bound<>, map::equal_range<>): Likewise.
	* include/profile/stl_multimap.h (multimap::find<>, multimap::count<>,
	multimap::lower_bound<>, multimap::upper_bound<>,
	multimap::equal_range<>): Likewise.
	* include/profile/stl_multiset.h (multiset::find<>, multiset::count<>,
	multiset::lower_bound<>, multiset::upper_bound<>,
	multiset::equal_range<>): Likewise.
	* include/profile/stl_set.h (set::find<>, set::count<>,
	set::lower_bound<>, set::upper_bound<>, set::equal_range<>): Likewise.
	* testsuite/23_containers/map/operations/1.cc: Check const variants.
	* testsuite/23_containers/multimap/operations/1.cc: Likewise.
	* testsuite/23_containers/multiset/operations/1.cc: Likewise.
	* testsuite/23_containers/set/operations/1.cc: Likewise.

From-SVN: r224200
This commit is contained in:
François Dumont 2015-06-07 20:45:57 +00:00
parent 3d2c9e18ff
commit d7b35f22be
14 changed files with 873 additions and 87 deletions

View File

@ -1,3 +1,34 @@
2015-06-07 François Dumont <fdumont@gcc.gnu.org>
* include/bits/stl_tree.h (_Rb_tree<>::__is_transparent<>): Move to
outer scope and rename to ...
(std::__hash_is_transparent<>): ... this.
* include/debug/stl_map.h (map::find<>,
map::lower_bound<>, map::upper_bound<>, map::equal_range<>): New
member function templates to perform heterogeneous lookup.
* include/debug/stl_multimap.h (multimap::find<>,
multimap::lower_bound<>, multimap::upper_bound<>,
multimap::equal_range<>): Likewise.
* include/debug/stl_multiset.h (multiset::find<>,
multiset::lower_bound<>, multiset::upper_bound<>,
multiset::equal_range<>): Likewise.
* include/debug/stl_set.h (set::find<>,
set::lower_bound<>, set::upper_bound<>, set::equal_range<>): Likewise.
* include/profile/stl_map.h (map::find<>, map::count<>,
map::lower_bound<>, map::upper_bound<>, map::equal_range<>): Likewise.
* include/profile/stl_multimap.h (multimap::find<>, multimap::count<>,
multimap::lower_bound<>, multimap::upper_bound<>,
multimap::equal_range<>): Likewise.
* include/profile/stl_multiset.h (multiset::find<>, multiset::count<>,
multiset::lower_bound<>, multiset::upper_bound<>,
multiset::equal_range<>): Likewise.
* include/profile/stl_set.h (set::find<>, set::count<>,
set::lower_bound<>, set::upper_bound<>, set::equal_range<>): Likewise.
* testsuite/23_containers/map/operations/1.cc: Check const variants.
* testsuite/23_containers/multimap/operations/1.cc: Likewise.
* testsuite/23_containers/multiset/operations/1.cc: Likewise.
* testsuite/23_containers/set/operations/1.cc: Likewise.
2015-06-05 Jonathan Wakely <jwakely@redhat.com>
* doc/xml/manual/status_cxx2017.xml: Update status tables.

View File

@ -341,6 +341,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_Rb_tree_rebalance_for_erase(_Rb_tree_node_base* const __z,
_Rb_tree_node_base& __header) throw ();
#if __cplusplus > 201103L
template<typename _Cmp, typename _SfinaeType, typename = __void_t<>>
struct __has_is_transparent
{ };
template<typename _Cmp, typename _SfinaeType>
struct __has_is_transparent<_Cmp, _SfinaeType,
__void_t<typename _Cmp::is_transparent>>
{ typedef void type; };
#endif
template<typename _Key, typename _Val, typename _KeyOfValue,
typename _Compare, typename _Alloc = allocator<_Val> >
@ -1109,16 +1119,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
equal_range(const key_type& __k) const;
#if __cplusplus > 201103L
template<typename _Cmp, typename _Kt, typename = __void_t<>>
struct __is_transparent { };
template<typename _Cmp, typename _Kt>
struct
__is_transparent<_Cmp, _Kt, __void_t<typename _Cmp::is_transparent>>
{ typedef void type; };
template<typename _Kt,
typename _Req = typename __is_transparent<_Compare, _Kt>::type>
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
iterator
_M_find_tr(const _Kt& __k)
{
@ -1127,7 +1130,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
template<typename _Kt,
typename _Req = typename __is_transparent<_Compare, _Kt>::type>
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
const_iterator
_M_find_tr(const _Kt& __k) const
{
@ -1138,7 +1142,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
template<typename _Kt,
typename _Req = typename __is_transparent<_Compare, _Kt>::type>
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
size_type
_M_count_tr(const _Kt& __k) const
{
@ -1147,7 +1152,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
template<typename _Kt,
typename _Req = typename __is_transparent<_Compare, _Kt>::type>
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
iterator
_M_lower_bound_tr(const _Kt& __k)
{
@ -1156,7 +1162,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
template<typename _Kt,
typename _Req = typename __is_transparent<_Compare, _Kt>::type>
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
const_iterator
_M_lower_bound_tr(const _Kt& __k) const
{
@ -1174,7 +1181,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
template<typename _Kt,
typename _Req = typename __is_transparent<_Compare, _Kt>::type>
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
iterator
_M_upper_bound_tr(const _Kt& __k)
{
@ -1183,7 +1191,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
template<typename _Kt,
typename _Req = typename __is_transparent<_Compare, _Kt>::type>
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
const_iterator
_M_upper_bound_tr(const _Kt& __k) const
{
@ -1201,7 +1210,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
template<typename _Kt,
typename _Req = typename __is_transparent<_Compare, _Kt>::type>
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
pair<iterator, iterator>
_M_equal_range_tr(const _Kt& __k)
{
@ -1211,7 +1221,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
template<typename _Kt,
typename _Req = typename __is_transparent<_Compare, _Kt>::type>
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
pair<const_iterator, const_iterator>
_M_equal_range_tr(const _Kt& __k) const
{

View File

@ -412,28 +412,82 @@ namespace __debug
find(const key_type& __x)
{ return iterator(_Base::find(__x), this); }
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
iterator
find(const _Kt& __x)
{ return { _Base::find(__x), this }; }
#endif
const_iterator
find(const key_type& __x) const
{ return const_iterator(_Base::find(__x), this); }
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
const_iterator
find(const _Kt& __x) const
{ return { _Base::find(__x), this }; }
#endif
using _Base::count;
iterator
lower_bound(const key_type& __x)
{ return iterator(_Base::lower_bound(__x), this); }
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
iterator
lower_bound(const _Kt& __x)
{ return { _Base::lower_bound(__x), this }; }
#endif
const_iterator
lower_bound(const key_type& __x) const
{ return const_iterator(_Base::lower_bound(__x), this); }
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
const_iterator
lower_bound(const _Kt& __x) const
{ return { _Base::lower_bound(__x), this }; }
#endif
iterator
upper_bound(const key_type& __x)
{ return iterator(_Base::upper_bound(__x), this); }
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
iterator
upper_bound(const _Kt& __x)
{ return { _Base::upper_bound(__x), this }; }
#endif
const_iterator
upper_bound(const key_type& __x) const
{ return const_iterator(_Base::upper_bound(__x), this); }
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
const_iterator
upper_bound(const _Kt& __x) const
{ return { _Base::upper_bound(__x), this }; }
#endif
std::pair<iterator,iterator>
equal_range(const key_type& __x)
{
@ -443,6 +497,18 @@ namespace __debug
iterator(__res.second, this));
}
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
std::pair<iterator, iterator>
equal_range(const _Kt& __x)
{
auto __res = _Base::equal_range(__x);
return { { __res.first, this }, { __res.second, this } };
}
#endif
std::pair<const_iterator,const_iterator>
equal_range(const key_type& __x) const
{
@ -452,6 +518,18 @@ namespace __debug
const_iterator(__res.second, this));
}
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
std::pair<const_iterator, const_iterator>
equal_range(const _Kt& __x) const
{
auto __res = _Base::equal_range(__x);
return { { __res.first, this }, { __res.second, this } };
}
#endif
_Base&
_M_base() _GLIBCXX_NOEXCEPT { return *this; }

View File

@ -393,28 +393,82 @@ namespace __debug
find(const key_type& __x)
{ return iterator(_Base::find(__x), this); }
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
iterator
find(const _Kt& __x)
{ return { _Base::find(__x), this }; }
#endif
const_iterator
find(const key_type& __x) const
{ return const_iterator(_Base::find(__x), this); }
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
const_iterator
find(const _Kt& __x) const
{ return { _Base::find(__x), this }; }
#endif
using _Base::count;
iterator
lower_bound(const key_type& __x)
{ return iterator(_Base::lower_bound(__x), this); }
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
iterator
lower_bound(const _Kt& __x)
{ return { _Base::lower_bound(__x), this }; }
#endif
const_iterator
lower_bound(const key_type& __x) const
{ return const_iterator(_Base::lower_bound(__x), this); }
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
const_iterator
lower_bound(const _Kt& __x) const
{ return { _Base::lower_bound(__x), this }; }
#endif
iterator
upper_bound(const key_type& __x)
{ return iterator(_Base::upper_bound(__x), this); }
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
iterator
upper_bound(const _Kt& __x)
{ return { _Base::upper_bound(__x), this }; }
#endif
const_iterator
upper_bound(const key_type& __x) const
{ return const_iterator(_Base::upper_bound(__x), this); }
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
const_iterator
upper_bound(const _Kt& __x) const
{ return { _Base::upper_bound(__x), this }; }
#endif
std::pair<iterator,iterator>
equal_range(const key_type& __x)
{
@ -424,6 +478,18 @@ namespace __debug
iterator(__res.second, this));
}
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
std::pair<iterator, iterator>
equal_range(const _Kt& __x)
{
auto __res = _Base::equal_range(__x);
return { { __res.first, this }, { __res.second, this } };
}
#endif
std::pair<const_iterator,const_iterator>
equal_range(const key_type& __x) const
{
@ -433,6 +499,18 @@ namespace __debug
const_iterator(__res.second, this));
}
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
std::pair<const_iterator, const_iterator>
equal_range(const _Kt& __x) const
{
auto __res = _Base::equal_range(__x);
return { { __res.first, this }, { __res.second, this } };
}
#endif
_Base&
_M_base() _GLIBCXX_NOEXCEPT { return *this; }

View File

@ -386,6 +386,22 @@ namespace __debug
find(const key_type& __x) const
{ return const_iterator(_Base::find(__x), this); }
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
iterator
find(const _Kt& __x)
{ return { _Base::find(__x), this }; }
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
const_iterator
find(const _Kt& __x) const
{ return { _Base::find(__x), this }; }
#endif
using _Base::count;
iterator
@ -398,6 +414,22 @@ namespace __debug
lower_bound(const key_type& __x) const
{ return const_iterator(_Base::lower_bound(__x), this); }
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
iterator
lower_bound(const _Kt& __x)
{ return { _Base::lower_bound(__x), this }; }
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
const_iterator
lower_bound(const _Kt& __x) const
{ return { _Base::lower_bound(__x), this }; }
#endif
iterator
upper_bound(const key_type& __x)
{ return iterator(_Base::upper_bound(__x), this); }
@ -408,6 +440,22 @@ namespace __debug
upper_bound(const key_type& __x) const
{ return const_iterator(_Base::upper_bound(__x), this); }
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
iterator
upper_bound(const _Kt& __x)
{ return { _Base::upper_bound(__x), this }; }
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
const_iterator
upper_bound(const _Kt& __x) const
{ return { _Base::upper_bound(__x), this }; }
#endif
std::pair<iterator,iterator>
equal_range(const key_type& __x)
{
@ -428,6 +476,28 @@ namespace __debug
const_iterator(__res.second, this));
}
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
std::pair<iterator, iterator>
equal_range(const _Kt& __x)
{
auto __res = _Base::equal_range(__x);
return { { __res.first, this }, { __res.second, this } };
}
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
std::pair<const_iterator, const_iterator>
equal_range(const _Kt& __x) const
{
auto __res = _Base::equal_range(__x);
return { { __res.first, this }, { __res.second, this } };
}
#endif
_Base&
_M_base() _GLIBCXX_NOEXCEPT { return *this; }

View File

@ -393,6 +393,22 @@ namespace __debug
find(const key_type& __x) const
{ return const_iterator(_Base::find(__x), this); }
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
iterator
find(const _Kt& __x)
{ return { _Base::find(__x), this }; }
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
const_iterator
find(const _Kt& __x) const
{ return { _Base::find(__x), this }; }
#endif
using _Base::count;
iterator
@ -405,6 +421,22 @@ namespace __debug
lower_bound(const key_type& __x) const
{ return const_iterator(_Base::lower_bound(__x), this); }
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
iterator
lower_bound(const _Kt& __x)
{ return { _Base::lower_bound(__x), this }; }
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
const_iterator
lower_bound(const _Kt& __x) const
{ return { _Base::lower_bound(__x), this }; }
#endif
iterator
upper_bound(const key_type& __x)
{ return iterator(_Base::upper_bound(__x), this); }
@ -415,7 +447,23 @@ namespace __debug
upper_bound(const key_type& __x) const
{ return const_iterator(_Base::upper_bound(__x), this); }
std::pair<iterator,iterator>
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
iterator
upper_bound(const _Kt& __x)
{ return { _Base::upper_bound(__x), this }; }
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
const_iterator
upper_bound(const _Kt& __x) const
{ return { _Base::upper_bound(__x), this }; }
#endif
std::pair<iterator, iterator>
equal_range(const key_type& __x)
{
std::pair<_Base_iterator, _Base_iterator> __res =
@ -426,15 +474,37 @@ namespace __debug
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 214. set::find() missing const overload
std::pair<const_iterator,const_iterator>
std::pair<const_iterator, const_iterator>
equal_range(const key_type& __x) const
{
std::pair<_Base_iterator, _Base_iterator> __res =
std::pair<_Base_const_iterator, _Base_const_iterator> __res =
_Base::equal_range(__x);
return std::make_pair(const_iterator(__res.first, this),
const_iterator(__res.second, this));
}
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
std::pair<iterator, iterator>
equal_range(const _Kt& __x)
{
auto __res = _Base::equal_range(__x);
return { { __res.first, this }, { __res.second, this } };
}
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
std::pair<const_iterator, const_iterator>
equal_range(const _Kt& __x) const
{
auto __res = _Base::equal_range(__x);
return { { __res.first, this }, { __res.second, this } };
}
#endif
_Base&
_M_base() _GLIBCXX_NOEXCEPT { return *this; }

View File

@ -429,6 +429,18 @@ namespace __profile
return iterator(_Base::find(__x), this);
}
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
iterator
find(const _Kt& __x)
{
__profcxx_map2umap_find(this->_M_map2umap_info, this->size());
return { _Base::find(__x), this };
}
#endif
const_iterator
find(const key_type& __x) const
{
@ -436,6 +448,18 @@ namespace __profile
return const_iterator(_Base::find(__x), this);
}
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
const_iterator
find(const _Kt& __x) const
{
__profcxx_map2umap_find(this->_M_map2umap_info, this->size());
return { _Base::find(__x), this };
}
#endif
size_type
count(const key_type& __x) const
{
@ -443,6 +467,18 @@ namespace __profile
return _Base::count(__x);
}
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
size_type
count(const _Kt& __x) const
{
__profcxx_map2umap_find(this->_M_map2umap_info, this->size());
return _Base::count(__x);
}
#endif
iterator
lower_bound(const key_type& __x)
{
@ -451,6 +487,19 @@ namespace __profile
return iterator(_Base::lower_bound(__x), this);
}
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
iterator
lower_bound(const _Kt& __x)
{
__profcxx_map2umap_find(this->_M_map2umap_info, this->size());
__profcxx_map2umap_invalidate(this->_M_map2umap_info);
return { _Base::lower_bound(__x), this };
}
#endif
const_iterator
lower_bound(const key_type& __x) const
{
@ -459,6 +508,19 @@ namespace __profile
return const_iterator(_Base::lower_bound(__x), this);
}
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
const_iterator
lower_bound(const _Kt& __x) const
{
__profcxx_map2umap_find(this->_M_map2umap_info, this->size());
__profcxx_map2umap_invalidate(this->_M_map2umap_info);
return { _Base::lower_bound(__x), this };
}
#endif
iterator
upper_bound(const key_type& __x)
{
@ -467,6 +529,19 @@ namespace __profile
return iterator(_Base::upper_bound(__x), this);
}
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
iterator
upper_bound(const _Kt& __x)
{
__profcxx_map2umap_find(this->_M_map2umap_info, this->size());
__profcxx_map2umap_invalidate(this->_M_map2umap_info);
return { _Base::upper_bound(__x), this };
}
#endif
const_iterator
upper_bound(const key_type& __x) const
{
@ -475,6 +550,19 @@ namespace __profile
return const_iterator(_Base::upper_bound(__x), this);
}
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
const_iterator
upper_bound(const _Kt& __x) const
{
__profcxx_map2umap_find(this->_M_map2umap_info, this->size());
__profcxx_map2umap_invalidate(this->_M_map2umap_info);
return { _Base::upper_bound(__x), this };
}
#endif
std::pair<iterator,iterator>
equal_range(const key_type& __x)
{
@ -485,6 +573,19 @@ namespace __profile
iterator(__base_ret.second, this));
}
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
std::pair<iterator, iterator>
equal_range(const _Kt& __x)
{
__profcxx_map2umap_find(this->_M_map2umap_info, this->size());
auto __res = _Base::equal_range(__x);
return { { __res.first, this }, { __res.second, this } };
}
#endif
std::pair<const_iterator,const_iterator>
equal_range(const key_type& __x) const
{
@ -495,6 +596,19 @@ namespace __profile
const_iterator(__base_ret.second, this));
}
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
std::pair<const_iterator, const_iterator>
equal_range(const _Kt& __x) const
{
__profcxx_map2umap_find(this->_M_map2umap_info, this->size());
auto __res = _Base::equal_range(__x);
return { { __res.first, this }, { __res.second, this } };
}
#endif
_Base&
_M_base() _GLIBCXX_NOEXCEPT { return *this; }

View File

@ -388,6 +388,18 @@ namespace __profile
return iterator(_Base::find(__x), this);
}
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
iterator
find(const _Kt& __x)
{
__profcxx_map2umap_find(this->_M_map2umap_info, this->size());
return { _Base::find(__x), this };
}
#endif
const_iterator
find(const key_type& __x) const
{
@ -395,6 +407,18 @@ namespace __profile
return const_iterator(_Base::find(__x), this);
}
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
const_iterator
find(const _Kt& __x) const
{
__profcxx_map2umap_find(this->_M_map2umap_info, this->size());
return { _Base::find(__x), this };
}
#endif
size_type
count(const key_type& __x) const
{
@ -402,6 +426,18 @@ namespace __profile
return _Base::count(__x);
}
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
size_type
count(const _Kt& __x) const
{
__profcxx_map2umap_find(this->_M_map2umap_info, this->size());
return _Base::count(__x);
}
#endif
iterator
lower_bound(const key_type& __x)
{
@ -410,6 +446,19 @@ namespace __profile
return iterator(_Base::lower_bound(__x), this);
}
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
iterator
lower_bound(const _Kt& __x)
{
__profcxx_map2umap_find(this->_M_map2umap_info, this->size());
__profcxx_map2umap_invalidate(this->_M_map2umap_info);
return { _Base::lower_bound(__x), this };
}
#endif
const_iterator
lower_bound(const key_type& __x) const
{
@ -418,6 +467,19 @@ namespace __profile
return const_iterator(_Base::lower_bound(__x), this);
}
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
const_iterator
lower_bound(const _Kt& __x) const
{
__profcxx_map2umap_find(this->_M_map2umap_info, this->size());
__profcxx_map2umap_invalidate(this->_M_map2umap_info);
return { _Base::lower_bound(__x), this };
}
#endif
iterator
upper_bound(const key_type& __x)
{
@ -426,6 +488,19 @@ namespace __profile
return iterator(_Base::upper_bound(__x), this);
}
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
iterator
upper_bound(const _Kt& __x)
{
__profcxx_map2umap_find(this->_M_map2umap_info, this->size());
__profcxx_map2umap_invalidate(this->_M_map2umap_info);
return { _Base::upper_bound(__x), this };
}
#endif
const_iterator
upper_bound(const key_type& __x) const
{
@ -434,6 +509,19 @@ namespace __profile
return const_iterator(_Base::upper_bound(__x), this);
}
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
const_iterator
upper_bound(const _Kt& __x) const
{
__profcxx_map2umap_find(this->_M_map2umap_info, this->size());
__profcxx_map2umap_invalidate(this->_M_map2umap_info);
return { _Base::upper_bound(__x), this };
}
#endif
std::pair<iterator,iterator>
equal_range(const key_type& __x)
{
@ -444,6 +532,19 @@ namespace __profile
iterator(__base_ret.second, this));
}
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
std::pair<iterator, iterator>
equal_range(const _Kt& __x)
{
__profcxx_map2umap_find(this->_M_map2umap_info, this->size());
auto __res = _Base::equal_range(__x);
return { { __res.first, this }, { __res.second, this } };
}
#endif
std::pair<const_iterator,const_iterator>
equal_range(const key_type& __x) const
{
@ -454,6 +555,19 @@ namespace __profile
const_iterator(__base_ret.second, this));
}
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
std::pair<const_iterator, const_iterator>
equal_range(const _Kt& __x) const
{
__profcxx_map2umap_find(this->_M_map2umap_info, this->size());
auto __res = _Base::equal_range(__x);
return { { __res.first, this }, { __res.second, this } };
}
#endif
_Base&
_M_base() _GLIBCXX_NOEXCEPT { return *this; }

View File

@ -379,6 +379,18 @@ namespace __profile
return _Base::count(__x);
}
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
size_type
count(const _Kt& __x) const
{
__profcxx_map2umap_find(this->_M_map2umap_info, this->size());
return _Base::count(__x);
}
#endif
// multiset operations:
iterator
find(const key_type& __x)
@ -396,6 +408,28 @@ namespace __profile
return const_iterator(_Base::find(__x), this);
}
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
iterator
find(const _Kt& __x)
{
__profcxx_map2umap_find(this->_M_map2umap_info, this->size());
return { _Base::find(__x), this };
}
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
const_iterator
find(const _Kt& __x) const
{
__profcxx_map2umap_find(this->_M_map2umap_info, this->size());
return { _Base::find(__x), this };
}
#endif
iterator
lower_bound(const key_type& __x)
{
@ -413,6 +447,30 @@ namespace __profile
return const_iterator(_Base::lower_bound(__x), this);
}
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
iterator
lower_bound(const _Kt& __x)
{
__profcxx_map2umap_find(this->_M_map2umap_info, this->size());
__profcxx_map2umap_invalidate(this->_M_map2umap_info);
return { _Base::lower_bound(__x), this };
}
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
const_iterator
lower_bound(const _Kt& __x) const
{
__profcxx_map2umap_find(this->_M_map2umap_info, this->size());
__profcxx_map2umap_invalidate(this->_M_map2umap_info);
return { _Base::lower_bound(__x), this };
}
#endif
iterator
upper_bound(const key_type& __x)
{
@ -431,6 +489,30 @@ namespace __profile
return const_iterator(_Base::upper_bound(__x), this);
}
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
iterator
upper_bound(const _Kt& __x)
{
__profcxx_map2umap_find(this->_M_map2umap_info, this->size());
__profcxx_map2umap_invalidate(this->_M_map2umap_info);
return { _Base::upper_bound(__x), this };
}
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
const_iterator
upper_bound(const _Kt& __x) const
{
__profcxx_map2umap_find(this->_M_map2umap_info, this->size());
__profcxx_map2umap_invalidate(this->_M_map2umap_info);
return { _Base::upper_bound(__x), this };
}
#endif
std::pair<iterator,iterator>
equal_range(const key_type& __x)
{
@ -453,6 +535,30 @@ namespace __profile
const_iterator(__base_ret.second, this));
}
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
std::pair<iterator, iterator>
equal_range(const _Kt& __x)
{
__profcxx_map2umap_find(this->_M_map2umap_info, this->size());
auto __res = _Base::equal_range(__x);
return { { __res.first, this }, { __res.second, this } };
}
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
std::pair<const_iterator, const_iterator>
equal_range(const _Kt& __x) const
{
__profcxx_map2umap_find(this->_M_map2umap_info, this->size());
auto __res = _Base::equal_range(__x);
return { { __res.first, this }, { __res.second, this } };
}
#endif
_Base&
_M_base() _GLIBCXX_NOEXCEPT { return *this; }

View File

@ -369,6 +369,18 @@ namespace __profile
return _Base::count(__x);
}
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
size_type
count(const _Kt& __x) const
{
__profcxx_map2umap_find(this->_M_map2umap_info, this->size());
return _Base::count(__x);
}
#endif
// set operations:
iterator
find(const key_type& __x)
@ -384,6 +396,28 @@ namespace __profile
return const_iterator(_Base::find(__x), this);
}
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
iterator
find(const _Kt& __x)
{
__profcxx_map2umap_find(this->_M_map2umap_info, this->size());
return { _Base::find(__x), this };
}
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
const_iterator
find(const _Kt& __x) const
{
__profcxx_map2umap_find(this->_M_map2umap_info, this->size());
return { _Base::find(__x), this };
}
#endif
iterator
lower_bound(const key_type& __x)
{
@ -400,6 +434,30 @@ namespace __profile
return const_iterator(_Base::lower_bound(__x), this);
}
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
iterator
lower_bound(const _Kt& __x)
{
__profcxx_map2umap_find(this->_M_map2umap_info, this->size());
__profcxx_map2umap_invalidate(this->_M_map2umap_info);
return { _Base::lower_bound(__x), this };
}
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
const_iterator
lower_bound(const _Kt& __x) const
{
__profcxx_map2umap_find(this->_M_map2umap_info, this->size());
__profcxx_map2umap_invalidate(this->_M_map2umap_info);
return { _Base::lower_bound(__x), this };
}
#endif
iterator
upper_bound(const key_type& __x)
{
@ -416,6 +474,30 @@ namespace __profile
return const_iterator(_Base::upper_bound(__x), this);
}
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
iterator
upper_bound(const _Kt& __x)
{
__profcxx_map2umap_find(this->_M_map2umap_info, this->size());
__profcxx_map2umap_invalidate(this->_M_map2umap_info);
return { _Base::upper_bound(__x), this };
}
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
const_iterator
upper_bound(const _Kt& __x) const
{
__profcxx_map2umap_find(this->_M_map2umap_info, this->size());
__profcxx_map2umap_invalidate(this->_M_map2umap_info);
return { _Base::upper_bound(__x), this };
}
#endif
std::pair<iterator, iterator>
equal_range(const key_type& __x)
{
@ -436,6 +518,30 @@ namespace __profile
const_iterator(__base_ret.second, this));
}
#if __cplusplus > 201103L
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
std::pair<iterator, iterator>
equal_range(const _Kt& __x)
{
__profcxx_map2umap_find(this->_M_map2umap_info, this->size());
auto __res = _Base::equal_range(__x);
return { { __res.first, this }, { __res.second, this } };
}
template<typename _Kt,
typename _Req =
typename __has_is_transparent<_Compare, _Kt>::type>
std::pair<const_iterator, const_iterator>
equal_range(const _Kt& __x) const
{
__profcxx_map2umap_find(this->_M_map2umap_info, this->size());
auto __res = _Base::equal_range(__x);
return { { __res.first, this }, { __res.second, this } };
}
#endif
_Base&
_M_base() _GLIBCXX_NOEXCEPT { return *this; }

View File

@ -29,6 +29,7 @@ void test01()
map<int, int> m0;
typedef map<int, int>::iterator iterator;
typedef map<int, int>::const_iterator const_iterator;
typedef pair<iterator, bool> insert_return_type;
pair<iterator, iterator> pp0;
typedef map<int, int>::value_type value_type;
@ -47,7 +48,7 @@ void test01()
VERIFY( *pp0.first == value_type(2, 2) );
VERIFY( *pp0.second == value_type(3, 3) );
VERIFY( pp0.first == irt1.first );
VERIFY( --pp0.first == irt0.first );
VERIFY( --pp0.first == irt0.first );
VERIFY( pp0.second == irt2.first );
m0.insert(value_type(3, 4));
@ -59,7 +60,7 @@ void test01()
VERIFY( *pp0.first == value_type(3, 3) );
VERIFY( *pp0.second == value_type(4, 6) );
VERIFY( pp0.first == irt2.first );
VERIFY( --pp0.first == irt1.first );
VERIFY( --pp0.first == irt1.first );
VERIFY( pp0.second == irt4.first );
insert_return_type irt5 = m0.insert(value_type(0, 7));
@ -72,7 +73,7 @@ void test01()
VERIFY( *pp0.first == value_type(1, 1) );
VERIFY( *pp0.second == value_type(2, 2) );
VERIFY( pp0.first == irt0.first );
VERIFY( --pp0.first == irt5.first );
VERIFY( --pp0.first == irt5.first );
VERIFY( pp0.second == irt1.first );
insert_return_type irt6 = m0.insert(value_type(5, 11));
@ -83,7 +84,7 @@ void test01()
VERIFY( m0.count(5) == 1 );
VERIFY( *pp0.first == value_type(5, 11) );
VERIFY( pp0.first == irt6.first );
VERIFY( --pp0.first == irt4.first );
VERIFY( --pp0.first == irt4.first );
VERIFY( pp0.second == m0.end() );
m0.insert(value_type(4, 14));
@ -91,11 +92,11 @@ void test01()
m0.insert(value_type(4, 16));
pp0 = m0.equal_range(4);
VERIFY( m0.count(4) == 1 );
VERIFY( m0.count(4) == 1 );
VERIFY( *pp0.first == value_type(4, 6) );
VERIFY( *pp0.second == value_type(5, 11) );
VERIFY( *pp0.second == value_type(5, 11) );
VERIFY( pp0.first == irt4.first );
VERIFY( --pp0.first == irt3.first );
VERIFY( --pp0.first == irt3.first );
VERIFY( pp0.second == irt6.first );
m0.insert(value_type(0, 17));
@ -103,20 +104,21 @@ void test01()
m0.insert(value_type(1, 19));
pp0 = m0.equal_range(0);
VERIFY( m0.count(0) == 1 );
VERIFY( m0.count(0) == 1 );
VERIFY( *pp0.first == value_type(0, 7) );
VERIFY( *pp0.second == value_type(1, 1) );
VERIFY( *pp0.second == value_type(1, 1) );
VERIFY( pp0.first == irt5.first );
VERIFY( pp0.first == m0.begin() );
VERIFY( pp0.second == irt0.first );
pp0 = m0.equal_range(1);
VERIFY( m0.count(1) == 1 );
VERIFY( *pp0.first == value_type(1, 1) );
VERIFY( *pp0.second == value_type(2, 2) );
VERIFY( pp0.first == irt0.first );
VERIFY( --pp0.first == irt7.first);
VERIFY( pp0.second == irt1.first );
const map<int, int>& m1 = m0;
pair<const_iterator, const_iterator> pp1 = m1.equal_range(1);
VERIFY( m1.count(1) == 1 );
VERIFY( *pp1.first == value_type(1, 1) );
VERIFY( *pp1.second == value_type(2, 2) );
VERIFY( pp1.first == irt0.first );
VERIFY( --pp1.first == irt7.first);
VERIFY( pp1.second == irt1.first );
}
int

View File

@ -29,6 +29,7 @@ void test01()
multimap<int, int> mm0;
typedef multimap<int, int>::iterator iterator;
typedef multimap<int, int>::const_iterator const_iterator;
pair<iterator, iterator> pp0;
typedef multimap<int, int>::value_type value_type;
@ -46,7 +47,7 @@ void test01()
VERIFY( *pp0.first == value_type(2, 2) );
VERIFY( *pp0.second == value_type(3, 3) );
VERIFY( pp0.first == iter1 );
VERIFY( --pp0.first == iter0 );
VERIFY( --pp0.first == iter0 );
VERIFY( pp0.second == iter2 );
mm0.insert(value_type(3, 4));
@ -58,7 +59,7 @@ void test01()
VERIFY( *pp0.first == value_type(3, 3) );
VERIFY( *pp0.second == value_type(4, 6) );
VERIFY( pp0.first == iter2 );
VERIFY( --pp0.first == iter1 );
VERIFY( --pp0.first == iter1 );
VERIFY( pp0.second == iter4 );
iterator iter5 = mm0.insert(value_type(0, 7));
@ -71,7 +72,7 @@ void test01()
VERIFY( *pp0.first == value_type(1, 1) );
VERIFY( *pp0.second == value_type(2, 2) );
VERIFY( pp0.first == iter0 );
VERIFY( --pp0.first == iter5 );
VERIFY( --pp0.first == iter5 );
VERIFY( pp0.second == iter1 );
iterator iter6 = mm0.insert(value_type(5, 11));
@ -82,7 +83,7 @@ void test01()
VERIFY( mm0.count(5) == 3 );
VERIFY( *pp0.first == value_type(5, 11) );
VERIFY( pp0.first == iter6 );
VERIFY( --pp0.first == iter4 );
VERIFY( --pp0.first == iter4 );
VERIFY( pp0.second == mm0.end() );
mm0.insert(value_type(4, 14));
@ -90,11 +91,11 @@ void test01()
mm0.insert(value_type(4, 16));
pp0 = mm0.equal_range(4);
VERIFY( mm0.count(4) == 4 );
VERIFY( mm0.count(4) == 4 );
VERIFY( *pp0.first == value_type(4, 6) );
VERIFY( *pp0.second == value_type(5, 11) );
VERIFY( *pp0.second == value_type(5, 11) );
VERIFY( pp0.first == iter4 );
VERIFY( --pp0.first == iter3 );
VERIFY( --pp0.first == iter3 );
VERIFY( pp0.second == iter6 );
mm0.insert(value_type(0, 17));
@ -102,20 +103,21 @@ void test01()
mm0.insert(value_type(1, 19));
pp0 = mm0.equal_range(0);
VERIFY( mm0.count(0) == 3 );
VERIFY( mm0.count(0) == 3 );
VERIFY( *pp0.first == value_type(0, 7) );
VERIFY( *pp0.second == value_type(1, 1) );
VERIFY( *pp0.second == value_type(1, 1) );
VERIFY( pp0.first == iter5 );
VERIFY( pp0.first == mm0.begin() );
VERIFY( pp0.second == iter0 );
pp0 = mm0.equal_range(1);
VERIFY( mm0.count(1) == 5 );
VERIFY( *pp0.first == value_type(1, 1) );
VERIFY( *pp0.second == value_type(2, 2) );
VERIFY( pp0.first == iter0 );
VERIFY( --pp0.first == iter7 );
VERIFY( pp0.second == iter1 );
const multimap<int, int>& mm1 = mm0;
pair<const_iterator, const_iterator> pp1 = mm1.equal_range(1);
VERIFY( mm1.count(1) == 5 );
VERIFY( *pp1.first == value_type(1, 1) );
VERIFY( *pp1.second == value_type(2, 2) );
VERIFY( pp1.first == iter0 );
VERIFY( --pp1.first == iter7 );
VERIFY( pp1.second == iter1 );
}
int

View File

@ -29,6 +29,7 @@ void test01()
multiset<int> ms0;
typedef multiset<int>::iterator iterator;
typedef multiset<int>::const_iterator const_iterator;
pair<iterator, iterator> pp0;
pp0 = ms0.equal_range(1);
@ -45,19 +46,19 @@ void test01()
VERIFY( *pp0.first == 2 );
VERIFY( *pp0.second == 3 );
VERIFY( pp0.first == iter1 );
VERIFY( --pp0.first == iter0 );
VERIFY( --pp0.first == iter0 );
VERIFY( pp0.second == iter2 );
ms0.insert(3);
iterator iter3 = ms0.insert(3);
iterator iter4 = ms0.insert(4);
pp0 = ms0.equal_range(3);
VERIFY( ms0.count(3) == 3 );
VERIFY( *pp0.first == 3 );
VERIFY( *pp0.second == 4 );
VERIFY( pp0.first == iter2 );
VERIFY( --pp0.first == iter1 );
VERIFY( --pp0.first == iter1 );
VERIFY( pp0.second == iter4 );
iterator iter5 = ms0.insert(0);
@ -70,7 +71,7 @@ void test01()
VERIFY( *pp0.first == 1 );
VERIFY( *pp0.second == 2 );
VERIFY( pp0.first == iter0 );
VERIFY( --pp0.first == iter5 );
VERIFY( --pp0.first == iter5 );
VERIFY( pp0.second == iter1 );
iterator iter6 = ms0.insert(5);
@ -81,7 +82,7 @@ void test01()
VERIFY( ms0.count(5) == 3 );
VERIFY( *pp0.first == 5 );
VERIFY( pp0.first == iter6 );
VERIFY( --pp0.first == iter4 );
VERIFY( --pp0.first == iter4 );
VERIFY( pp0.second == ms0.end() );
ms0.insert(4);
@ -89,32 +90,33 @@ void test01()
ms0.insert(4);
pp0 = ms0.equal_range(4);
VERIFY( ms0.count(4) == 4 );
VERIFY( ms0.count(4) == 4 );
VERIFY( *pp0.first == 4 );
VERIFY( *pp0.second == 5 );
VERIFY( *pp0.second == 5 );
VERIFY( pp0.first == iter4 );
VERIFY( --pp0.first == iter3 );
VERIFY( --pp0.first == iter3 );
VERIFY( pp0.second == iter6 );
ms0.insert(0);
iterator iter7 = ms0.insert(0);
ms0.insert(1);
pp0 = ms0.equal_range(0);
VERIFY( ms0.count(0) == 3 );
VERIFY( ms0.count(0) == 3 );
VERIFY( *pp0.first == 0 );
VERIFY( *pp0.second == 1 );
VERIFY( *pp0.second == 1 );
VERIFY( pp0.first == iter5 );
VERIFY( pp0.first == ms0.begin() );
VERIFY( pp0.second == iter0 );
pp0 = ms0.equal_range(1);
VERIFY( ms0.count(1) == 5 );
VERIFY( *pp0.first == 1 );
VERIFY( *pp0.second == 2 );
VERIFY( pp0.first == iter0 );
VERIFY( --pp0.first == iter7 );
VERIFY( pp0.second == iter1 );
const multiset<int>& ms1 = ms0;
pair<const_iterator, const_iterator> pp1 = ms1.equal_range(1);
VERIFY( ms1.count(1) == 5 );
VERIFY( *pp1.first == 1 );
VERIFY( *pp1.second == 2 );
VERIFY( pp1.first == iter0 );
VERIFY( --pp1.first == iter7 );
VERIFY( pp1.second == iter1 );
}
int

View File

@ -29,6 +29,7 @@ void test01()
set<int> s0;
typedef set<int>::iterator iterator;
typedef set<int>::const_iterator const_iterator;
typedef pair<iterator, bool> insert_return_type;
pair<iterator, iterator> pp0;
@ -52,13 +53,13 @@ void test01()
s0.insert(3);
insert_return_type irt3 = s0.insert(3);
insert_return_type irt4 = s0.insert(4);
pp0 = s0.equal_range(3);
VERIFY( s0.count(3) == 1 );
VERIFY( *pp0.first == 3 );
VERIFY( *pp0.second == 4 );
VERIFY( pp0.first == irt2.first );
VERIFY( --pp0.first == irt1.first );
VERIFY( --pp0.first == irt1.first );
VERIFY( pp0.second == irt4.first );
insert_return_type irt5 = s0.insert(0);
@ -71,7 +72,7 @@ void test01()
VERIFY( *pp0.first == 1 );
VERIFY( *pp0.second == 2 );
VERIFY( pp0.first == irt0.first );
VERIFY( --pp0.first == irt5.first );
VERIFY( --pp0.first == irt5.first );
VERIFY( pp0.second == irt1.first );
insert_return_type irt6 = s0.insert(5);
@ -82,7 +83,7 @@ void test01()
VERIFY( s0.count(5) == 1 );
VERIFY( *pp0.first == 5 );
VERIFY( pp0.first == irt6.first );
VERIFY( --pp0.first == irt4.first );
VERIFY( --pp0.first == irt4.first );
VERIFY( pp0.second == s0.end() );
s0.insert(4);
@ -90,32 +91,33 @@ void test01()
s0.insert(4);
pp0 = s0.equal_range(4);
VERIFY( s0.count(4) == 1 );
VERIFY( s0.count(4) == 1 );
VERIFY( *pp0.first == 4 );
VERIFY( *pp0.second == 5 );
VERIFY( *pp0.second == 5 );
VERIFY( pp0.first == irt4.first );
VERIFY( --pp0.first == irt3.first );
VERIFY( --pp0.first == irt3.first );
VERIFY( pp0.second == irt6.first );
s0.insert(0);
insert_return_type irt7 = s0.insert(0);
s0.insert(1);
pp0 = s0.equal_range(0);
VERIFY( s0.count(0) == 1 );
VERIFY( s0.count(0) == 1 );
VERIFY( *pp0.first == 0 );
VERIFY( *pp0.second == 1 );
VERIFY( *pp0.second == 1 );
VERIFY( pp0.first == irt5.first );
VERIFY( pp0.first == s0.begin() );
VERIFY( pp0.second == irt0.first );
pp0 = s0.equal_range(1);
VERIFY( s0.count(1) == 1 );
VERIFY( *pp0.first == 1 );
VERIFY( *pp0.second == 2 );
VERIFY( pp0.first == irt0.first );
VERIFY( --pp0.first == irt7.first );
VERIFY( pp0.second == irt1.first );
const set<int>& s1 = s0;
pair<const_iterator, const_iterator> pp1 = s1.equal_range(1);
VERIFY( s1.count(1) == 1 );
VERIFY( *pp1.first == 1 );
VERIFY( *pp1.second == 2 );
VERIFY( pp1.first == irt0.first );
VERIFY( --pp1.first == irt7.first );
VERIFY( pp1.second == irt1.first );
}
int