diff options
Diffstat (limited to 'libcxx/include/set')
-rw-r--r-- | libcxx/include/set | 66 |
1 files changed, 42 insertions, 24 deletions
diff --git a/libcxx/include/set b/libcxx/include/set index 75529e7..59ed015 100644 --- a/libcxx/include/set +++ b/libcxx/include/set @@ -849,30 +849,40 @@ public: } # endif // _LIBCPP_STD_VER >= 20 - _LIBCPP_HIDE_FROM_ABI iterator lower_bound(const key_type& __k) { return __tree_.lower_bound(__k); } - _LIBCPP_HIDE_FROM_ABI const_iterator lower_bound(const key_type& __k) const { return __tree_.lower_bound(__k); } + _LIBCPP_HIDE_FROM_ABI iterator lower_bound(const key_type& __k) { return __tree_.__lower_bound_unique(__k); } + + _LIBCPP_HIDE_FROM_ABI const_iterator lower_bound(const key_type& __k) const { + return __tree_.__lower_bound_unique(__k); + } + + // The transparent versions of the lookup functions use the _multi version, since a non-element key is allowed to + // match multiple elements. # if _LIBCPP_STD_VER >= 14 template <typename _K2, enable_if_t<__is_transparent_v<_Compare, _K2>, int> = 0> _LIBCPP_HIDE_FROM_ABI iterator lower_bound(const _K2& __k) { - return __tree_.lower_bound(__k); + return __tree_.__lower_bound_multi(__k); } template <typename _K2, enable_if_t<__is_transparent_v<_Compare, _K2>, int> = 0> _LIBCPP_HIDE_FROM_ABI const_iterator lower_bound(const _K2& __k) const { - return __tree_.lower_bound(__k); + return __tree_.__lower_bound_multi(__k); } # endif - _LIBCPP_HIDE_FROM_ABI iterator upper_bound(const key_type& __k) { return __tree_.upper_bound(__k); } - _LIBCPP_HIDE_FROM_ABI const_iterator upper_bound(const key_type& __k) const { return __tree_.upper_bound(__k); } + _LIBCPP_HIDE_FROM_ABI iterator upper_bound(const key_type& __k) { return __tree_.__upper_bound_unique(__k); } + + _LIBCPP_HIDE_FROM_ABI const_iterator upper_bound(const key_type& __k) const { + return __tree_.__upper_bound_unique(__k); + } + # if _LIBCPP_STD_VER >= 14 template <typename _K2, enable_if_t<__is_transparent_v<_Compare, _K2>, int> = 0> _LIBCPP_HIDE_FROM_ABI iterator upper_bound(const _K2& __k) { - return __tree_.upper_bound(__k); + return __tree_.__upper_bound_multi(__k); } template <typename _K2, enable_if_t<__is_transparent_v<_Compare, _K2>, int> = 0> _LIBCPP_HIDE_FROM_ABI const_iterator upper_bound(const _K2& __k) const { - return __tree_.upper_bound(__k); + return __tree_.__upper_bound_multi(__k); } # endif @@ -896,13 +906,13 @@ public: # if _LIBCPP_STD_VER >= 17 template <class _InputIterator, - class _Compare = less<__iter_value_type<_InputIterator>>, - class _Allocator = allocator<__iter_value_type<_InputIterator>>, + class _Compare = less<__iterator_value_type<_InputIterator>>, + class _Allocator = allocator<__iterator_value_type<_InputIterator>>, class = enable_if_t<__has_input_iterator_category<_InputIterator>::value, void>, class = enable_if_t<__is_allocator_v<_Allocator>>, class = enable_if_t<!__is_allocator_v<_Compare>>> set(_InputIterator, _InputIterator, _Compare = _Compare(), _Allocator = _Allocator()) - -> set<__iter_value_type<_InputIterator>, _Compare, _Allocator>; + -> set<__iterator_value_type<_InputIterator>, _Compare, _Allocator>; # if _LIBCPP_STD_VER >= 23 template <ranges::input_range _Range, @@ -926,7 +936,7 @@ template <class _InputIterator, class = enable_if_t<__has_input_iterator_category<_InputIterator>::value, void>, class = enable_if_t<__is_allocator_v<_Allocator>>> set(_InputIterator, _InputIterator, _Allocator) - -> set<__iter_value_type<_InputIterator>, less<__iter_value_type<_InputIterator>>, _Allocator>; + -> set<__iterator_value_type<_InputIterator>, less<__iterator_value_type<_InputIterator>>, _Allocator>; # if _LIBCPP_STD_VER >= 23 template <ranges::input_range _Range, class _Allocator, class = enable_if_t<__is_allocator_v<_Allocator>>> @@ -1301,30 +1311,38 @@ public: } # endif // _LIBCPP_STD_VER >= 20 - _LIBCPP_HIDE_FROM_ABI iterator lower_bound(const key_type& __k) { return __tree_.lower_bound(__k); } - _LIBCPP_HIDE_FROM_ABI const_iterator lower_bound(const key_type& __k) const { return __tree_.lower_bound(__k); } + _LIBCPP_HIDE_FROM_ABI iterator lower_bound(const key_type& __k) { return __tree_.__lower_bound_multi(__k); } + + _LIBCPP_HIDE_FROM_ABI const_iterator lower_bound(const key_type& __k) const { + return __tree_.__lower_bound_multi(__k); + } + # if _LIBCPP_STD_VER >= 14 template <typename _K2, enable_if_t<__is_transparent_v<_Compare, _K2>, int> = 0> _LIBCPP_HIDE_FROM_ABI iterator lower_bound(const _K2& __k) { - return __tree_.lower_bound(__k); + return __tree_.__lower_bound_multi(__k); } template <typename _K2, enable_if_t<__is_transparent_v<_Compare, _K2>, int> = 0> _LIBCPP_HIDE_FROM_ABI const_iterator lower_bound(const _K2& __k) const { - return __tree_.lower_bound(__k); + return __tree_.__lower_bound_multi(__k); } # endif - _LIBCPP_HIDE_FROM_ABI iterator upper_bound(const key_type& __k) { return __tree_.upper_bound(__k); } - _LIBCPP_HIDE_FROM_ABI const_iterator upper_bound(const key_type& __k) const { return __tree_.upper_bound(__k); } + _LIBCPP_HIDE_FROM_ABI iterator upper_bound(const key_type& __k) { return __tree_.__upper_bound_multi(__k); } + + _LIBCPP_HIDE_FROM_ABI const_iterator upper_bound(const key_type& __k) const { + return __tree_.__upper_bound_multi(__k); + } + # if _LIBCPP_STD_VER >= 14 template <typename _K2, enable_if_t<__is_transparent_v<_Compare, _K2>, int> = 0> _LIBCPP_HIDE_FROM_ABI iterator upper_bound(const _K2& __k) { - return __tree_.upper_bound(__k); + return __tree_.__upper_bound_multi(__k); } template <typename _K2, enable_if_t<__is_transparent_v<_Compare, _K2>, int> = 0> _LIBCPP_HIDE_FROM_ABI const_iterator upper_bound(const _K2& __k) const { - return __tree_.upper_bound(__k); + return __tree_.__upper_bound_multi(__k); } # endif @@ -1348,13 +1366,13 @@ public: # if _LIBCPP_STD_VER >= 17 template <class _InputIterator, - class _Compare = less<__iter_value_type<_InputIterator>>, - class _Allocator = allocator<__iter_value_type<_InputIterator>>, + class _Compare = less<__iterator_value_type<_InputIterator>>, + class _Allocator = allocator<__iterator_value_type<_InputIterator>>, class = enable_if_t<__has_input_iterator_category<_InputIterator>::value, void>, class = enable_if_t<__is_allocator_v<_Allocator>>, class = enable_if_t<!__is_allocator_v<_Compare>>> multiset(_InputIterator, _InputIterator, _Compare = _Compare(), _Allocator = _Allocator()) - -> multiset<__iter_value_type<_InputIterator>, _Compare, _Allocator>; + -> multiset<__iterator_value_type<_InputIterator>, _Compare, _Allocator>; # if _LIBCPP_STD_VER >= 23 template <ranges::input_range _Range, @@ -1379,7 +1397,7 @@ template <class _InputIterator, class = enable_if_t<__has_input_iterator_category<_InputIterator>::value, void>, class = enable_if_t<__is_allocator_v<_Allocator>>> multiset(_InputIterator, _InputIterator, _Allocator) - -> multiset<__iter_value_type<_InputIterator>, less<__iter_value_type<_InputIterator>>, _Allocator>; + -> multiset<__iterator_value_type<_InputIterator>, less<__iterator_value_type<_InputIterator>>, _Allocator>; # if _LIBCPP_STD_VER >= 23 template <ranges::input_range _Range, class _Allocator, class = enable_if_t<__is_allocator_v<_Allocator>>> |