aboutsummaryrefslogtreecommitdiff
path: root/contrib/llvm-project/libcxx/include/map
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/llvm-project/libcxx/include/map')
-rw-r--r--contrib/llvm-project/libcxx/include/map2618
1 files changed, 1137 insertions, 1481 deletions
diff --git a/contrib/llvm-project/libcxx/include/map b/contrib/llvm-project/libcxx/include/map
index 82a296f9cb8d..f122f2ebb15b 100644
--- a/contrib/llvm-project/libcxx/include/map
+++ b/contrib/llvm-project/libcxx/include/map
@@ -619,266 +619,220 @@ erase_if(multimap<Key, T, Compare, Allocator>& c, Predicate pred); // C++20
_LIBCPP_BEGIN_NAMESPACE_STD
-template <class _Key, class _CP, class _Compare,
+template <class _Key,
+ class _CP,
+ class _Compare,
bool = is_empty<_Compare>::value && !__libcpp_is_final<_Compare>::value>
-class __map_value_compare
- : private _Compare
-{
+class __map_value_compare : private _Compare {
public:
- _LIBCPP_HIDE_FROM_ABI
- __map_value_compare()
- _NOEXCEPT_(is_nothrow_default_constructible<_Compare>::value)
- : _Compare() {}
- _LIBCPP_HIDE_FROM_ABI
- __map_value_compare(_Compare __c)
- _NOEXCEPT_(is_nothrow_copy_constructible<_Compare>::value)
- : _Compare(__c) {}
- _LIBCPP_HIDE_FROM_ABI
- const _Compare& key_comp() const _NOEXCEPT {return *this;}
- _LIBCPP_HIDE_FROM_ABI
- bool operator()(const _CP& __x, const _CP& __y) const
- {return static_cast<const _Compare&>(*this)(__x.__get_value().first, __y.__get_value().first);}
- _LIBCPP_HIDE_FROM_ABI
- bool operator()(const _CP& __x, const _Key& __y) const
- {return static_cast<const _Compare&>(*this)(__x.__get_value().first, __y);}
- _LIBCPP_HIDE_FROM_ABI
- bool operator()(const _Key& __x, const _CP& __y) const
- {return static_cast<const _Compare&>(*this)(__x, __y.__get_value().first);}
- _LIBCPP_HIDE_FROM_ABI void swap(__map_value_compare& __y)
- _NOEXCEPT_(__is_nothrow_swappable<_Compare>::value)
- {
- using std::swap;
- swap(static_cast<_Compare&>(*this), static_cast<_Compare&>(__y));
- }
+ _LIBCPP_HIDE_FROM_ABI __map_value_compare() _NOEXCEPT_(is_nothrow_default_constructible<_Compare>::value)
+ : _Compare() {}
+ _LIBCPP_HIDE_FROM_ABI __map_value_compare(_Compare __c) _NOEXCEPT_(is_nothrow_copy_constructible<_Compare>::value)
+ : _Compare(__c) {}
+ _LIBCPP_HIDE_FROM_ABI const _Compare& key_comp() const _NOEXCEPT { return *this; }
+ _LIBCPP_HIDE_FROM_ABI bool operator()(const _CP& __x, const _CP& __y) const {
+ return static_cast<const _Compare&>(*this)(__x.__get_value().first, __y.__get_value().first);
+ }
+ _LIBCPP_HIDE_FROM_ABI bool operator()(const _CP& __x, const _Key& __y) const {
+ return static_cast<const _Compare&>(*this)(__x.__get_value().first, __y);
+ }
+ _LIBCPP_HIDE_FROM_ABI bool operator()(const _Key& __x, const _CP& __y) const {
+ return static_cast<const _Compare&>(*this)(__x, __y.__get_value().first);
+ }
+ _LIBCPP_HIDE_FROM_ABI void swap(__map_value_compare& __y) _NOEXCEPT_(__is_nothrow_swappable<_Compare>::value) {
+ using std::swap;
+ swap(static_cast<_Compare&>(*this), static_cast<_Compare&>(__y));
+ }
#if _LIBCPP_STD_VER >= 14
- template <typename _K2>
- _LIBCPP_HIDE_FROM_ABI
- bool operator()(const _K2& __x, const _CP& __y) const
- {return static_cast<const _Compare&>(*this)(__x, __y.__get_value().first);}
-
- template <typename _K2>
- _LIBCPP_HIDE_FROM_ABI
- bool operator()(const _CP& __x, const _K2& __y) const
- {return static_cast<const _Compare&>(*this)(__x.__get_value().first, __y);}
+ template <typename _K2>
+ _LIBCPP_HIDE_FROM_ABI bool operator()(const _K2& __x, const _CP& __y) const {
+ return static_cast<const _Compare&>(*this)(__x, __y.__get_value().first);
+ }
+
+ template <typename _K2>
+ _LIBCPP_HIDE_FROM_ABI bool operator()(const _CP& __x, const _K2& __y) const {
+ return static_cast<const _Compare&>(*this)(__x.__get_value().first, __y);
+ }
#endif
};
template <class _Key, class _CP, class _Compare>
-class __map_value_compare<_Key, _CP, _Compare, false>
-{
- _Compare __comp_;
+class __map_value_compare<_Key, _CP, _Compare, false> {
+ _Compare __comp_;
public:
- _LIBCPP_HIDE_FROM_ABI
- __map_value_compare()
- _NOEXCEPT_(is_nothrow_default_constructible<_Compare>::value)
- : __comp_() {}
- _LIBCPP_HIDE_FROM_ABI
- __map_value_compare(_Compare __c)
- _NOEXCEPT_(is_nothrow_copy_constructible<_Compare>::value)
- : __comp_(__c) {}
- _LIBCPP_HIDE_FROM_ABI
- const _Compare& key_comp() const _NOEXCEPT {return __comp_;}
-
- _LIBCPP_HIDE_FROM_ABI
- bool operator()(const _CP& __x, const _CP& __y) const
- {return __comp_(__x.__get_value().first, __y.__get_value().first);}
- _LIBCPP_HIDE_FROM_ABI
- bool operator()(const _CP& __x, const _Key& __y) const
- {return __comp_(__x.__get_value().first, __y);}
- _LIBCPP_HIDE_FROM_ABI
- bool operator()(const _Key& __x, const _CP& __y) const
- {return __comp_(__x, __y.__get_value().first);}
- void swap(__map_value_compare& __y)
- _NOEXCEPT_(__is_nothrow_swappable<_Compare>::value)
- {
- using std::swap;
- swap(__comp_, __y.__comp_);
- }
+ _LIBCPP_HIDE_FROM_ABI __map_value_compare() _NOEXCEPT_(is_nothrow_default_constructible<_Compare>::value)
+ : __comp_() {}
+ _LIBCPP_HIDE_FROM_ABI __map_value_compare(_Compare __c) _NOEXCEPT_(is_nothrow_copy_constructible<_Compare>::value)
+ : __comp_(__c) {}
+ _LIBCPP_HIDE_FROM_ABI const _Compare& key_comp() const _NOEXCEPT { return __comp_; }
+
+ _LIBCPP_HIDE_FROM_ABI bool operator()(const _CP& __x, const _CP& __y) const {
+ return __comp_(__x.__get_value().first, __y.__get_value().first);
+ }
+ _LIBCPP_HIDE_FROM_ABI bool operator()(const _CP& __x, const _Key& __y) const {
+ return __comp_(__x.__get_value().first, __y);
+ }
+ _LIBCPP_HIDE_FROM_ABI bool operator()(const _Key& __x, const _CP& __y) const {
+ return __comp_(__x, __y.__get_value().first);
+ }
+ void swap(__map_value_compare& __y) _NOEXCEPT_(__is_nothrow_swappable<_Compare>::value) {
+ using std::swap;
+ swap(__comp_, __y.__comp_);
+ }
#if _LIBCPP_STD_VER >= 14
- template <typename _K2>
- _LIBCPP_HIDE_FROM_ABI
- bool operator()(const _K2& __x, const _CP& __y) const
- {return __comp_(__x, __y.__get_value().first);}
-
- template <typename _K2>
- _LIBCPP_HIDE_FROM_ABI
- bool operator()(const _CP& __x, const _K2& __y) const
- {return __comp_(__x.__get_value().first, __y);}
+ template <typename _K2>
+ _LIBCPP_HIDE_FROM_ABI bool operator()(const _K2& __x, const _CP& __y) const {
+ return __comp_(__x, __y.__get_value().first);
+ }
+
+ template <typename _K2>
+ _LIBCPP_HIDE_FROM_ABI bool operator()(const _CP& __x, const _K2& __y) const {
+ return __comp_(__x.__get_value().first, __y);
+ }
#endif
};
template <class _Key, class _CP, class _Compare, bool __b>
-inline _LIBCPP_HIDE_FROM_ABI
-void
-swap(__map_value_compare<_Key, _CP, _Compare, __b>& __x,
- __map_value_compare<_Key, _CP, _Compare, __b>& __y)
- _NOEXCEPT_(_NOEXCEPT_(__x.swap(__y)))
-{
- __x.swap(__y);
+inline _LIBCPP_HIDE_FROM_ABI void
+swap(__map_value_compare<_Key, _CP, _Compare, __b>& __x, __map_value_compare<_Key, _CP, _Compare, __b>& __y)
+ _NOEXCEPT_(_NOEXCEPT_(__x.swap(__y))) {
+ __x.swap(__y);
}
template <class _Allocator>
-class __map_node_destructor
-{
- typedef _Allocator allocator_type;
- typedef allocator_traits<allocator_type> __alloc_traits;
+class __map_node_destructor {
+ typedef _Allocator allocator_type;
+ typedef allocator_traits<allocator_type> __alloc_traits;
public:
- typedef typename __alloc_traits::pointer pointer;
+ typedef typename __alloc_traits::pointer pointer;
private:
- allocator_type& __na_;
+ allocator_type& __na_;
- __map_node_destructor& operator=(const __map_node_destructor&);
+ __map_node_destructor& operator=(const __map_node_destructor&);
public:
- bool __first_constructed;
- bool __second_constructed;
+ bool __first_constructed;
+ bool __second_constructed;
- _LIBCPP_HIDE_FROM_ABI
- explicit __map_node_destructor(allocator_type& __na) _NOEXCEPT
- : __na_(__na),
- __first_constructed(false),
- __second_constructed(false)
- {}
+ _LIBCPP_HIDE_FROM_ABI explicit __map_node_destructor(allocator_type& __na) _NOEXCEPT
+ : __na_(__na),
+ __first_constructed(false),
+ __second_constructed(false) {}
#ifndef _LIBCPP_CXX03_LANG
- _LIBCPP_HIDE_FROM_ABI
- __map_node_destructor(__tree_node_destructor<allocator_type>&& __x) _NOEXCEPT
- : __na_(__x.__na_),
- __first_constructed(__x.__value_constructed),
- __second_constructed(__x.__value_constructed)
- {
- __x.__value_constructed = false;
- }
+ _LIBCPP_HIDE_FROM_ABI __map_node_destructor(__tree_node_destructor<allocator_type>&& __x) _NOEXCEPT
+ : __na_(__x.__na_),
+ __first_constructed(__x.__value_constructed),
+ __second_constructed(__x.__value_constructed) {
+ __x.__value_constructed = false;
+ }
#endif // _LIBCPP_CXX03_LANG
- _LIBCPP_HIDE_FROM_ABI
- void operator()(pointer __p) _NOEXCEPT
- {
- if (__second_constructed)
- __alloc_traits::destroy(__na_, std::addressof(__p->__value_.__get_value().second));
- if (__first_constructed)
- __alloc_traits::destroy(__na_, std::addressof(__p->__value_.__get_value().first));
- if (__p)
- __alloc_traits::deallocate(__na_, __p, 1);
- }
+ _LIBCPP_HIDE_FROM_ABI void operator()(pointer __p) _NOEXCEPT {
+ if (__second_constructed)
+ __alloc_traits::destroy(__na_, std::addressof(__p->__value_.__get_value().second));
+ if (__first_constructed)
+ __alloc_traits::destroy(__na_, std::addressof(__p->__value_.__get_value().first));
+ if (__p)
+ __alloc_traits::deallocate(__na_, __p, 1);
+ }
};
template <class _Key, class _Tp, class _Compare, class _Allocator>
- class map;
+class map;
template <class _Key, class _Tp, class _Compare, class _Allocator>
- class multimap;
-template <class _TreeIterator> class __map_const_iterator;
+class multimap;
+template <class _TreeIterator>
+class __map_const_iterator;
#ifndef _LIBCPP_CXX03_LANG
template <class _Key, class _Tp>
-struct _LIBCPP_STANDALONE_DEBUG __value_type
-{
- typedef _Key key_type;
- typedef _Tp mapped_type;
- typedef pair<const key_type, mapped_type> value_type;
- typedef pair<key_type&, mapped_type&> __nc_ref_pair_type;
- typedef pair<key_type&&, mapped_type&&> __nc_rref_pair_type;
+struct _LIBCPP_STANDALONE_DEBUG __value_type {
+ typedef _Key key_type;
+ typedef _Tp mapped_type;
+ typedef pair<const key_type, mapped_type> value_type;
+ typedef pair<key_type&, mapped_type&> __nc_ref_pair_type;
+ typedef pair<key_type&&, mapped_type&&> __nc_rref_pair_type;
private:
- value_type __cc_;
+ value_type __cc_;
public:
- _LIBCPP_HIDE_FROM_ABI
- value_type& __get_value()
- {
-#if _LIBCPP_STD_VER >= 17
- return *std::launder(std::addressof(__cc_));
-#else
- return __cc_;
-#endif
- }
-
- _LIBCPP_HIDE_FROM_ABI
- const value_type& __get_value() const
- {
-#if _LIBCPP_STD_VER >= 17
- return *std::launder(std::addressof(__cc_));
-#else
- return __cc_;
-#endif
- }
-
- _LIBCPP_HIDE_FROM_ABI
- __nc_ref_pair_type __ref()
- {
- value_type& __v = __get_value();
- return __nc_ref_pair_type(const_cast<key_type&>(__v.first), __v.second);
- }
-
- _LIBCPP_HIDE_FROM_ABI
- __nc_rref_pair_type __move()
- {
- value_type& __v = __get_value();
- return __nc_rref_pair_type(
- std::move(const_cast<key_type&>(__v.first)),
- std::move(__v.second));
- }
-
- _LIBCPP_HIDE_FROM_ABI
- __value_type& operator=(const __value_type& __v)
- {
- __ref() = __v.__get_value();
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI
- __value_type& operator=(__value_type&& __v)
- {
- __ref() = __v.__move();
- return *this;
- }
-
- template <class _ValueTp,
- class = __enable_if_t<__is_same_uncvref<_ValueTp, value_type>::value>
- >
- _LIBCPP_HIDE_FROM_ABI
- __value_type& operator=(_ValueTp&& __v)
- {
- __ref() = std::forward<_ValueTp>(__v);
- return *this;
- }
+ _LIBCPP_HIDE_FROM_ABI value_type& __get_value() {
+# if _LIBCPP_STD_VER >= 17
+ return *std::launder(std::addressof(__cc_));
+# else
+ return __cc_;
+# endif
+ }
+
+ _LIBCPP_HIDE_FROM_ABI const value_type& __get_value() const {
+# if _LIBCPP_STD_VER >= 17
+ return *std::launder(std::addressof(__cc_));
+# else
+ return __cc_;
+# endif
+ }
+
+ _LIBCPP_HIDE_FROM_ABI __nc_ref_pair_type __ref() {
+ value_type& __v = __get_value();
+ return __nc_ref_pair_type(const_cast<key_type&>(__v.first), __v.second);
+ }
+
+ _LIBCPP_HIDE_FROM_ABI __nc_rref_pair_type __move() {
+ value_type& __v = __get_value();
+ return __nc_rref_pair_type(std::move(const_cast<key_type&>(__v.first)), std::move(__v.second));
+ }
+
+ _LIBCPP_HIDE_FROM_ABI __value_type& operator=(const __value_type& __v) {
+ __ref() = __v.__get_value();
+ return *this;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI __value_type& operator=(__value_type&& __v) {
+ __ref() = __v.__move();
+ return *this;
+ }
+
+ template <class _ValueTp, class = __enable_if_t<__is_same_uncvref<_ValueTp, value_type>::value> >
+ _LIBCPP_HIDE_FROM_ABI __value_type& operator=(_ValueTp&& __v) {
+ __ref() = std::forward<_ValueTp>(__v);
+ return *this;
+ }
private:
- __value_type() = delete;
- ~__value_type() = delete;
- __value_type(const __value_type&) = delete;
- __value_type(__value_type&&) = delete;
+ __value_type() = delete;
+ ~__value_type() = delete;
+ __value_type(const __value_type&) = delete;
+ __value_type(__value_type&&) = delete;
};
#else
template <class _Key, class _Tp>
-struct __value_type
-{
- typedef _Key key_type;
- typedef _Tp mapped_type;
- typedef pair<const key_type, mapped_type> value_type;
+struct __value_type {
+ typedef _Key key_type;
+ typedef _Tp mapped_type;
+ typedef pair<const key_type, mapped_type> value_type;
private:
- value_type __cc_;
+ value_type __cc_;
public:
- _LIBCPP_HIDE_FROM_ABI
- value_type& __get_value() { return __cc_; }
- _LIBCPP_HIDE_FROM_ABI
- const value_type& __get_value() const { return __cc_; }
+ _LIBCPP_HIDE_FROM_ABI value_type& __get_value() { return __cc_; }
+ _LIBCPP_HIDE_FROM_ABI const value_type& __get_value() const { return __cc_; }
private:
- __value_type();
- __value_type(__value_type const&);
- __value_type& operator=(__value_type const&);
- ~__value_type();
+ __value_type();
+ __value_type(__value_type const&);
+ __value_type& operator=(__value_type const&);
+ ~__value_type();
};
#endif // _LIBCPP_CXX03_LANG
@@ -887,937 +841,778 @@ template <class _Tp>
struct __extract_key_value_types;
template <class _Key, class _Tp>
-struct __extract_key_value_types<__value_type<_Key, _Tp> >
-{
+struct __extract_key_value_types<__value_type<_Key, _Tp> > {
typedef _Key const __key_type;
- typedef _Tp __mapped_type;
+ typedef _Tp __mapped_type;
};
template <class _TreeIterator>
-class _LIBCPP_TEMPLATE_VIS __map_iterator
-{
- typedef typename _TreeIterator::_NodeTypes _NodeTypes;
- typedef typename _TreeIterator::__pointer_traits __pointer_traits;
+class _LIBCPP_TEMPLATE_VIS __map_iterator {
+ typedef typename _TreeIterator::_NodeTypes _NodeTypes;
+ typedef typename _TreeIterator::__pointer_traits __pointer_traits;
- _TreeIterator __i_;
+ _TreeIterator __i_;
public:
- typedef bidirectional_iterator_tag iterator_category;
- typedef typename _NodeTypes::__map_value_type value_type;
- typedef typename _TreeIterator::difference_type difference_type;
- typedef value_type& reference;
- typedef typename _NodeTypes::__map_value_type_pointer pointer;
-
- _LIBCPP_HIDE_FROM_ABI
- __map_iterator() _NOEXCEPT {}
-
- _LIBCPP_HIDE_FROM_ABI
- __map_iterator(_TreeIterator __i) _NOEXCEPT : __i_(__i) {}
-
- _LIBCPP_HIDE_FROM_ABI
- reference operator*() const {return __i_->__get_value();}
- _LIBCPP_HIDE_FROM_ABI
- pointer operator->() const {return pointer_traits<pointer>::pointer_to(__i_->__get_value());}
-
- _LIBCPP_HIDE_FROM_ABI
- __map_iterator& operator++() {++__i_; return *this;}
- _LIBCPP_HIDE_FROM_ABI
- __map_iterator operator++(int)
- {
- __map_iterator __t(*this);
- ++(*this);
- return __t;
- }
-
- _LIBCPP_HIDE_FROM_ABI
- __map_iterator& operator--() {--__i_; return *this;}
- _LIBCPP_HIDE_FROM_ABI
- __map_iterator operator--(int)
- {
- __map_iterator __t(*this);
- --(*this);
- return __t;
- }
-
- friend _LIBCPP_HIDE_FROM_ABI
- bool operator==(const __map_iterator& __x, const __map_iterator& __y)
- {return __x.__i_ == __y.__i_;}
- friend
- _LIBCPP_HIDE_FROM_ABI
- bool operator!=(const __map_iterator& __x, const __map_iterator& __y)
- {return __x.__i_ != __y.__i_;}
-
- template <class, class, class, class> friend class _LIBCPP_TEMPLATE_VIS map;
- template <class, class, class, class> friend class _LIBCPP_TEMPLATE_VIS multimap;
- template <class> friend class _LIBCPP_TEMPLATE_VIS __map_const_iterator;
+ typedef bidirectional_iterator_tag iterator_category;
+ typedef typename _NodeTypes::__map_value_type value_type;
+ typedef typename _TreeIterator::difference_type difference_type;
+ typedef value_type& reference;
+ typedef typename _NodeTypes::__map_value_type_pointer pointer;
+
+ _LIBCPP_HIDE_FROM_ABI __map_iterator() _NOEXCEPT {}
+
+ _LIBCPP_HIDE_FROM_ABI __map_iterator(_TreeIterator __i) _NOEXCEPT : __i_(__i) {}
+
+ _LIBCPP_HIDE_FROM_ABI reference operator*() const { return __i_->__get_value(); }
+ _LIBCPP_HIDE_FROM_ABI pointer operator->() const { return pointer_traits<pointer>::pointer_to(__i_->__get_value()); }
+
+ _LIBCPP_HIDE_FROM_ABI __map_iterator& operator++() {
+ ++__i_;
+ return *this;
+ }
+ _LIBCPP_HIDE_FROM_ABI __map_iterator operator++(int) {
+ __map_iterator __t(*this);
+ ++(*this);
+ return __t;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI __map_iterator& operator--() {
+ --__i_;
+ return *this;
+ }
+ _LIBCPP_HIDE_FROM_ABI __map_iterator operator--(int) {
+ __map_iterator __t(*this);
+ --(*this);
+ return __t;
+ }
+
+ friend _LIBCPP_HIDE_FROM_ABI bool operator==(const __map_iterator& __x, const __map_iterator& __y) {
+ return __x.__i_ == __y.__i_;
+ }
+ friend _LIBCPP_HIDE_FROM_ABI bool operator!=(const __map_iterator& __x, const __map_iterator& __y) {
+ return __x.__i_ != __y.__i_;
+ }
+
+ template <class, class, class, class>
+ friend class _LIBCPP_TEMPLATE_VIS map;
+ template <class, class, class, class>
+ friend class _LIBCPP_TEMPLATE_VIS multimap;
+ template <class>
+ friend class _LIBCPP_TEMPLATE_VIS __map_const_iterator;
};
template <class _TreeIterator>
-class _LIBCPP_TEMPLATE_VIS __map_const_iterator
-{
- typedef typename _TreeIterator::_NodeTypes _NodeTypes;
- typedef typename _TreeIterator::__pointer_traits __pointer_traits;
+class _LIBCPP_TEMPLATE_VIS __map_const_iterator {
+ typedef typename _TreeIterator::_NodeTypes _NodeTypes;
+ typedef typename _TreeIterator::__pointer_traits __pointer_traits;
- _TreeIterator __i_;
+ _TreeIterator __i_;
public:
- typedef bidirectional_iterator_tag iterator_category;
- typedef typename _NodeTypes::__map_value_type value_type;
- typedef typename _TreeIterator::difference_type difference_type;
- typedef const value_type& reference;
- typedef typename _NodeTypes::__const_map_value_type_pointer pointer;
-
- _LIBCPP_HIDE_FROM_ABI
- __map_const_iterator() _NOEXCEPT {}
-
- _LIBCPP_HIDE_FROM_ABI
- __map_const_iterator(_TreeIterator __i) _NOEXCEPT : __i_(__i) {}
- _LIBCPP_HIDE_FROM_ABI
- __map_const_iterator(__map_iterator<
- typename _TreeIterator::__non_const_iterator> __i) _NOEXCEPT
- : __i_(__i.__i_) {}
-
- _LIBCPP_HIDE_FROM_ABI
- reference operator*() const {return __i_->__get_value();}
- _LIBCPP_HIDE_FROM_ABI
- pointer operator->() const {return pointer_traits<pointer>::pointer_to(__i_->__get_value());}
-
- _LIBCPP_HIDE_FROM_ABI
- __map_const_iterator& operator++() {++__i_; return *this;}
- _LIBCPP_HIDE_FROM_ABI
- __map_const_iterator operator++(int)
- {
- __map_const_iterator __t(*this);
- ++(*this);
- return __t;
- }
-
- _LIBCPP_HIDE_FROM_ABI
- __map_const_iterator& operator--() {--__i_; return *this;}
- _LIBCPP_HIDE_FROM_ABI
- __map_const_iterator operator--(int)
- {
- __map_const_iterator __t(*this);
- --(*this);
- return __t;
- }
-
- friend _LIBCPP_HIDE_FROM_ABI
- bool operator==(const __map_const_iterator& __x, const __map_const_iterator& __y)
- {return __x.__i_ == __y.__i_;}
- friend _LIBCPP_HIDE_FROM_ABI
- bool operator!=(const __map_const_iterator& __x, const __map_const_iterator& __y)
- {return __x.__i_ != __y.__i_;}
-
- template <class, class, class, class> friend class _LIBCPP_TEMPLATE_VIS map;
- template <class, class, class, class> friend class _LIBCPP_TEMPLATE_VIS multimap;
- template <class, class, class> friend class _LIBCPP_TEMPLATE_VIS __tree_const_iterator;
+ typedef bidirectional_iterator_tag iterator_category;
+ typedef typename _NodeTypes::__map_value_type value_type;
+ typedef typename _TreeIterator::difference_type difference_type;
+ typedef const value_type& reference;
+ typedef typename _NodeTypes::__const_map_value_type_pointer pointer;
+
+ _LIBCPP_HIDE_FROM_ABI __map_const_iterator() _NOEXCEPT {}
+
+ _LIBCPP_HIDE_FROM_ABI __map_const_iterator(_TreeIterator __i) _NOEXCEPT : __i_(__i) {}
+ _LIBCPP_HIDE_FROM_ABI
+ __map_const_iterator(__map_iterator< typename _TreeIterator::__non_const_iterator> __i) _NOEXCEPT : __i_(__i.__i_) {}
+
+ _LIBCPP_HIDE_FROM_ABI reference operator*() const { return __i_->__get_value(); }
+ _LIBCPP_HIDE_FROM_ABI pointer operator->() const { return pointer_traits<pointer>::pointer_to(__i_->__get_value()); }
+
+ _LIBCPP_HIDE_FROM_ABI __map_const_iterator& operator++() {
+ ++__i_;
+ return *this;
+ }
+ _LIBCPP_HIDE_FROM_ABI __map_const_iterator operator++(int) {
+ __map_const_iterator __t(*this);
+ ++(*this);
+ return __t;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI __map_const_iterator& operator--() {
+ --__i_;
+ return *this;
+ }
+ _LIBCPP_HIDE_FROM_ABI __map_const_iterator operator--(int) {
+ __map_const_iterator __t(*this);
+ --(*this);
+ return __t;
+ }
+
+ friend _LIBCPP_HIDE_FROM_ABI bool operator==(const __map_const_iterator& __x, const __map_const_iterator& __y) {
+ return __x.__i_ == __y.__i_;
+ }
+ friend _LIBCPP_HIDE_FROM_ABI bool operator!=(const __map_const_iterator& __x, const __map_const_iterator& __y) {
+ return __x.__i_ != __y.__i_;
+ }
+
+ template <class, class, class, class>
+ friend class _LIBCPP_TEMPLATE_VIS map;
+ template <class, class, class, class>
+ friend class _LIBCPP_TEMPLATE_VIS multimap;
+ template <class, class, class>
+ friend class _LIBCPP_TEMPLATE_VIS __tree_const_iterator;
};
-template <class _Key, class _Tp, class _Compare = less<_Key>,
- class _Allocator = allocator<pair<const _Key, _Tp> > >
-class _LIBCPP_TEMPLATE_VIS map
-{
+template <class _Key, class _Tp, class _Compare = less<_Key>, class _Allocator = allocator<pair<const _Key, _Tp> > >
+class _LIBCPP_TEMPLATE_VIS map {
public:
- // types:
- typedef _Key key_type;
- typedef _Tp mapped_type;
- typedef pair<const key_type, mapped_type> value_type;
- typedef __type_identity_t<_Compare> key_compare;
- typedef __type_identity_t<_Allocator> allocator_type;
- typedef value_type& reference;
- typedef const value_type& const_reference;
+ // types:
+ typedef _Key key_type;
+ typedef _Tp mapped_type;
+ typedef pair<const key_type, mapped_type> value_type;
+ typedef __type_identity_t<_Compare> key_compare;
+ typedef __type_identity_t<_Allocator> allocator_type;
+ typedef value_type& reference;
+ typedef const value_type& const_reference;
- static_assert((is_same<typename allocator_type::value_type, value_type>::value),
- "Allocator::value_type must be same type as value_type");
+ static_assert((is_same<typename allocator_type::value_type, value_type>::value),
+ "Allocator::value_type must be same type as value_type");
- class _LIBCPP_TEMPLATE_VIS value_compare
- : public __binary_function<value_type, value_type, bool>
- {
- friend class map;
- protected:
- key_compare comp;
+ class _LIBCPP_TEMPLATE_VIS value_compare : public __binary_function<value_type, value_type, bool> {
+ friend class map;
- _LIBCPP_HIDE_FROM_ABI value_compare(key_compare __c) : comp(__c) {}
- public:
- _LIBCPP_HIDE_FROM_ABI
- bool operator()(const value_type& __x, const value_type& __y) const
- {return comp(__x.first, __y.first);}
- };
+ protected:
+ key_compare comp;
-private:
+ _LIBCPP_HIDE_FROM_ABI value_compare(key_compare __c) : comp(__c) {}
- typedef std::__value_type<key_type, mapped_type> __value_type;
- typedef __map_value_compare<key_type, __value_type, key_compare> __vc;
- typedef __rebind_alloc<allocator_traits<allocator_type>, __value_type> __allocator_type;
- typedef __tree<__value_type, __vc, __allocator_type> __base;
- typedef typename __base::__node_traits __node_traits;
- typedef allocator_traits<allocator_type> __alloc_traits;
+ public:
+ _LIBCPP_HIDE_FROM_ABI bool operator()(const value_type& __x, const value_type& __y) const {
+ return comp(__x.first, __y.first);
+ }
+ };
- static_assert(is_same<allocator_type, __rebind_alloc<__alloc_traits, value_type> >::value,
- "[allocator.requirements] states that rebinding an allocator to the same type should result in the "
- "original allocator");
+private:
+ typedef std::__value_type<key_type, mapped_type> __value_type;
+ typedef __map_value_compare<key_type, __value_type, key_compare> __vc;
+ typedef __rebind_alloc<allocator_traits<allocator_type>, __value_type> __allocator_type;
+ typedef __tree<__value_type, __vc, __allocator_type> __base;
+ typedef typename __base::__node_traits __node_traits;
+ typedef allocator_traits<allocator_type> __alloc_traits;
- __base __tree_;
+ static_assert(is_same<allocator_type, __rebind_alloc<__alloc_traits, value_type> >::value,
+ "[allocator.requirements] states that rebinding an allocator to the same type should result in the "
+ "original allocator");
+
+ __base __tree_;
public:
- typedef typename __alloc_traits::pointer pointer;
- typedef typename __alloc_traits::const_pointer const_pointer;
- typedef typename __alloc_traits::size_type size_type;
- typedef typename __alloc_traits::difference_type difference_type;
- typedef __map_iterator<typename __base::iterator> iterator;
- typedef __map_const_iterator<typename __base::const_iterator> const_iterator;
- typedef std::reverse_iterator<iterator> reverse_iterator;
- typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+ typedef typename __alloc_traits::pointer pointer;
+ typedef typename __alloc_traits::const_pointer const_pointer;
+ typedef typename __alloc_traits::size_type size_type;
+ typedef typename __alloc_traits::difference_type difference_type;
+ typedef __map_iterator<typename __base::iterator> iterator;
+ typedef __map_const_iterator<typename __base::const_iterator> const_iterator;
+ typedef std::reverse_iterator<iterator> reverse_iterator;
+ typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
#if _LIBCPP_STD_VER >= 17
- typedef __map_node_handle<typename __base::__node, allocator_type> node_type;
- typedef __insert_return_type<iterator, node_type> insert_return_type;
+ typedef __map_node_handle<typename __base::__node, allocator_type> node_type;
+ typedef __insert_return_type<iterator, node_type> insert_return_type;
#endif
- template <class _Key2, class _Value2, class _Comp2, class _Alloc2>
- friend class _LIBCPP_TEMPLATE_VIS map;
- template <class _Key2, class _Value2, class _Comp2, class _Alloc2>
- friend class _LIBCPP_TEMPLATE_VIS multimap;
+ template <class _Key2, class _Value2, class _Comp2, class _Alloc2>
+ friend class _LIBCPP_TEMPLATE_VIS map;
+ template <class _Key2, class _Value2, class _Comp2, class _Alloc2>
+ friend class _LIBCPP_TEMPLATE_VIS multimap;
- _LIBCPP_HIDE_FROM_ABI
- map()
- _NOEXCEPT_(
- is_nothrow_default_constructible<allocator_type>::value &&
- is_nothrow_default_constructible<key_compare>::value &&
- is_nothrow_copy_constructible<key_compare>::value)
- : __tree_(__vc(key_compare())) {}
+ _LIBCPP_HIDE_FROM_ABI map() _NOEXCEPT_(
+ is_nothrow_default_constructible<allocator_type>::value&& is_nothrow_default_constructible<key_compare>::value&&
+ is_nothrow_copy_constructible<key_compare>::value)
+ : __tree_(__vc(key_compare())) {}
- _LIBCPP_HIDE_FROM_ABI
- explicit map(const key_compare& __comp)
- _NOEXCEPT_(
- is_nothrow_default_constructible<allocator_type>::value &&
- is_nothrow_copy_constructible<key_compare>::value)
- : __tree_(__vc(__comp)) {}
-
- _LIBCPP_HIDE_FROM_ABI
- explicit map(const key_compare& __comp, const allocator_type& __a)
- : __tree_(__vc(__comp), typename __base::allocator_type(__a)) {}
-
- template <class _InputIterator>
- _LIBCPP_HIDE_FROM_ABI
- map(_InputIterator __f, _InputIterator __l,
- const key_compare& __comp = key_compare())
- : __tree_(__vc(__comp))
- {
- insert(__f, __l);
- }
-
- template <class _InputIterator>
- _LIBCPP_HIDE_FROM_ABI
- map(_InputIterator __f, _InputIterator __l,
- const key_compare& __comp, const allocator_type& __a)
- : __tree_(__vc(__comp), typename __base::allocator_type(__a))
- {
- insert(__f, __l);
- }
+ _LIBCPP_HIDE_FROM_ABI explicit map(const key_compare& __comp) _NOEXCEPT_(
+ is_nothrow_default_constructible<allocator_type>::value&& is_nothrow_copy_constructible<key_compare>::value)
+ : __tree_(__vc(__comp)) {}
+
+ _LIBCPP_HIDE_FROM_ABI explicit map(const key_compare& __comp, const allocator_type& __a)
+ : __tree_(__vc(__comp), typename __base::allocator_type(__a)) {}
+
+ template <class _InputIterator>
+ _LIBCPP_HIDE_FROM_ABI map(_InputIterator __f, _InputIterator __l, const key_compare& __comp = key_compare())
+ : __tree_(__vc(__comp)) {
+ insert(__f, __l);
+ }
+
+ template <class _InputIterator>
+ _LIBCPP_HIDE_FROM_ABI
+ map(_InputIterator __f, _InputIterator __l, const key_compare& __comp, const allocator_type& __a)
+ : __tree_(__vc(__comp), typename __base::allocator_type(__a)) {
+ insert(__f, __l);
+ }
#if _LIBCPP_STD_VER >= 23
- template <_ContainerCompatibleRange<value_type> _Range>
- _LIBCPP_HIDE_FROM_ABI
- map(from_range_t, _Range&& __range, const key_compare& __comp = key_compare(),
- const allocator_type& __a = allocator_type())
+ template <_ContainerCompatibleRange<value_type> _Range>
+ _LIBCPP_HIDE_FROM_ABI
+ map(from_range_t,
+ _Range&& __range,
+ const key_compare& __comp = key_compare(),
+ const allocator_type& __a = allocator_type())
: __tree_(__vc(__comp), typename __base::allocator_type(__a)) {
- insert_range(std::forward<_Range>(__range));
- }
+ insert_range(std::forward<_Range>(__range));
+ }
#endif
#if _LIBCPP_STD_VER >= 14
- template <class _InputIterator>
- _LIBCPP_HIDE_FROM_ABI
- map(_InputIterator __f, _InputIterator __l, const allocator_type& __a)
- : map(__f, __l, key_compare(), __a) {}
+ template <class _InputIterator>
+ _LIBCPP_HIDE_FROM_ABI map(_InputIterator __f, _InputIterator __l, const allocator_type& __a)
+ : map(__f, __l, key_compare(), __a) {}
#endif
#if _LIBCPP_STD_VER >= 23
- template <_ContainerCompatibleRange<value_type> _Range>
- _LIBCPP_HIDE_FROM_ABI
- map(from_range_t, _Range&& __range, const allocator_type& __a)
+ template <_ContainerCompatibleRange<value_type> _Range>
+ _LIBCPP_HIDE_FROM_ABI map(from_range_t, _Range&& __range, const allocator_type& __a)
: map(from_range, std::forward<_Range>(__range), key_compare(), __a) {}
#endif
- _LIBCPP_HIDE_FROM_ABI
- map(const map& __m)
- : __tree_(__m.__tree_)
- {
- insert(__m.begin(), __m.end());
- }
+ _LIBCPP_HIDE_FROM_ABI map(const map& __m) : __tree_(__m.__tree_) { insert(__m.begin(), __m.end()); }
- _LIBCPP_HIDE_FROM_ABI
- map& operator=(const map& __m)
- {
+ _LIBCPP_HIDE_FROM_ABI map& operator=(const map& __m) {
#ifndef _LIBCPP_CXX03_LANG
- __tree_ = __m.__tree_;
+ __tree_ = __m.__tree_;
#else
- if (this != std::addressof(__m)) {
- __tree_.clear();
- __tree_.value_comp() = __m.__tree_.value_comp();
- __tree_.__copy_assign_alloc(__m.__tree_);
- insert(__m.begin(), __m.end());
- }
+ if (this != std::addressof(__m)) {
+ __tree_.clear();
+ __tree_.value_comp() = __m.__tree_.value_comp();
+ __tree_.__copy_assign_alloc(__m.__tree_);
+ insert(__m.begin(), __m.end());
+ }
#endif
- return *this;
- }
+ return *this;
+ }
#ifndef _LIBCPP_CXX03_LANG
- _LIBCPP_HIDE_FROM_ABI
- map(map&& __m)
- _NOEXCEPT_(is_nothrow_move_constructible<__base>::value)
- : __tree_(std::move(__m.__tree_))
- {
- }
-
- _LIBCPP_HIDE_FROM_ABI map(map&& __m, const allocator_type& __a);
-
- _LIBCPP_HIDE_FROM_ABI
- map& operator=(map&& __m)
- _NOEXCEPT_(is_nothrow_move_assignable<__base>::value)
- {
- __tree_ = std::move(__m.__tree_);
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI
- map(initializer_list<value_type> __il, const key_compare& __comp = key_compare())
- : __tree_(__vc(__comp))
- {
- insert(__il.begin(), __il.end());
- }
-
- _LIBCPP_HIDE_FROM_ABI
- map(initializer_list<value_type> __il, const key_compare& __comp, const allocator_type& __a)
- : __tree_(__vc(__comp), typename __base::allocator_type(__a))
- {
- insert(__il.begin(), __il.end());
- }
+ _LIBCPP_HIDE_FROM_ABI map(map&& __m) _NOEXCEPT_(is_nothrow_move_constructible<__base>::value)
+ : __tree_(std::move(__m.__tree_)) {}
-#if _LIBCPP_STD_VER >= 14
- _LIBCPP_HIDE_FROM_ABI
- map(initializer_list<value_type> __il, const allocator_type& __a)
- : map(__il, key_compare(), __a) {}
-#endif
+ _LIBCPP_HIDE_FROM_ABI map(map&& __m, const allocator_type& __a);
+
+ _LIBCPP_HIDE_FROM_ABI map& operator=(map&& __m) _NOEXCEPT_(is_nothrow_move_assignable<__base>::value) {
+ __tree_ = std::move(__m.__tree_);
+ return *this;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI map(initializer_list<value_type> __il, const key_compare& __comp = key_compare())
+ : __tree_(__vc(__comp)) {
+ insert(__il.begin(), __il.end());
+ }
+
+ _LIBCPP_HIDE_FROM_ABI map(initializer_list<value_type> __il, const key_compare& __comp, const allocator_type& __a)
+ : __tree_(__vc(__comp), typename __base::allocator_type(__a)) {
+ insert(__il.begin(), __il.end());
+ }
+
+# if _LIBCPP_STD_VER >= 14
+ _LIBCPP_HIDE_FROM_ABI map(initializer_list<value_type> __il, const allocator_type& __a)
+ : map(__il, key_compare(), __a) {}
+# endif
- _LIBCPP_HIDE_FROM_ABI
- map& operator=(initializer_list<value_type> __il)
- {
- __tree_.__assign_unique(__il.begin(), __il.end());
- return *this;
- }
+ _LIBCPP_HIDE_FROM_ABI map& operator=(initializer_list<value_type> __il) {
+ __tree_.__assign_unique(__il.begin(), __il.end());
+ return *this;
+ }
#endif // _LIBCPP_CXX03_LANG
- _LIBCPP_HIDE_FROM_ABI
- explicit map(const allocator_type& __a)
- : __tree_(typename __base::allocator_type(__a))
- {
- }
-
- _LIBCPP_HIDE_FROM_ABI
- map(const map& __m, const allocator_type& __a)
- : __tree_(__m.__tree_.value_comp(), typename __base::allocator_type(__a))
- {
- insert(__m.begin(), __m.end());
- }
-
- _LIBCPP_HIDE_FROM_ABI
- ~map() {
- static_assert(sizeof(__diagnose_non_const_comparator<_Key, _Compare>()), "");
- }
+ _LIBCPP_HIDE_FROM_ABI explicit map(const allocator_type& __a) : __tree_(typename __base::allocator_type(__a)) {}
- _LIBCPP_HIDE_FROM_ABI
- iterator begin() _NOEXCEPT {return __tree_.begin();}
- _LIBCPP_HIDE_FROM_ABI
- const_iterator begin() const _NOEXCEPT {return __tree_.begin();}
- _LIBCPP_HIDE_FROM_ABI
- iterator end() _NOEXCEPT {return __tree_.end();}
- _LIBCPP_HIDE_FROM_ABI
- const_iterator end() const _NOEXCEPT {return __tree_.end();}
-
- _LIBCPP_HIDE_FROM_ABI
- reverse_iterator rbegin() _NOEXCEPT {return reverse_iterator(end());}
- _LIBCPP_HIDE_FROM_ABI
- const_reverse_iterator rbegin() const _NOEXCEPT
- {return const_reverse_iterator(end());}
- _LIBCPP_HIDE_FROM_ABI
- reverse_iterator rend() _NOEXCEPT
- {return reverse_iterator(begin());}
- _LIBCPP_HIDE_FROM_ABI
- const_reverse_iterator rend() const _NOEXCEPT
- {return const_reverse_iterator(begin());}
-
- _LIBCPP_HIDE_FROM_ABI
- const_iterator cbegin() const _NOEXCEPT {return begin();}
- _LIBCPP_HIDE_FROM_ABI
- const_iterator cend() const _NOEXCEPT {return end();}
- _LIBCPP_HIDE_FROM_ABI
- const_reverse_iterator crbegin() const _NOEXCEPT {return rbegin();}
- _LIBCPP_HIDE_FROM_ABI
- const_reverse_iterator crend() const _NOEXCEPT {return rend();}
-
- _LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_HIDE_FROM_ABI
- bool empty() const _NOEXCEPT {return __tree_.size() == 0;}
- _LIBCPP_HIDE_FROM_ABI
- size_type size() const _NOEXCEPT {return __tree_.size();}
- _LIBCPP_HIDE_FROM_ABI
- size_type max_size() const _NOEXCEPT {return __tree_.max_size();}
-
- _LIBCPP_HIDE_FROM_ABI mapped_type& operator[](const key_type& __k);
-#ifndef _LIBCPP_CXX03_LANG
- _LIBCPP_HIDE_FROM_ABI mapped_type& operator[](key_type&& __k);
-#endif
+ _LIBCPP_HIDE_FROM_ABI map(const map& __m, const allocator_type& __a)
+ : __tree_(__m.__tree_.value_comp(), typename __base::allocator_type(__a)) {
+ insert(__m.begin(), __m.end());
+ }
+
+ _LIBCPP_HIDE_FROM_ABI ~map() { static_assert(sizeof(__diagnose_non_const_comparator<_Key, _Compare>()), ""); }
+
+ _LIBCPP_HIDE_FROM_ABI iterator begin() _NOEXCEPT { return __tree_.begin(); }
+ _LIBCPP_HIDE_FROM_ABI const_iterator begin() const _NOEXCEPT { return __tree_.begin(); }
+ _LIBCPP_HIDE_FROM_ABI iterator end() _NOEXCEPT { return __tree_.end(); }
+ _LIBCPP_HIDE_FROM_ABI const_iterator end() const _NOEXCEPT { return __tree_.end(); }
+
+ _LIBCPP_HIDE_FROM_ABI reverse_iterator rbegin() _NOEXCEPT { return reverse_iterator(end()); }
+ _LIBCPP_HIDE_FROM_ABI const_reverse_iterator rbegin() const _NOEXCEPT { return const_reverse_iterator(end()); }
+ _LIBCPP_HIDE_FROM_ABI reverse_iterator rend() _NOEXCEPT { return reverse_iterator(begin()); }
+ _LIBCPP_HIDE_FROM_ABI const_reverse_iterator rend() const _NOEXCEPT { return const_reverse_iterator(begin()); }
- _LIBCPP_HIDE_FROM_ABI mapped_type& at(const key_type& __k);
- _LIBCPP_HIDE_FROM_ABI const mapped_type& at(const key_type& __k) const;
+ _LIBCPP_HIDE_FROM_ABI const_iterator cbegin() const _NOEXCEPT { return begin(); }
+ _LIBCPP_HIDE_FROM_ABI const_iterator cend() const _NOEXCEPT { return end(); }
+ _LIBCPP_HIDE_FROM_ABI const_reverse_iterator crbegin() const _NOEXCEPT { return rbegin(); }
+ _LIBCPP_HIDE_FROM_ABI const_reverse_iterator crend() const _NOEXCEPT { return rend(); }
- _LIBCPP_HIDE_FROM_ABI
- allocator_type get_allocator() const _NOEXCEPT {return allocator_type(__tree_.__alloc());}
- _LIBCPP_HIDE_FROM_ABI
- key_compare key_comp() const {return __tree_.value_comp().key_comp();}
- _LIBCPP_HIDE_FROM_ABI
- value_compare value_comp() const {return value_compare(__tree_.value_comp().key_comp());}
+ _LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_HIDE_FROM_ABI bool empty() const _NOEXCEPT { return __tree_.size() == 0; }
+ _LIBCPP_HIDE_FROM_ABI size_type size() const _NOEXCEPT { return __tree_.size(); }
+ _LIBCPP_HIDE_FROM_ABI size_type max_size() const _NOEXCEPT { return __tree_.max_size(); }
+ _LIBCPP_HIDE_FROM_ABI mapped_type& operator[](const key_type& __k);
#ifndef _LIBCPP_CXX03_LANG
- template <class ..._Args>
- _LIBCPP_HIDE_FROM_ABI
- pair<iterator, bool> emplace(_Args&& ...__args) {
- return __tree_.__emplace_unique(std::forward<_Args>(__args)...);
- }
+ _LIBCPP_HIDE_FROM_ABI mapped_type& operator[](key_type&& __k);
+#endif
- template <class ..._Args>
- _LIBCPP_HIDE_FROM_ABI
- iterator emplace_hint(const_iterator __p, _Args&& ...__args) {
- return __tree_.__emplace_hint_unique(__p.__i_, std::forward<_Args>(__args)...);
- }
+ _LIBCPP_HIDE_FROM_ABI mapped_type& at(const key_type& __k);
+ _LIBCPP_HIDE_FROM_ABI const mapped_type& at(const key_type& __k) const;
- template <class _Pp,
- class = __enable_if_t<is_constructible<value_type, _Pp>::value> >
- _LIBCPP_HIDE_FROM_ABI
- pair<iterator, bool> insert(_Pp&& __p)
- {return __tree_.__insert_unique(std::forward<_Pp>(__p));}
+ _LIBCPP_HIDE_FROM_ABI allocator_type get_allocator() const _NOEXCEPT { return allocator_type(__tree_.__alloc()); }
+ _LIBCPP_HIDE_FROM_ABI key_compare key_comp() const { return __tree_.value_comp().key_comp(); }
+ _LIBCPP_HIDE_FROM_ABI value_compare value_comp() const { return value_compare(__tree_.value_comp().key_comp()); }
- template <class _Pp,
- class = __enable_if_t<is_constructible<value_type, _Pp>::value> >
- _LIBCPP_HIDE_FROM_ABI
- iterator insert(const_iterator __pos, _Pp&& __p)
- {return __tree_.__insert_unique(__pos.__i_, std::forward<_Pp>(__p));}
+#ifndef _LIBCPP_CXX03_LANG
+ template <class... _Args>
+ _LIBCPP_HIDE_FROM_ABI pair<iterator, bool> emplace(_Args&&... __args) {
+ return __tree_.__emplace_unique(std::forward<_Args>(__args)...);
+ }
+
+ template <class... _Args>
+ _LIBCPP_HIDE_FROM_ABI iterator emplace_hint(const_iterator __p, _Args&&... __args) {
+ return __tree_.__emplace_hint_unique(__p.__i_, std::forward<_Args>(__args)...);
+ }
+
+ template <class _Pp, class = __enable_if_t<is_constructible<value_type, _Pp>::value> >
+ _LIBCPP_HIDE_FROM_ABI pair<iterator, bool> insert(_Pp&& __p) {
+ return __tree_.__insert_unique(std::forward<_Pp>(__p));
+ }
+
+ template <class _Pp, class = __enable_if_t<is_constructible<value_type, _Pp>::value> >
+ _LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __pos, _Pp&& __p) {
+ return __tree_.__insert_unique(__pos.__i_, std::forward<_Pp>(__p));
+ }
#endif // _LIBCPP_CXX03_LANG
- _LIBCPP_HIDE_FROM_ABI
- pair<iterator, bool>
- insert(const value_type& __v) {return __tree_.__insert_unique(__v);}
+ _LIBCPP_HIDE_FROM_ABI pair<iterator, bool> insert(const value_type& __v) { return __tree_.__insert_unique(__v); }
- _LIBCPP_HIDE_FROM_ABI
- iterator
- insert(const_iterator __p, const value_type& __v)
- {return __tree_.__insert_unique(__p.__i_, __v);}
+ _LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __p, const value_type& __v) {
+ return __tree_.__insert_unique(__p.__i_, __v);
+ }
#ifndef _LIBCPP_CXX03_LANG
- _LIBCPP_HIDE_FROM_ABI
- pair<iterator, bool>
- insert(value_type&& __v) {return __tree_.__insert_unique(std::move(__v));}
+ _LIBCPP_HIDE_FROM_ABI pair<iterator, bool> insert(value_type&& __v) {
+ return __tree_.__insert_unique(std::move(__v));
+ }
- _LIBCPP_HIDE_FROM_ABI
- iterator insert(const_iterator __p, value_type&& __v)
- {return __tree_.__insert_unique(__p.__i_, std::move(__v));}
+ _LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __p, value_type&& __v) {
+ return __tree_.__insert_unique(__p.__i_, std::move(__v));
+ }
- _LIBCPP_HIDE_FROM_ABI
- void insert(initializer_list<value_type> __il)
- {insert(__il.begin(), __il.end());}
+ _LIBCPP_HIDE_FROM_ABI void insert(initializer_list<value_type> __il) { insert(__il.begin(), __il.end()); }
#endif
- template <class _InputIterator>
- _LIBCPP_HIDE_FROM_ABI
- void insert(_InputIterator __f, _InputIterator __l)
- {
- for (const_iterator __e = cend(); __f != __l; ++__f)
- insert(__e.__i_, *__f);
- }
+ template <class _InputIterator>
+ _LIBCPP_HIDE_FROM_ABI void insert(_InputIterator __f, _InputIterator __l) {
+ for (const_iterator __e = cend(); __f != __l; ++__f)
+ insert(__e.__i_, *__f);
+ }
#if _LIBCPP_STD_VER >= 23
- template <_ContainerCompatibleRange<value_type> _Range>
- _LIBCPP_HIDE_FROM_ABI
- void insert_range(_Range&& __range) {
- const_iterator __end = cend();
- for (auto&& __element : __range) {
- insert(__end.__i_, std::forward<decltype(__element)>(__element));
- }
+ template <_ContainerCompatibleRange<value_type> _Range>
+ _LIBCPP_HIDE_FROM_ABI void insert_range(_Range&& __range) {
+ const_iterator __end = cend();
+ for (auto&& __element : __range) {
+ insert(__end.__i_, std::forward<decltype(__element)>(__element));
}
+ }
#endif
#if _LIBCPP_STD_VER >= 17
- template <class... _Args>
- _LIBCPP_HIDE_FROM_ABI
- pair<iterator, bool> try_emplace(const key_type& __k, _Args&&... __args)
- {
- return __tree_.__emplace_unique_key_args(__k,
- std::piecewise_construct,
- std::forward_as_tuple(__k),
- std::forward_as_tuple(std::forward<_Args>(__args)...));
- }
-
- template <class... _Args>
- _LIBCPP_HIDE_FROM_ABI
- pair<iterator, bool> try_emplace(key_type&& __k, _Args&&... __args)
- {
- return __tree_.__emplace_unique_key_args(__k,
- std::piecewise_construct,
- std::forward_as_tuple(std::move(__k)),
- std::forward_as_tuple(std::forward<_Args>(__args)...));
- }
+ template <class... _Args>
+ _LIBCPP_HIDE_FROM_ABI pair<iterator, bool> try_emplace(const key_type& __k, _Args&&... __args) {
+ return __tree_.__emplace_unique_key_args(
+ __k,
+ std::piecewise_construct,
+ std::forward_as_tuple(__k),
+ std::forward_as_tuple(std::forward<_Args>(__args)...));
+ }
- template <class... _Args>
- _LIBCPP_HIDE_FROM_ABI
- iterator try_emplace(const_iterator __h, const key_type& __k, _Args&&... __args)
- {
- return __tree_.__emplace_hint_unique_key_args(__h.__i_, __k,
+ template <class... _Args>
+ _LIBCPP_HIDE_FROM_ABI pair<iterator, bool> try_emplace(key_type&& __k, _Args&&... __args) {
+ return __tree_.__emplace_unique_key_args(
+ __k,
+ std::piecewise_construct,
+ std::forward_as_tuple(std::move(__k)),
+ std::forward_as_tuple(std::forward<_Args>(__args)...));
+ }
+
+ template <class... _Args>
+ _LIBCPP_HIDE_FROM_ABI iterator try_emplace(const_iterator __h, const key_type& __k, _Args&&... __args) {
+ return __tree_
+ .__emplace_hint_unique_key_args(
+ __h.__i_,
+ __k,
std::piecewise_construct,
std::forward_as_tuple(__k),
- std::forward_as_tuple(std::forward<_Args>(__args)...)).first;
- }
-
- template <class... _Args>
- _LIBCPP_HIDE_FROM_ABI
- iterator try_emplace(const_iterator __h, key_type&& __k, _Args&&... __args)
- {
- return __tree_.__emplace_hint_unique_key_args(__h.__i_, __k,
+ std::forward_as_tuple(std::forward<_Args>(__args)...))
+ .first;
+ }
+
+ template <class... _Args>
+ _LIBCPP_HIDE_FROM_ABI iterator try_emplace(const_iterator __h, key_type&& __k, _Args&&... __args) {
+ return __tree_
+ .__emplace_hint_unique_key_args(
+ __h.__i_,
+ __k,
std::piecewise_construct,
std::forward_as_tuple(std::move(__k)),
- std::forward_as_tuple(std::forward<_Args>(__args)...)).first;
- }
-
- template <class _Vp>
- _LIBCPP_HIDE_FROM_ABI
- pair<iterator, bool> insert_or_assign(const key_type& __k, _Vp&& __v)
- {
- iterator __p = lower_bound(__k);
- if ( __p != end() && !key_comp()(__k, __p->first))
- {
- __p->second = std::forward<_Vp>(__v);
- return std::make_pair(__p, false);
- }
- return std::make_pair(emplace_hint(__p, __k, std::forward<_Vp>(__v)), true);
+ std::forward_as_tuple(std::forward<_Args>(__args)...))
+ .first;
+ }
+
+ template <class _Vp>
+ _LIBCPP_HIDE_FROM_ABI pair<iterator, bool> insert_or_assign(const key_type& __k, _Vp&& __v) {
+ iterator __p = lower_bound(__k);
+ if (__p != end() && !key_comp()(__k, __p->first)) {
+ __p->second = std::forward<_Vp>(__v);
+ return std::make_pair(__p, false);
}
-
- template <class _Vp>
- _LIBCPP_HIDE_FROM_ABI
- pair<iterator, bool> insert_or_assign(key_type&& __k, _Vp&& __v)
- {
- iterator __p = lower_bound(__k);
- if ( __p != end() && !key_comp()(__k, __p->first))
- {
- __p->second = std::forward<_Vp>(__v);
- return std::make_pair(__p, false);
- }
- return std::make_pair(emplace_hint(__p, std::move(__k), std::forward<_Vp>(__v)), true);
+ return std::make_pair(emplace_hint(__p, __k, std::forward<_Vp>(__v)), true);
+ }
+
+ template <class _Vp>
+ _LIBCPP_HIDE_FROM_ABI pair<iterator, bool> insert_or_assign(key_type&& __k, _Vp&& __v) {
+ iterator __p = lower_bound(__k);
+ if (__p != end() && !key_comp()(__k, __p->first)) {
+ __p->second = std::forward<_Vp>(__v);
+ return std::make_pair(__p, false);
}
+ return std::make_pair(emplace_hint(__p, std::move(__k), std::forward<_Vp>(__v)), true);
+ }
- template <class _Vp>
- _LIBCPP_HIDE_FROM_ABI iterator insert_or_assign(const_iterator __h,
- const key_type& __k,
- _Vp&& __v) {
- auto [__r, __inserted] = __tree_.__emplace_hint_unique_key_args(
- __h.__i_, __k, __k, std::forward<_Vp>(__v));
+ template <class _Vp>
+ _LIBCPP_HIDE_FROM_ABI iterator insert_or_assign(const_iterator __h, const key_type& __k, _Vp&& __v) {
+ auto [__r, __inserted] = __tree_.__emplace_hint_unique_key_args(__h.__i_, __k, __k, std::forward<_Vp>(__v));
- if (!__inserted)
- __r->__get_value().second = std::forward<_Vp>(__v);
+ if (!__inserted)
+ __r->__get_value().second = std::forward<_Vp>(__v);
- return __r;
- }
+ return __r;
+ }
- template <class _Vp>
- _LIBCPP_HIDE_FROM_ABI iterator insert_or_assign(const_iterator __h,
- key_type&& __k,
- _Vp&& __v) {
- auto [__r, __inserted] = __tree_.__emplace_hint_unique_key_args(
- __h.__i_, __k, std::move(__k), std::forward<_Vp>(__v));
+ template <class _Vp>
+ _LIBCPP_HIDE_FROM_ABI iterator insert_or_assign(const_iterator __h, key_type&& __k, _Vp&& __v) {
+ auto [__r, __inserted] =
+ __tree_.__emplace_hint_unique_key_args(__h.__i_, __k, std::move(__k), std::forward<_Vp>(__v));
- if (!__inserted)
- __r->__get_value().second = std::forward<_Vp>(__v);
+ if (!__inserted)
+ __r->__get_value().second = std::forward<_Vp>(__v);
- return __r;
- }
+ return __r;
+ }
#endif // _LIBCPP_STD_VER >= 17
- _LIBCPP_HIDE_FROM_ABI
- iterator erase(const_iterator __p) {return __tree_.erase(__p.__i_);}
- _LIBCPP_HIDE_FROM_ABI
- iterator erase(iterator __p) {return __tree_.erase(__p.__i_);}
- _LIBCPP_HIDE_FROM_ABI
- size_type erase(const key_type& __k)
- {return __tree_.__erase_unique(__k);}
- _LIBCPP_HIDE_FROM_ABI
- iterator erase(const_iterator __f, const_iterator __l)
- {return __tree_.erase(__f.__i_, __l.__i_);}
- _LIBCPP_HIDE_FROM_ABI
- void clear() _NOEXCEPT {__tree_.clear();}
+ _LIBCPP_HIDE_FROM_ABI iterator erase(const_iterator __p) { return __tree_.erase(__p.__i_); }
+ _LIBCPP_HIDE_FROM_ABI iterator erase(iterator __p) { return __tree_.erase(__p.__i_); }
+ _LIBCPP_HIDE_FROM_ABI size_type erase(const key_type& __k) { return __tree_.__erase_unique(__k); }
+ _LIBCPP_HIDE_FROM_ABI iterator erase(const_iterator __f, const_iterator __l) {
+ return __tree_.erase(__f.__i_, __l.__i_);
+ }
+ _LIBCPP_HIDE_FROM_ABI void clear() _NOEXCEPT { __tree_.clear(); }
#if _LIBCPP_STD_VER >= 17
- _LIBCPP_HIDE_FROM_ABI
- insert_return_type insert(node_type&& __nh)
- {
- _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(__nh.empty() || __nh.get_allocator() == get_allocator(),
- "node_type with incompatible allocator passed to map::insert()");
- return __tree_.template __node_handle_insert_unique<
- node_type, insert_return_type>(std::move(__nh));
- }
- _LIBCPP_HIDE_FROM_ABI
- iterator insert(const_iterator __hint, node_type&& __nh)
- {
- _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(__nh.empty() || __nh.get_allocator() == get_allocator(),
- "node_type with incompatible allocator passed to map::insert()");
- return __tree_.template __node_handle_insert_unique<node_type>(
- __hint.__i_, std::move(__nh));
- }
- _LIBCPP_HIDE_FROM_ABI
- node_type extract(key_type const& __key)
- {
- return __tree_.template __node_handle_extract<node_type>(__key);
- }
- _LIBCPP_HIDE_FROM_ABI
- node_type extract(const_iterator __it)
- {
- return __tree_.template __node_handle_extract<node_type>(__it.__i_);
- }
- template <class _Compare2>
- _LIBCPP_HIDE_FROM_ABI
- void merge(map<key_type, mapped_type, _Compare2, allocator_type>& __source)
- {
- _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(__source.get_allocator() == get_allocator(),
- "merging container with incompatible allocator");
- __tree_.__node_handle_merge_unique(__source.__tree_);
- }
- template <class _Compare2>
- _LIBCPP_HIDE_FROM_ABI
- void merge(map<key_type, mapped_type, _Compare2, allocator_type>&& __source)
- {
- _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(__source.get_allocator() == get_allocator(),
- "merging container with incompatible allocator");
- __tree_.__node_handle_merge_unique(__source.__tree_);
- }
- template <class _Compare2>
- _LIBCPP_HIDE_FROM_ABI
- void merge(multimap<key_type, mapped_type, _Compare2, allocator_type>& __source)
- {
- _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(__source.get_allocator() == get_allocator(),
- "merging container with incompatible allocator");
- __tree_.__node_handle_merge_unique(__source.__tree_);
- }
- template <class _Compare2>
- _LIBCPP_HIDE_FROM_ABI
- void merge(multimap<key_type, mapped_type, _Compare2, allocator_type>&& __source)
- {
- _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(__source.get_allocator() == get_allocator(),
- "merging container with incompatible allocator");
- __tree_.__node_handle_merge_unique(__source.__tree_);
- }
+ _LIBCPP_HIDE_FROM_ABI insert_return_type insert(node_type&& __nh) {
+ _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(__nh.empty() || __nh.get_allocator() == get_allocator(),
+ "node_type with incompatible allocator passed to map::insert()");
+ return __tree_.template __node_handle_insert_unique< node_type, insert_return_type>(std::move(__nh));
+ }
+ _LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __hint, node_type&& __nh) {
+ _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(__nh.empty() || __nh.get_allocator() == get_allocator(),
+ "node_type with incompatible allocator passed to map::insert()");
+ return __tree_.template __node_handle_insert_unique<node_type>(__hint.__i_, std::move(__nh));
+ }
+ _LIBCPP_HIDE_FROM_ABI node_type extract(key_type const& __key) {
+ return __tree_.template __node_handle_extract<node_type>(__key);
+ }
+ _LIBCPP_HIDE_FROM_ABI node_type extract(const_iterator __it) {
+ return __tree_.template __node_handle_extract<node_type>(__it.__i_);
+ }
+ template <class _Compare2>
+ _LIBCPP_HIDE_FROM_ABI void merge(map<key_type, mapped_type, _Compare2, allocator_type>& __source) {
+ _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(
+ __source.get_allocator() == get_allocator(), "merging container with incompatible allocator");
+ __tree_.__node_handle_merge_unique(__source.__tree_);
+ }
+ template <class _Compare2>
+ _LIBCPP_HIDE_FROM_ABI void merge(map<key_type, mapped_type, _Compare2, allocator_type>&& __source) {
+ _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(
+ __source.get_allocator() == get_allocator(), "merging container with incompatible allocator");
+ __tree_.__node_handle_merge_unique(__source.__tree_);
+ }
+ template <class _Compare2>
+ _LIBCPP_HIDE_FROM_ABI void merge(multimap<key_type, mapped_type, _Compare2, allocator_type>& __source) {
+ _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(
+ __source.get_allocator() == get_allocator(), "merging container with incompatible allocator");
+ __tree_.__node_handle_merge_unique(__source.__tree_);
+ }
+ template <class _Compare2>
+ _LIBCPP_HIDE_FROM_ABI void merge(multimap<key_type, mapped_type, _Compare2, allocator_type>&& __source) {
+ _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(
+ __source.get_allocator() == get_allocator(), "merging container with incompatible allocator");
+ __tree_.__node_handle_merge_unique(__source.__tree_);
+ }
#endif
- _LIBCPP_HIDE_FROM_ABI
- void swap(map& __m)
- _NOEXCEPT_(__is_nothrow_swappable<__base>::value)
- {__tree_.swap(__m.__tree_);}
+ _LIBCPP_HIDE_FROM_ABI void swap(map& __m) _NOEXCEPT_(__is_nothrow_swappable<__base>::value) {
+ __tree_.swap(__m.__tree_);
+ }
- _LIBCPP_HIDE_FROM_ABI
- iterator find(const key_type& __k) {return __tree_.find(__k);}
- _LIBCPP_HIDE_FROM_ABI
- const_iterator find(const key_type& __k) const {return __tree_.find(__k);}
+ _LIBCPP_HIDE_FROM_ABI iterator find(const key_type& __k) { return __tree_.find(__k); }
+ _LIBCPP_HIDE_FROM_ABI const_iterator find(const key_type& __k) const { return __tree_.find(__k); }
#if _LIBCPP_STD_VER >= 14
- template <typename _K2, enable_if_t<__is_transparent<_Compare, _K2>::value, int> = 0>
- _LIBCPP_HIDE_FROM_ABI
- iterator
- find(const _K2& __k) {return __tree_.find(__k);}
- template <typename _K2, enable_if_t<__is_transparent<_Compare, _K2>::value, int> = 0>
- _LIBCPP_HIDE_FROM_ABI
- const_iterator
- find(const _K2& __k) const {return __tree_.find(__k);}
+ template <typename _K2, enable_if_t<__is_transparent<_Compare, _K2>::value, int> = 0>
+ _LIBCPP_HIDE_FROM_ABI iterator find(const _K2& __k) {
+ return __tree_.find(__k);
+ }
+ template <typename _K2, enable_if_t<__is_transparent<_Compare, _K2>::value, int> = 0>
+ _LIBCPP_HIDE_FROM_ABI const_iterator find(const _K2& __k) const {
+ return __tree_.find(__k);
+ }
#endif
- _LIBCPP_HIDE_FROM_ABI
- size_type count(const key_type& __k) const
- {return __tree_.__count_unique(__k);}
+ _LIBCPP_HIDE_FROM_ABI size_type count(const key_type& __k) const { return __tree_.__count_unique(__k); }
#if _LIBCPP_STD_VER >= 14
- template <typename _K2, enable_if_t<__is_transparent<_Compare, _K2>::value, int> = 0>
- _LIBCPP_HIDE_FROM_ABI
- size_type
- count(const _K2& __k) const {return __tree_.__count_multi(__k);}
+ template <typename _K2, enable_if_t<__is_transparent<_Compare, _K2>::value, int> = 0>
+ _LIBCPP_HIDE_FROM_ABI size_type count(const _K2& __k) const {
+ return __tree_.__count_multi(__k);
+ }
#endif
#if _LIBCPP_STD_VER >= 20
- _LIBCPP_HIDE_FROM_ABI
- bool contains(const key_type& __k) const {return find(__k) != end();}
- template <typename _K2, enable_if_t<__is_transparent<_Compare, _K2>::value, int> = 0>
- _LIBCPP_HIDE_FROM_ABI
- bool
- contains(const _K2& __k) const { return find(__k) != end(); }
+ _LIBCPP_HIDE_FROM_ABI bool contains(const key_type& __k) const { return find(__k) != end(); }
+ template <typename _K2, enable_if_t<__is_transparent<_Compare, _K2>::value, int> = 0>
+ _LIBCPP_HIDE_FROM_ABI bool contains(const _K2& __k) const {
+ return find(__k) != end();
+ }
#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(__k); }
+ _LIBCPP_HIDE_FROM_ABI const_iterator lower_bound(const key_type& __k) const { return __tree_.lower_bound(__k); }
#if _LIBCPP_STD_VER >= 14
- template <typename _K2, enable_if_t<__is_transparent<_Compare, _K2>::value, int> = 0>
- _LIBCPP_HIDE_FROM_ABI
- iterator
- lower_bound(const _K2& __k) {return __tree_.lower_bound(__k);}
-
- template <typename _K2, enable_if_t<__is_transparent<_Compare, _K2>::value, int> = 0>
- _LIBCPP_HIDE_FROM_ABI
- const_iterator
- lower_bound(const _K2& __k) const {return __tree_.lower_bound(__k);}
+ template <typename _K2, enable_if_t<__is_transparent<_Compare, _K2>::value, int> = 0>
+ _LIBCPP_HIDE_FROM_ABI iterator lower_bound(const _K2& __k) {
+ return __tree_.lower_bound(__k);
+ }
+
+ template <typename _K2, enable_if_t<__is_transparent<_Compare, _K2>::value, int> = 0>
+ _LIBCPP_HIDE_FROM_ABI const_iterator lower_bound(const _K2& __k) const {
+ return __tree_.lower_bound(__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(__k); }
+ _LIBCPP_HIDE_FROM_ABI const_iterator upper_bound(const key_type& __k) const { return __tree_.upper_bound(__k); }
#if _LIBCPP_STD_VER >= 14
- template <typename _K2, enable_if_t<__is_transparent<_Compare, _K2>::value, int> = 0>
- _LIBCPP_HIDE_FROM_ABI
- iterator
- upper_bound(const _K2& __k) {return __tree_.upper_bound(__k);}
- template <typename _K2, enable_if_t<__is_transparent<_Compare, _K2>::value, int> = 0>
- _LIBCPP_HIDE_FROM_ABI
- const_iterator
- upper_bound(const _K2& __k) const {return __tree_.upper_bound(__k);}
+ template <typename _K2, enable_if_t<__is_transparent<_Compare, _K2>::value, int> = 0>
+ _LIBCPP_HIDE_FROM_ABI iterator upper_bound(const _K2& __k) {
+ return __tree_.upper_bound(__k);
+ }
+ template <typename _K2, enable_if_t<__is_transparent<_Compare, _K2>::value, int> = 0>
+ _LIBCPP_HIDE_FROM_ABI const_iterator upper_bound(const _K2& __k) const {
+ return __tree_.upper_bound(__k);
+ }
#endif
- _LIBCPP_HIDE_FROM_ABI
- pair<iterator,iterator> equal_range(const key_type& __k)
- {return __tree_.__equal_range_unique(__k);}
- _LIBCPP_HIDE_FROM_ABI
- pair<const_iterator,const_iterator> equal_range(const key_type& __k) const
- {return __tree_.__equal_range_unique(__k);}
+ _LIBCPP_HIDE_FROM_ABI pair<iterator, iterator> equal_range(const key_type& __k) {
+ return __tree_.__equal_range_unique(__k);
+ }
+ _LIBCPP_HIDE_FROM_ABI pair<const_iterator, const_iterator> equal_range(const key_type& __k) const {
+ return __tree_.__equal_range_unique(__k);
+ }
#if _LIBCPP_STD_VER >= 14
- template <typename _K2, enable_if_t<__is_transparent<_Compare, _K2>::value, int> = 0>
- _LIBCPP_HIDE_FROM_ABI
- pair<iterator,iterator>
- equal_range(const _K2& __k) {return __tree_.__equal_range_multi(__k);}
- template <typename _K2, enable_if_t<__is_transparent<_Compare, _K2>::value, int> = 0>
- _LIBCPP_HIDE_FROM_ABI
- pair<const_iterator,const_iterator>
- equal_range(const _K2& __k) const {return __tree_.__equal_range_multi(__k);}
+ template <typename _K2, enable_if_t<__is_transparent<_Compare, _K2>::value, int> = 0>
+ _LIBCPP_HIDE_FROM_ABI pair<iterator, iterator> equal_range(const _K2& __k) {
+ return __tree_.__equal_range_multi(__k);
+ }
+ template <typename _K2, enable_if_t<__is_transparent<_Compare, _K2>::value, int> = 0>
+ _LIBCPP_HIDE_FROM_ABI pair<const_iterator, const_iterator> equal_range(const _K2& __k) const {
+ return __tree_.__equal_range_multi(__k);
+ }
#endif
private:
- typedef typename __base::__node __node;
- typedef typename __base::__node_allocator __node_allocator;
- typedef typename __base::__node_pointer __node_pointer;
- typedef typename __base::__node_base_pointer __node_base_pointer;
- typedef typename __base::__parent_pointer __parent_pointer;
+ typedef typename __base::__node __node;
+ typedef typename __base::__node_allocator __node_allocator;
+ typedef typename __base::__node_pointer __node_pointer;
+ typedef typename __base::__node_base_pointer __node_base_pointer;
+ typedef typename __base::__parent_pointer __parent_pointer;
- typedef __map_node_destructor<__node_allocator> _Dp;
- typedef unique_ptr<__node, _Dp> __node_holder;
+ typedef __map_node_destructor<__node_allocator> _Dp;
+ typedef unique_ptr<__node, _Dp> __node_holder;
#ifdef _LIBCPP_CXX03_LANG
- _LIBCPP_HIDE_FROM_ABI __node_holder __construct_node_with_key(const key_type& __k);
+ _LIBCPP_HIDE_FROM_ABI __node_holder __construct_node_with_key(const key_type& __k);
#endif
};
#if _LIBCPP_STD_VER >= 17
-template<class _InputIterator, class _Compare = less<__iter_key_type<_InputIterator>>,
- class _Allocator = allocator<__iter_to_alloc_type<_InputIterator>>,
- class = enable_if_t<__has_input_iterator_category<_InputIterator>::value, void>,
- class = enable_if_t<!__is_allocator<_Compare>::value, void>,
- class = enable_if_t<__is_allocator<_Allocator>::value, void>>
+template <class _InputIterator,
+ class _Compare = less<__iter_key_type<_InputIterator>>,
+ class _Allocator = allocator<__iter_to_alloc_type<_InputIterator>>,
+ class = enable_if_t<__has_input_iterator_category<_InputIterator>::value, void>,
+ class = enable_if_t<!__is_allocator<_Compare>::value, void>,
+ class = enable_if_t<__is_allocator<_Allocator>::value, void>>
map(_InputIterator, _InputIterator, _Compare = _Compare(), _Allocator = _Allocator())
- -> map<__iter_key_type<_InputIterator>, __iter_mapped_type<_InputIterator>, _Compare, _Allocator>;
+ -> map<__iter_key_type<_InputIterator>, __iter_mapped_type<_InputIterator>, _Compare, _Allocator>;
-#if _LIBCPP_STD_VER >= 23
-template <ranges::input_range _Range, class _Compare = less<__range_key_type<_Range>>,
+# if _LIBCPP_STD_VER >= 23
+template <ranges::input_range _Range,
+ class _Compare = less<__range_key_type<_Range>>,
class _Allocator = allocator<__range_to_alloc_type<_Range>>,
- class = enable_if_t<!__is_allocator<_Compare>::value, void>,
- class = enable_if_t<__is_allocator<_Allocator>::value, void>>
+ class = enable_if_t<!__is_allocator<_Compare>::value, void>,
+ class = enable_if_t<__is_allocator<_Allocator>::value, void>>
map(from_range_t, _Range&&, _Compare = _Compare(), _Allocator = _Allocator())
- -> map<__range_key_type<_Range>, __range_mapped_type<_Range>, _Compare, _Allocator>;
-#endif
-
-template<class _Key, class _Tp, class _Compare = less<remove_const_t<_Key>>,
- class _Allocator = allocator<pair<const _Key, _Tp>>,
- class = enable_if_t<!__is_allocator<_Compare>::value, void>,
- class = enable_if_t<__is_allocator<_Allocator>::value, void>>
+ -> map<__range_key_type<_Range>, __range_mapped_type<_Range>, _Compare, _Allocator>;
+# endif
+
+template <class _Key,
+ class _Tp,
+ class _Compare = less<remove_const_t<_Key>>,
+ class _Allocator = allocator<pair<const _Key, _Tp>>,
+ class = enable_if_t<!__is_allocator<_Compare>::value, void>,
+ class = enable_if_t<__is_allocator<_Allocator>::value, void>>
map(initializer_list<pair<_Key, _Tp>>, _Compare = _Compare(), _Allocator = _Allocator())
- -> map<remove_const_t<_Key>, _Tp, _Compare, _Allocator>;
+ -> map<remove_const_t<_Key>, _Tp, _Compare, _Allocator>;
-template<class _InputIterator, class _Allocator,
- class = enable_if_t<__has_input_iterator_category<_InputIterator>::value, void>,
- class = enable_if_t<__is_allocator<_Allocator>::value, void>>
+template <class _InputIterator,
+ class _Allocator,
+ class = enable_if_t<__has_input_iterator_category<_InputIterator>::value, void>,
+ class = enable_if_t<__is_allocator<_Allocator>::value, void>>
map(_InputIterator, _InputIterator, _Allocator)
- -> map<__iter_key_type<_InputIterator>, __iter_mapped_type<_InputIterator>,
- less<__iter_key_type<_InputIterator>>, _Allocator>;
+ -> map<__iter_key_type<_InputIterator>,
+ __iter_mapped_type<_InputIterator>,
+ less<__iter_key_type<_InputIterator>>,
+ _Allocator>;
-#if _LIBCPP_STD_VER >= 23
-template <ranges::input_range _Range, class _Allocator,
- class = enable_if_t<__is_allocator<_Allocator>::value, void>>
+# if _LIBCPP_STD_VER >= 23
+template <ranges::input_range _Range, class _Allocator, class = enable_if_t<__is_allocator<_Allocator>::value, void>>
map(from_range_t, _Range&&, _Allocator)
- -> map<__range_key_type<_Range>, __range_mapped_type<_Range>, less<__range_key_type<_Range>>, _Allocator>;
-#endif
+ -> map<__range_key_type<_Range>, __range_mapped_type<_Range>, less<__range_key_type<_Range>>, _Allocator>;
+# endif
-template<class _Key, class _Tp, class _Allocator,
- class = enable_if_t<__is_allocator<_Allocator>::value, void>>
+template <class _Key, class _Tp, class _Allocator, class = enable_if_t<__is_allocator<_Allocator>::value, void>>
map(initializer_list<pair<_Key, _Tp>>, _Allocator)
- -> map<remove_const_t<_Key>, _Tp, less<remove_const_t<_Key>>, _Allocator>;
+ -> map<remove_const_t<_Key>, _Tp, less<remove_const_t<_Key>>, _Allocator>;
#endif
#ifndef _LIBCPP_CXX03_LANG
template <class _Key, class _Tp, class _Compare, class _Allocator>
map<_Key, _Tp, _Compare, _Allocator>::map(map&& __m, const allocator_type& __a)
- : __tree_(std::move(__m.__tree_), typename __base::allocator_type(__a))
-{
- if (__a != __m.get_allocator())
- {
- const_iterator __e = cend();
- while (!__m.empty())
- __tree_.__insert_unique(__e.__i_,
- __m.__tree_.remove(__m.begin().__i_)->__value_.__move());
- }
+ : __tree_(std::move(__m.__tree_), typename __base::allocator_type(__a)) {
+ if (__a != __m.get_allocator()) {
+ const_iterator __e = cend();
+ while (!__m.empty())
+ __tree_.__insert_unique(__e.__i_, __m.__tree_.remove(__m.begin().__i_)->__value_.__move());
+ }
}
template <class _Key, class _Tp, class _Compare, class _Allocator>
-_Tp&
-map<_Key, _Tp, _Compare, _Allocator>::operator[](const key_type& __k)
-{
- return __tree_.__emplace_unique_key_args(__k,
- std::piecewise_construct,
- std::forward_as_tuple(__k),
- std::forward_as_tuple()).first->__get_value().second;
+_Tp& map<_Key, _Tp, _Compare, _Allocator>::operator[](const key_type& __k) {
+ return __tree_
+ .__emplace_unique_key_args(__k, std::piecewise_construct, std::forward_as_tuple(__k), std::forward_as_tuple())
+ .first->__get_value()
+ .second;
}
template <class _Key, class _Tp, class _Compare, class _Allocator>
-_Tp&
-map<_Key, _Tp, _Compare, _Allocator>::operator[](key_type&& __k)
-{
- // TODO investigate this clang-tidy warning.
- // NOLINTNEXTLINE(bugprone-use-after-move)
- return __tree_.__emplace_unique_key_args(__k,
- std::piecewise_construct,
- std::forward_as_tuple(std::move(__k)),
- std::forward_as_tuple()).first->__get_value().second;
+_Tp& map<_Key, _Tp, _Compare, _Allocator>::operator[](key_type&& __k) {
+ // TODO investigate this clang-tidy warning.
+ // NOLINTBEGIN(bugprone-use-after-move)
+ return __tree_
+ .__emplace_unique_key_args(
+ __k, std::piecewise_construct, std::forward_as_tuple(std::move(__k)), std::forward_as_tuple())
+ .first->__get_value()
+ .second;
+ // NOLINTEND(bugprone-use-after-move)
}
#else // _LIBCPP_CXX03_LANG
template <class _Key, class _Tp, class _Compare, class _Allocator>
typename map<_Key, _Tp, _Compare, _Allocator>::__node_holder
-map<_Key, _Tp, _Compare, _Allocator>::__construct_node_with_key(const key_type& __k)
-{
- __node_allocator& __na = __tree_.__node_alloc();
- __node_holder __h(__node_traits::allocate(__na, 1), _Dp(__na));
- __node_traits::construct(__na, std::addressof(__h->__value_.__get_value().first), __k);
- __h.get_deleter().__first_constructed = true;
- __node_traits::construct(__na, std::addressof(__h->__value_.__get_value().second));
- __h.get_deleter().__second_constructed = true;
- return __h;
+map<_Key, _Tp, _Compare, _Allocator>::__construct_node_with_key(const key_type& __k) {
+ __node_allocator& __na = __tree_.__node_alloc();
+ __node_holder __h(__node_traits::allocate(__na, 1), _Dp(__na));
+ __node_traits::construct(__na, std::addressof(__h->__value_.__get_value().first), __k);
+ __h.get_deleter().__first_constructed = true;
+ __node_traits::construct(__na, std::addressof(__h->__value_.__get_value().second));
+ __h.get_deleter().__second_constructed = true;
+ return __h;
}
template <class _Key, class _Tp, class _Compare, class _Allocator>
-_Tp&
-map<_Key, _Tp, _Compare, _Allocator>::operator[](const key_type& __k)
-{
- __parent_pointer __parent;
- __node_base_pointer& __child = __tree_.__find_equal(__parent, __k);
- __node_pointer __r = static_cast<__node_pointer>(__child);
- if (__child == nullptr)
- {
- __node_holder __h = __construct_node_with_key(__k);
- __tree_.__insert_node_at(__parent, __child, static_cast<__node_base_pointer>(__h.get()));
- __r = __h.release();
- }
- return __r->__value_.__get_value().second;
+_Tp& map<_Key, _Tp, _Compare, _Allocator>::operator[](const key_type& __k) {
+ __parent_pointer __parent;
+ __node_base_pointer& __child = __tree_.__find_equal(__parent, __k);
+ __node_pointer __r = static_cast<__node_pointer>(__child);
+ if (__child == nullptr) {
+ __node_holder __h = __construct_node_with_key(__k);
+ __tree_.__insert_node_at(__parent, __child, static_cast<__node_base_pointer>(__h.get()));
+ __r = __h.release();
+ }
+ return __r->__value_.__get_value().second;
}
#endif // _LIBCPP_CXX03_LANG
template <class _Key, class _Tp, class _Compare, class _Allocator>
-_Tp&
-map<_Key, _Tp, _Compare, _Allocator>::at(const key_type& __k)
-{
- __parent_pointer __parent;
- __node_base_pointer& __child = __tree_.__find_equal(__parent, __k);
- if (__child == nullptr)
- __throw_out_of_range("map::at: key not found");
- return static_cast<__node_pointer>(__child)->__value_.__get_value().second;
+_Tp& map<_Key, _Tp, _Compare, _Allocator>::at(const key_type& __k) {
+ __parent_pointer __parent;
+ __node_base_pointer& __child = __tree_.__find_equal(__parent, __k);
+ if (__child == nullptr)
+ __throw_out_of_range("map::at: key not found");
+ return static_cast<__node_pointer>(__child)->__value_.__get_value().second;
}
template <class _Key, class _Tp, class _Compare, class _Allocator>
-const _Tp&
-map<_Key, _Tp, _Compare, _Allocator>::at(const key_type& __k) const
-{
- __parent_pointer __parent;
- __node_base_pointer __child = __tree_.__find_equal(__parent, __k);
- if (__child == nullptr)
- __throw_out_of_range("map::at: key not found");
- return static_cast<__node_pointer>(__child)->__value_.__get_value().second;
+const _Tp& map<_Key, _Tp, _Compare, _Allocator>::at(const key_type& __k) const {
+ __parent_pointer __parent;
+ __node_base_pointer __child = __tree_.__find_equal(__parent, __k);
+ if (__child == nullptr)
+ __throw_out_of_range("map::at: key not found");
+ return static_cast<__node_pointer>(__child)->__value_.__get_value().second;
}
-
template <class _Key, class _Tp, class _Compare, class _Allocator>
-inline _LIBCPP_HIDE_FROM_ABI
-bool
-operator==(const map<_Key, _Tp, _Compare, _Allocator>& __x,
- const map<_Key, _Tp, _Compare, _Allocator>& __y)
-{
- return __x.size() == __y.size() && std::equal(__x.begin(), __x.end(), __y.begin());
+inline _LIBCPP_HIDE_FROM_ABI bool
+operator==(const map<_Key, _Tp, _Compare, _Allocator>& __x, const map<_Key, _Tp, _Compare, _Allocator>& __y) {
+ return __x.size() == __y.size() && std::equal(__x.begin(), __x.end(), __y.begin());
}
#if _LIBCPP_STD_VER <= 17
template <class _Key, class _Tp, class _Compare, class _Allocator>
-inline _LIBCPP_HIDE_FROM_ABI
-bool
-operator< (const map<_Key, _Tp, _Compare, _Allocator>& __x,
- const map<_Key, _Tp, _Compare, _Allocator>& __y)
-{
- return std::lexicographical_compare(__x.begin(), __x.end(), __y.begin(), __y.end());
+inline _LIBCPP_HIDE_FROM_ABI bool
+operator<(const map<_Key, _Tp, _Compare, _Allocator>& __x, const map<_Key, _Tp, _Compare, _Allocator>& __y) {
+ return std::lexicographical_compare(__x.begin(), __x.end(), __y.begin(), __y.end());
}
template <class _Key, class _Tp, class _Compare, class _Allocator>
-inline _LIBCPP_HIDE_FROM_ABI
-bool
-operator!=(const map<_Key, _Tp, _Compare, _Allocator>& __x,
- const map<_Key, _Tp, _Compare, _Allocator>& __y)
-{
- return !(__x == __y);
+inline _LIBCPP_HIDE_FROM_ABI bool
+operator!=(const map<_Key, _Tp, _Compare, _Allocator>& __x, const map<_Key, _Tp, _Compare, _Allocator>& __y) {
+ return !(__x == __y);
}
template <class _Key, class _Tp, class _Compare, class _Allocator>
-inline _LIBCPP_HIDE_FROM_ABI
-bool
-operator> (const map<_Key, _Tp, _Compare, _Allocator>& __x,
- const map<_Key, _Tp, _Compare, _Allocator>& __y)
-{
- return __y < __x;
+inline _LIBCPP_HIDE_FROM_ABI bool
+operator>(const map<_Key, _Tp, _Compare, _Allocator>& __x, const map<_Key, _Tp, _Compare, _Allocator>& __y) {
+ return __y < __x;
}
template <class _Key, class _Tp, class _Compare, class _Allocator>
-inline _LIBCPP_HIDE_FROM_ABI
-bool
-operator>=(const map<_Key, _Tp, _Compare, _Allocator>& __x,
- const map<_Key, _Tp, _Compare, _Allocator>& __y)
-{
- return !(__x < __y);
+inline _LIBCPP_HIDE_FROM_ABI bool
+operator>=(const map<_Key, _Tp, _Compare, _Allocator>& __x, const map<_Key, _Tp, _Compare, _Allocator>& __y) {
+ return !(__x < __y);
}
template <class _Key, class _Tp, class _Compare, class _Allocator>
-inline _LIBCPP_HIDE_FROM_ABI
-bool
-operator<=(const map<_Key, _Tp, _Compare, _Allocator>& __x,
- const map<_Key, _Tp, _Compare, _Allocator>& __y)
-{
- return !(__y < __x);
+inline _LIBCPP_HIDE_FROM_ABI bool
+operator<=(const map<_Key, _Tp, _Compare, _Allocator>& __x, const map<_Key, _Tp, _Compare, _Allocator>& __y) {
+ return !(__y < __x);
}
#else // #if _LIBCPP_STD_VER <= 17
@@ -1825,654 +1620,519 @@ operator<=(const map<_Key, _Tp, _Compare, _Allocator>& __x,
template <class _Key, class _Tp, class _Compare, class _Allocator>
_LIBCPP_HIDE_FROM_ABI __synth_three_way_result<pair<const _Key, _Tp>>
operator<=>(const map<_Key, _Tp, _Compare, _Allocator>& __x, const map<_Key, _Tp, _Compare, _Allocator>& __y) {
- return std::lexicographical_compare_three_way(
- __x.begin(),
- __x.end(),
- __y.begin(),
- __y.end(),
- std::__synth_three_way<pair<const _Key, _Tp>, pair<const _Key, _Tp>>);
+ return std::lexicographical_compare_three_way(
+ __x.begin(),
+ __x.end(),
+ __y.begin(),
+ __y.end(),
+ std::__synth_three_way<pair<const _Key, _Tp>, pair<const _Key, _Tp>>);
}
#endif // #if _LIBCPP_STD_VER <= 17
template <class _Key, class _Tp, class _Compare, class _Allocator>
-inline _LIBCPP_HIDE_FROM_ABI
-void
-swap(map<_Key, _Tp, _Compare, _Allocator>& __x,
- map<_Key, _Tp, _Compare, _Allocator>& __y)
- _NOEXCEPT_(_NOEXCEPT_(__x.swap(__y)))
-{
- __x.swap(__y);
+inline _LIBCPP_HIDE_FROM_ABI void
+swap(map<_Key, _Tp, _Compare, _Allocator>& __x, map<_Key, _Tp, _Compare, _Allocator>& __y)
+ _NOEXCEPT_(_NOEXCEPT_(__x.swap(__y))) {
+ __x.swap(__y);
}
#if _LIBCPP_STD_VER >= 20
-template <class _Key, class _Tp, class _Compare, class _Allocator,
- class _Predicate>
-inline _LIBCPP_HIDE_FROM_ABI
- typename map<_Key, _Tp, _Compare, _Allocator>::size_type
- erase_if(map<_Key, _Tp, _Compare, _Allocator>& __c, _Predicate __pred) {
+template <class _Key, class _Tp, class _Compare, class _Allocator, class _Predicate>
+inline _LIBCPP_HIDE_FROM_ABI typename map<_Key, _Tp, _Compare, _Allocator>::size_type
+erase_if(map<_Key, _Tp, _Compare, _Allocator>& __c, _Predicate __pred) {
return std::__libcpp_erase_if_container(__c, __pred);
}
#endif
-
-template <class _Key, class _Tp, class _Compare = less<_Key>,
- class _Allocator = allocator<pair<const _Key, _Tp> > >
-class _LIBCPP_TEMPLATE_VIS multimap
-{
+template <class _Key, class _Tp, class _Compare = less<_Key>, class _Allocator = allocator<pair<const _Key, _Tp> > >
+class _LIBCPP_TEMPLATE_VIS multimap {
public:
- // types:
- typedef _Key key_type;
- typedef _Tp mapped_type;
- typedef pair<const key_type, mapped_type> value_type;
- typedef __type_identity_t<_Compare> key_compare;
- typedef __type_identity_t<_Allocator> allocator_type;
- typedef value_type& reference;
- typedef const value_type& const_reference;
+ // types:
+ typedef _Key key_type;
+ typedef _Tp mapped_type;
+ typedef pair<const key_type, mapped_type> value_type;
+ typedef __type_identity_t<_Compare> key_compare;
+ typedef __type_identity_t<_Allocator> allocator_type;
+ typedef value_type& reference;
+ typedef const value_type& const_reference;
- static_assert((is_same<typename allocator_type::value_type, value_type>::value),
- "Allocator::value_type must be same type as value_type");
+ static_assert((is_same<typename allocator_type::value_type, value_type>::value),
+ "Allocator::value_type must be same type as value_type");
- class _LIBCPP_TEMPLATE_VIS value_compare
- : public __binary_function<value_type, value_type, bool>
- {
- friend class multimap;
- protected:
- key_compare comp;
+ class _LIBCPP_TEMPLATE_VIS value_compare : public __binary_function<value_type, value_type, bool> {
+ friend class multimap;
- _LIBCPP_HIDE_FROM_ABI
- value_compare(key_compare __c) : comp(__c) {}
- public:
- _LIBCPP_HIDE_FROM_ABI
- bool operator()(const value_type& __x, const value_type& __y) const
- {return comp(__x.first, __y.first);}
- };
+ protected:
+ key_compare comp;
-private:
+ _LIBCPP_HIDE_FROM_ABI value_compare(key_compare __c) : comp(__c) {}
- typedef std::__value_type<key_type, mapped_type> __value_type;
- typedef __map_value_compare<key_type, __value_type, key_compare> __vc;
- typedef __rebind_alloc<allocator_traits<allocator_type>, __value_type> __allocator_type;
- typedef __tree<__value_type, __vc, __allocator_type> __base;
- typedef typename __base::__node_traits __node_traits;
- typedef allocator_traits<allocator_type> __alloc_traits;
+ public:
+ _LIBCPP_HIDE_FROM_ABI bool operator()(const value_type& __x, const value_type& __y) const {
+ return comp(__x.first, __y.first);
+ }
+ };
+
+private:
+ typedef std::__value_type<key_type, mapped_type> __value_type;
+ typedef __map_value_compare<key_type, __value_type, key_compare> __vc;
+ typedef __rebind_alloc<allocator_traits<allocator_type>, __value_type> __allocator_type;
+ typedef __tree<__value_type, __vc, __allocator_type> __base;
+ typedef typename __base::__node_traits __node_traits;
+ typedef allocator_traits<allocator_type> __alloc_traits;
- static_assert(is_same<allocator_type, __rebind_alloc<__alloc_traits, value_type> >::value,
- "[allocator.requirements] states that rebinding an allocator to the same type should result in the "
- "original allocator");
+ static_assert(is_same<allocator_type, __rebind_alloc<__alloc_traits, value_type> >::value,
+ "[allocator.requirements] states that rebinding an allocator to the same type should result in the "
+ "original allocator");
- __base __tree_;
+ __base __tree_;
public:
- typedef typename __alloc_traits::pointer pointer;
- typedef typename __alloc_traits::const_pointer const_pointer;
- typedef typename __alloc_traits::size_type size_type;
- typedef typename __alloc_traits::difference_type difference_type;
- typedef __map_iterator<typename __base::iterator> iterator;
- typedef __map_const_iterator<typename __base::const_iterator> const_iterator;
- typedef std::reverse_iterator<iterator> reverse_iterator;
- typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+ typedef typename __alloc_traits::pointer pointer;
+ typedef typename __alloc_traits::const_pointer const_pointer;
+ typedef typename __alloc_traits::size_type size_type;
+ typedef typename __alloc_traits::difference_type difference_type;
+ typedef __map_iterator<typename __base::iterator> iterator;
+ typedef __map_const_iterator<typename __base::const_iterator> const_iterator;
+ typedef std::reverse_iterator<iterator> reverse_iterator;
+ typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
#if _LIBCPP_STD_VER >= 17
- typedef __map_node_handle<typename __base::__node, allocator_type> node_type;
+ typedef __map_node_handle<typename __base::__node, allocator_type> node_type;
#endif
- template <class _Key2, class _Value2, class _Comp2, class _Alloc2>
- friend class _LIBCPP_TEMPLATE_VIS map;
- template <class _Key2, class _Value2, class _Comp2, class _Alloc2>
- friend class _LIBCPP_TEMPLATE_VIS multimap;
+ template <class _Key2, class _Value2, class _Comp2, class _Alloc2>
+ friend class _LIBCPP_TEMPLATE_VIS map;
+ template <class _Key2, class _Value2, class _Comp2, class _Alloc2>
+ friend class _LIBCPP_TEMPLATE_VIS multimap;
- _LIBCPP_HIDE_FROM_ABI
- multimap()
- _NOEXCEPT_(
- is_nothrow_default_constructible<allocator_type>::value &&
- is_nothrow_default_constructible<key_compare>::value &&
- is_nothrow_copy_constructible<key_compare>::value)
- : __tree_(__vc(key_compare())) {}
+ _LIBCPP_HIDE_FROM_ABI multimap() _NOEXCEPT_(
+ is_nothrow_default_constructible<allocator_type>::value&& is_nothrow_default_constructible<key_compare>::value&&
+ is_nothrow_copy_constructible<key_compare>::value)
+ : __tree_(__vc(key_compare())) {}
- _LIBCPP_HIDE_FROM_ABI
- explicit multimap(const key_compare& __comp)
- _NOEXCEPT_(
- is_nothrow_default_constructible<allocator_type>::value &&
- is_nothrow_copy_constructible<key_compare>::value)
- : __tree_(__vc(__comp)) {}
-
- _LIBCPP_HIDE_FROM_ABI
- explicit multimap(const key_compare& __comp, const allocator_type& __a)
- : __tree_(__vc(__comp), typename __base::allocator_type(__a)) {}
-
- template <class _InputIterator>
- _LIBCPP_HIDE_FROM_ABI
- multimap(_InputIterator __f, _InputIterator __l,
- const key_compare& __comp = key_compare())
- : __tree_(__vc(__comp))
- {
- insert(__f, __l);
- }
-
- template <class _InputIterator>
- _LIBCPP_HIDE_FROM_ABI
- multimap(_InputIterator __f, _InputIterator __l,
- const key_compare& __comp, const allocator_type& __a)
- : __tree_(__vc(__comp), typename __base::allocator_type(__a))
- {
- insert(__f, __l);
- }
+ _LIBCPP_HIDE_FROM_ABI explicit multimap(const key_compare& __comp) _NOEXCEPT_(
+ is_nothrow_default_constructible<allocator_type>::value&& is_nothrow_copy_constructible<key_compare>::value)
+ : __tree_(__vc(__comp)) {}
+
+ _LIBCPP_HIDE_FROM_ABI explicit multimap(const key_compare& __comp, const allocator_type& __a)
+ : __tree_(__vc(__comp), typename __base::allocator_type(__a)) {}
+
+ template <class _InputIterator>
+ _LIBCPP_HIDE_FROM_ABI multimap(_InputIterator __f, _InputIterator __l, const key_compare& __comp = key_compare())
+ : __tree_(__vc(__comp)) {
+ insert(__f, __l);
+ }
+
+ template <class _InputIterator>
+ _LIBCPP_HIDE_FROM_ABI
+ multimap(_InputIterator __f, _InputIterator __l, const key_compare& __comp, const allocator_type& __a)
+ : __tree_(__vc(__comp), typename __base::allocator_type(__a)) {
+ insert(__f, __l);
+ }
#if _LIBCPP_STD_VER >= 23
- template <_ContainerCompatibleRange<value_type> _Range>
- _LIBCPP_HIDE_FROM_ABI
- multimap(from_range_t, _Range&& __range, const key_compare& __comp = key_compare(),
- const allocator_type& __a = allocator_type())
+ template <_ContainerCompatibleRange<value_type> _Range>
+ _LIBCPP_HIDE_FROM_ABI
+ multimap(from_range_t,
+ _Range&& __range,
+ const key_compare& __comp = key_compare(),
+ const allocator_type& __a = allocator_type())
: __tree_(__vc(__comp), typename __base::allocator_type(__a)) {
- insert_range(std::forward<_Range>(__range));
- }
+ insert_range(std::forward<_Range>(__range));
+ }
#endif
#if _LIBCPP_STD_VER >= 14
- template <class _InputIterator>
- _LIBCPP_HIDE_FROM_ABI
- multimap(_InputIterator __f, _InputIterator __l, const allocator_type& __a)
- : multimap(__f, __l, key_compare(), __a) {}
+ template <class _InputIterator>
+ _LIBCPP_HIDE_FROM_ABI multimap(_InputIterator __f, _InputIterator __l, const allocator_type& __a)
+ : multimap(__f, __l, key_compare(), __a) {}
#endif
#if _LIBCPP_STD_VER >= 23
- template <_ContainerCompatibleRange<value_type> _Range>
- _LIBCPP_HIDE_FROM_ABI
- multimap(from_range_t, _Range&& __range, const allocator_type& __a)
+ template <_ContainerCompatibleRange<value_type> _Range>
+ _LIBCPP_HIDE_FROM_ABI multimap(from_range_t, _Range&& __range, const allocator_type& __a)
: multimap(from_range, std::forward<_Range>(__range), key_compare(), __a) {}
#endif
- _LIBCPP_HIDE_FROM_ABI
- multimap(const multimap& __m)
- : __tree_(__m.__tree_.value_comp(),
- __alloc_traits::select_on_container_copy_construction(__m.__tree_.__alloc()))
- {
- insert(__m.begin(), __m.end());
- }
-
- _LIBCPP_HIDE_FROM_ABI
- multimap& operator=(const multimap& __m)
- {
+ _LIBCPP_HIDE_FROM_ABI multimap(const multimap& __m)
+ : __tree_(__m.__tree_.value_comp(),
+ __alloc_traits::select_on_container_copy_construction(__m.__tree_.__alloc())) {
+ insert(__m.begin(), __m.end());
+ }
+
+ _LIBCPP_HIDE_FROM_ABI multimap& operator=(const multimap& __m) {
#ifndef _LIBCPP_CXX03_LANG
- __tree_ = __m.__tree_;
+ __tree_ = __m.__tree_;
#else
- if (this != std::addressof(__m)) {
- __tree_.clear();
- __tree_.value_comp() = __m.__tree_.value_comp();
- __tree_.__copy_assign_alloc(__m.__tree_);
- insert(__m.begin(), __m.end());
- }
+ if (this != std::addressof(__m)) {
+ __tree_.clear();
+ __tree_.value_comp() = __m.__tree_.value_comp();
+ __tree_.__copy_assign_alloc(__m.__tree_);
+ insert(__m.begin(), __m.end());
+ }
#endif
- return *this;
- }
+ return *this;
+ }
#ifndef _LIBCPP_CXX03_LANG
- _LIBCPP_HIDE_FROM_ABI
- multimap(multimap&& __m)
- _NOEXCEPT_(is_nothrow_move_constructible<__base>::value)
- : __tree_(std::move(__m.__tree_))
- {
- }
-
- _LIBCPP_HIDE_FROM_ABI multimap(multimap&& __m, const allocator_type& __a);
-
- _LIBCPP_HIDE_FROM_ABI
- multimap& operator=(multimap&& __m)
- _NOEXCEPT_(is_nothrow_move_assignable<__base>::value)
- {
- __tree_ = std::move(__m.__tree_);
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI
- multimap(initializer_list<value_type> __il, const key_compare& __comp = key_compare())
- : __tree_(__vc(__comp))
- {
- insert(__il.begin(), __il.end());
- }
-
- _LIBCPP_HIDE_FROM_ABI
- multimap(initializer_list<value_type> __il, const key_compare& __comp, const allocator_type& __a)
- : __tree_(__vc(__comp), typename __base::allocator_type(__a))
- {
- insert(__il.begin(), __il.end());
- }
+ _LIBCPP_HIDE_FROM_ABI multimap(multimap&& __m) _NOEXCEPT_(is_nothrow_move_constructible<__base>::value)
+ : __tree_(std::move(__m.__tree_)) {}
-#if _LIBCPP_STD_VER >= 14
- _LIBCPP_HIDE_FROM_ABI
- multimap(initializer_list<value_type> __il, const allocator_type& __a)
- : multimap(__il, key_compare(), __a) {}
-#endif
+ _LIBCPP_HIDE_FROM_ABI multimap(multimap&& __m, const allocator_type& __a);
- _LIBCPP_HIDE_FROM_ABI
- multimap& operator=(initializer_list<value_type> __il)
- {
- __tree_.__assign_multi(__il.begin(), __il.end());
- return *this;
- }
+ _LIBCPP_HIDE_FROM_ABI multimap& operator=(multimap&& __m) _NOEXCEPT_(is_nothrow_move_assignable<__base>::value) {
+ __tree_ = std::move(__m.__tree_);
+ return *this;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI multimap(initializer_list<value_type> __il, const key_compare& __comp = key_compare())
+ : __tree_(__vc(__comp)) {
+ insert(__il.begin(), __il.end());
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ multimap(initializer_list<value_type> __il, const key_compare& __comp, const allocator_type& __a)
+ : __tree_(__vc(__comp), typename __base::allocator_type(__a)) {
+ insert(__il.begin(), __il.end());
+ }
+
+# if _LIBCPP_STD_VER >= 14
+ _LIBCPP_HIDE_FROM_ABI multimap(initializer_list<value_type> __il, const allocator_type& __a)
+ : multimap(__il, key_compare(), __a) {}
+# endif
+
+ _LIBCPP_HIDE_FROM_ABI multimap& operator=(initializer_list<value_type> __il) {
+ __tree_.__assign_multi(__il.begin(), __il.end());
+ return *this;
+ }
#endif // _LIBCPP_CXX03_LANG
- _LIBCPP_HIDE_FROM_ABI
- explicit multimap(const allocator_type& __a)
- : __tree_(typename __base::allocator_type(__a))
- {
- }
-
- _LIBCPP_HIDE_FROM_ABI
- multimap(const multimap& __m, const allocator_type& __a)
- : __tree_(__m.__tree_.value_comp(), typename __base::allocator_type(__a))
- {
- insert(__m.begin(), __m.end());
- }
-
- _LIBCPP_HIDE_FROM_ABI
- ~multimap() {
- static_assert(sizeof(__diagnose_non_const_comparator<_Key, _Compare>()), "");
- }
+ _LIBCPP_HIDE_FROM_ABI explicit multimap(const allocator_type& __a) : __tree_(typename __base::allocator_type(__a)) {}
- _LIBCPP_HIDE_FROM_ABI
- iterator begin() _NOEXCEPT {return __tree_.begin();}
- _LIBCPP_HIDE_FROM_ABI
- const_iterator begin() const _NOEXCEPT {return __tree_.begin();}
- _LIBCPP_HIDE_FROM_ABI
- iterator end() _NOEXCEPT {return __tree_.end();}
- _LIBCPP_HIDE_FROM_ABI
- const_iterator end() const _NOEXCEPT {return __tree_.end();}
-
- _LIBCPP_HIDE_FROM_ABI
- reverse_iterator rbegin() _NOEXCEPT {return reverse_iterator(end());}
- _LIBCPP_HIDE_FROM_ABI
- const_reverse_iterator rbegin() const _NOEXCEPT
- {return const_reverse_iterator(end());}
- _LIBCPP_HIDE_FROM_ABI
- reverse_iterator rend() _NOEXCEPT {return reverse_iterator(begin());}
- _LIBCPP_HIDE_FROM_ABI
- const_reverse_iterator rend() const _NOEXCEPT
- {return const_reverse_iterator(begin());}
-
- _LIBCPP_HIDE_FROM_ABI
- const_iterator cbegin() const _NOEXCEPT {return begin();}
- _LIBCPP_HIDE_FROM_ABI
- const_iterator cend() const _NOEXCEPT {return end();}
- _LIBCPP_HIDE_FROM_ABI
- const_reverse_iterator crbegin() const _NOEXCEPT {return rbegin();}
- _LIBCPP_HIDE_FROM_ABI
- const_reverse_iterator crend() const _NOEXCEPT {return rend();}
-
- _LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_HIDE_FROM_ABI
- bool empty() const _NOEXCEPT {return __tree_.size() == 0;}
- _LIBCPP_HIDE_FROM_ABI
- size_type size() const _NOEXCEPT {return __tree_.size();}
- _LIBCPP_HIDE_FROM_ABI
- size_type max_size() const _NOEXCEPT {return __tree_.max_size();}
-
- _LIBCPP_HIDE_FROM_ABI
- allocator_type get_allocator() const _NOEXCEPT {return allocator_type(__tree_.__alloc());}
- _LIBCPP_HIDE_FROM_ABI
- key_compare key_comp() const {return __tree_.value_comp().key_comp();}
- _LIBCPP_HIDE_FROM_ABI
- value_compare value_comp() const
- {return value_compare(__tree_.value_comp().key_comp());}
+ _LIBCPP_HIDE_FROM_ABI multimap(const multimap& __m, const allocator_type& __a)
+ : __tree_(__m.__tree_.value_comp(), typename __base::allocator_type(__a)) {
+ insert(__m.begin(), __m.end());
+ }
-#ifndef _LIBCPP_CXX03_LANG
+ _LIBCPP_HIDE_FROM_ABI ~multimap() { static_assert(sizeof(__diagnose_non_const_comparator<_Key, _Compare>()), ""); }
- template <class ..._Args>
- _LIBCPP_HIDE_FROM_ABI
- iterator emplace(_Args&& ...__args) {
- return __tree_.__emplace_multi(std::forward<_Args>(__args)...);
- }
+ _LIBCPP_HIDE_FROM_ABI iterator begin() _NOEXCEPT { return __tree_.begin(); }
+ _LIBCPP_HIDE_FROM_ABI const_iterator begin() const _NOEXCEPT { return __tree_.begin(); }
+ _LIBCPP_HIDE_FROM_ABI iterator end() _NOEXCEPT { return __tree_.end(); }
+ _LIBCPP_HIDE_FROM_ABI const_iterator end() const _NOEXCEPT { return __tree_.end(); }
- template <class ..._Args>
- _LIBCPP_HIDE_FROM_ABI
- iterator emplace_hint(const_iterator __p, _Args&& ...__args) {
- return __tree_.__emplace_hint_multi(__p.__i_, std::forward<_Args>(__args)...);
- }
+ _LIBCPP_HIDE_FROM_ABI reverse_iterator rbegin() _NOEXCEPT { return reverse_iterator(end()); }
+ _LIBCPP_HIDE_FROM_ABI const_reverse_iterator rbegin() const _NOEXCEPT { return const_reverse_iterator(end()); }
+ _LIBCPP_HIDE_FROM_ABI reverse_iterator rend() _NOEXCEPT { return reverse_iterator(begin()); }
+ _LIBCPP_HIDE_FROM_ABI const_reverse_iterator rend() const _NOEXCEPT { return const_reverse_iterator(begin()); }
+
+ _LIBCPP_HIDE_FROM_ABI const_iterator cbegin() const _NOEXCEPT { return begin(); }
+ _LIBCPP_HIDE_FROM_ABI const_iterator cend() const _NOEXCEPT { return end(); }
+ _LIBCPP_HIDE_FROM_ABI const_reverse_iterator crbegin() const _NOEXCEPT { return rbegin(); }
+ _LIBCPP_HIDE_FROM_ABI const_reverse_iterator crend() const _NOEXCEPT { return rend(); }
+
+ _LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_HIDE_FROM_ABI bool empty() const _NOEXCEPT { return __tree_.size() == 0; }
+ _LIBCPP_HIDE_FROM_ABI size_type size() const _NOEXCEPT { return __tree_.size(); }
+ _LIBCPP_HIDE_FROM_ABI size_type max_size() const _NOEXCEPT { return __tree_.max_size(); }
+
+ _LIBCPP_HIDE_FROM_ABI allocator_type get_allocator() const _NOEXCEPT { return allocator_type(__tree_.__alloc()); }
+ _LIBCPP_HIDE_FROM_ABI key_compare key_comp() const { return __tree_.value_comp().key_comp(); }
+ _LIBCPP_HIDE_FROM_ABI value_compare value_comp() const { return value_compare(__tree_.value_comp().key_comp()); }
- template <class _Pp,
- class = __enable_if_t<is_constructible<value_type, _Pp>::value>>
- _LIBCPP_HIDE_FROM_ABI
- iterator insert(_Pp&& __p)
- {return __tree_.__insert_multi(std::forward<_Pp>(__p));}
+#ifndef _LIBCPP_CXX03_LANG
+
+ template <class... _Args>
+ _LIBCPP_HIDE_FROM_ABI iterator emplace(_Args&&... __args) {
+ return __tree_.__emplace_multi(std::forward<_Args>(__args)...);
+ }
- template <class _Pp,
- class = __enable_if_t<is_constructible<value_type, _Pp>::value>>
- _LIBCPP_HIDE_FROM_ABI
- iterator insert(const_iterator __pos, _Pp&& __p)
- {return __tree_.__insert_multi(__pos.__i_, std::forward<_Pp>(__p));}
+ template <class... _Args>
+ _LIBCPP_HIDE_FROM_ABI iterator emplace_hint(const_iterator __p, _Args&&... __args) {
+ return __tree_.__emplace_hint_multi(__p.__i_, std::forward<_Args>(__args)...);
+ }
- _LIBCPP_HIDE_FROM_ABI
- iterator insert(value_type&& __v)
- {return __tree_.__insert_multi(std::move(__v));}
+ template <class _Pp, class = __enable_if_t<is_constructible<value_type, _Pp>::value>>
+ _LIBCPP_HIDE_FROM_ABI iterator insert(_Pp&& __p) {
+ return __tree_.__insert_multi(std::forward<_Pp>(__p));
+ }
- _LIBCPP_HIDE_FROM_ABI
- iterator insert(const_iterator __p, value_type&& __v)
- {return __tree_.__insert_multi(__p.__i_, std::move(__v));}
+ template <class _Pp, class = __enable_if_t<is_constructible<value_type, _Pp>::value>>
+ _LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __pos, _Pp&& __p) {
+ return __tree_.__insert_multi(__pos.__i_, std::forward<_Pp>(__p));
+ }
+ _LIBCPP_HIDE_FROM_ABI iterator insert(value_type&& __v) { return __tree_.__insert_multi(std::move(__v)); }
- _LIBCPP_HIDE_FROM_ABI
- void insert(initializer_list<value_type> __il)
- {insert(__il.begin(), __il.end());}
+ _LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __p, value_type&& __v) {
+ return __tree_.__insert_multi(__p.__i_, std::move(__v));
+ }
+
+ _LIBCPP_HIDE_FROM_ABI void insert(initializer_list<value_type> __il) { insert(__il.begin(), __il.end()); }
#endif // _LIBCPP_CXX03_LANG
- _LIBCPP_HIDE_FROM_ABI
- iterator insert(const value_type& __v) {return __tree_.__insert_multi(__v);}
+ _LIBCPP_HIDE_FROM_ABI iterator insert(const value_type& __v) { return __tree_.__insert_multi(__v); }
- _LIBCPP_HIDE_FROM_ABI
- iterator insert(const_iterator __p, const value_type& __v)
- {return __tree_.__insert_multi(__p.__i_, __v);}
+ _LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __p, const value_type& __v) {
+ return __tree_.__insert_multi(__p.__i_, __v);
+ }
- template <class _InputIterator>
- _LIBCPP_HIDE_FROM_ABI
- void insert(_InputIterator __f, _InputIterator __l)
- {
- for (const_iterator __e = cend(); __f != __l; ++__f)
- __tree_.__insert_multi(__e.__i_, *__f);
- }
+ template <class _InputIterator>
+ _LIBCPP_HIDE_FROM_ABI void insert(_InputIterator __f, _InputIterator __l) {
+ for (const_iterator __e = cend(); __f != __l; ++__f)
+ __tree_.__insert_multi(__e.__i_, *__f);
+ }
#if _LIBCPP_STD_VER >= 23
- template <_ContainerCompatibleRange<value_type> _Range>
- _LIBCPP_HIDE_FROM_ABI
- void insert_range(_Range&& __range) {
- const_iterator __end = cend();
- for (auto&& __element : __range) {
- __tree_.__insert_multi(__end.__i_, std::forward<decltype(__element)>(__element));
- }
+ template <_ContainerCompatibleRange<value_type> _Range>
+ _LIBCPP_HIDE_FROM_ABI void insert_range(_Range&& __range) {
+ const_iterator __end = cend();
+ for (auto&& __element : __range) {
+ __tree_.__insert_multi(__end.__i_, std::forward<decltype(__element)>(__element));
}
+ }
#endif
- _LIBCPP_HIDE_FROM_ABI
- iterator erase(const_iterator __p) {return __tree_.erase(__p.__i_);}
- _LIBCPP_HIDE_FROM_ABI
- iterator erase(iterator __p) {return __tree_.erase(__p.__i_);}
- _LIBCPP_HIDE_FROM_ABI
- size_type erase(const key_type& __k) {return __tree_.__erase_multi(__k);}
- _LIBCPP_HIDE_FROM_ABI
- iterator erase(const_iterator __f, const_iterator __l)
- {return __tree_.erase(__f.__i_, __l.__i_);}
+ _LIBCPP_HIDE_FROM_ABI iterator erase(const_iterator __p) { return __tree_.erase(__p.__i_); }
+ _LIBCPP_HIDE_FROM_ABI iterator erase(iterator __p) { return __tree_.erase(__p.__i_); }
+ _LIBCPP_HIDE_FROM_ABI size_type erase(const key_type& __k) { return __tree_.__erase_multi(__k); }
+ _LIBCPP_HIDE_FROM_ABI iterator erase(const_iterator __f, const_iterator __l) {
+ return __tree_.erase(__f.__i_, __l.__i_);
+ }
#if _LIBCPP_STD_VER >= 17
- _LIBCPP_HIDE_FROM_ABI
- iterator insert(node_type&& __nh)
- {
- _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(__nh.empty() || __nh.get_allocator() == get_allocator(),
- "node_type with incompatible allocator passed to multimap::insert()");
- return __tree_.template __node_handle_insert_multi<node_type>(
- std::move(__nh));
- }
- _LIBCPP_HIDE_FROM_ABI
- iterator insert(const_iterator __hint, node_type&& __nh)
- {
- _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(__nh.empty() || __nh.get_allocator() == get_allocator(),
- "node_type with incompatible allocator passed to multimap::insert()");
- return __tree_.template __node_handle_insert_multi<node_type>(
- __hint.__i_, std::move(__nh));
- }
- _LIBCPP_HIDE_FROM_ABI
- node_type extract(key_type const& __key)
- {
- return __tree_.template __node_handle_extract<node_type>(__key);
- }
- _LIBCPP_HIDE_FROM_ABI
- node_type extract(const_iterator __it)
- {
- return __tree_.template __node_handle_extract<node_type>(
- __it.__i_);
- }
- template <class _Compare2>
- _LIBCPP_HIDE_FROM_ABI
- void merge(multimap<key_type, mapped_type, _Compare2, allocator_type>& __source)
- {
- _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(__source.get_allocator() == get_allocator(),
- "merging container with incompatible allocator");
- return __tree_.__node_handle_merge_multi(__source.__tree_);
- }
- template <class _Compare2>
- _LIBCPP_HIDE_FROM_ABI
- void merge(multimap<key_type, mapped_type, _Compare2, allocator_type>&& __source)
- {
- _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(__source.get_allocator() == get_allocator(),
- "merging container with incompatible allocator");
- return __tree_.__node_handle_merge_multi(__source.__tree_);
- }
- template <class _Compare2>
- _LIBCPP_HIDE_FROM_ABI
- void merge(map<key_type, mapped_type, _Compare2, allocator_type>& __source)
- {
- _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(__source.get_allocator() == get_allocator(),
- "merging container with incompatible allocator");
- return __tree_.__node_handle_merge_multi(__source.__tree_);
- }
- template <class _Compare2>
- _LIBCPP_HIDE_FROM_ABI
- void merge(map<key_type, mapped_type, _Compare2, allocator_type>&& __source)
- {
- _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(__source.get_allocator() == get_allocator(),
- "merging container with incompatible allocator");
- return __tree_.__node_handle_merge_multi(__source.__tree_);
- }
+ _LIBCPP_HIDE_FROM_ABI iterator insert(node_type&& __nh) {
+ _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(__nh.empty() || __nh.get_allocator() == get_allocator(),
+ "node_type with incompatible allocator passed to multimap::insert()");
+ return __tree_.template __node_handle_insert_multi<node_type>(std::move(__nh));
+ }
+ _LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __hint, node_type&& __nh) {
+ _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(__nh.empty() || __nh.get_allocator() == get_allocator(),
+ "node_type with incompatible allocator passed to multimap::insert()");
+ return __tree_.template __node_handle_insert_multi<node_type>(__hint.__i_, std::move(__nh));
+ }
+ _LIBCPP_HIDE_FROM_ABI node_type extract(key_type const& __key) {
+ return __tree_.template __node_handle_extract<node_type>(__key);
+ }
+ _LIBCPP_HIDE_FROM_ABI node_type extract(const_iterator __it) {
+ return __tree_.template __node_handle_extract<node_type>(__it.__i_);
+ }
+ template <class _Compare2>
+ _LIBCPP_HIDE_FROM_ABI void merge(multimap<key_type, mapped_type, _Compare2, allocator_type>& __source) {
+ _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(
+ __source.get_allocator() == get_allocator(), "merging container with incompatible allocator");
+ return __tree_.__node_handle_merge_multi(__source.__tree_);
+ }
+ template <class _Compare2>
+ _LIBCPP_HIDE_FROM_ABI void merge(multimap<key_type, mapped_type, _Compare2, allocator_type>&& __source) {
+ _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(
+ __source.get_allocator() == get_allocator(), "merging container with incompatible allocator");
+ return __tree_.__node_handle_merge_multi(__source.__tree_);
+ }
+ template <class _Compare2>
+ _LIBCPP_HIDE_FROM_ABI void merge(map<key_type, mapped_type, _Compare2, allocator_type>& __source) {
+ _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(
+ __source.get_allocator() == get_allocator(), "merging container with incompatible allocator");
+ return __tree_.__node_handle_merge_multi(__source.__tree_);
+ }
+ template <class _Compare2>
+ _LIBCPP_HIDE_FROM_ABI void merge(map<key_type, mapped_type, _Compare2, allocator_type>&& __source) {
+ _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(
+ __source.get_allocator() == get_allocator(), "merging container with incompatible allocator");
+ return __tree_.__node_handle_merge_multi(__source.__tree_);
+ }
#endif
- _LIBCPP_HIDE_FROM_ABI
- void clear() _NOEXCEPT {__tree_.clear();}
+ _LIBCPP_HIDE_FROM_ABI void clear() _NOEXCEPT { __tree_.clear(); }
- _LIBCPP_HIDE_FROM_ABI
- void swap(multimap& __m)
- _NOEXCEPT_(__is_nothrow_swappable<__base>::value)
- {__tree_.swap(__m.__tree_);}
+ _LIBCPP_HIDE_FROM_ABI void swap(multimap& __m) _NOEXCEPT_(__is_nothrow_swappable<__base>::value) {
+ __tree_.swap(__m.__tree_);
+ }
- _LIBCPP_HIDE_FROM_ABI
- iterator find(const key_type& __k) {return __tree_.find(__k);}
- _LIBCPP_HIDE_FROM_ABI
- const_iterator find(const key_type& __k) const {return __tree_.find(__k);}
+ _LIBCPP_HIDE_FROM_ABI iterator find(const key_type& __k) { return __tree_.find(__k); }
+ _LIBCPP_HIDE_FROM_ABI const_iterator find(const key_type& __k) const { return __tree_.find(__k); }
#if _LIBCPP_STD_VER >= 14
- template <typename _K2, enable_if_t<__is_transparent<_Compare, _K2>::value, int> = 0>
- _LIBCPP_HIDE_FROM_ABI
- iterator
- find(const _K2& __k) {return __tree_.find(__k);}
- template <typename _K2, enable_if_t<__is_transparent<_Compare, _K2>::value, int> = 0>
- _LIBCPP_HIDE_FROM_ABI
- const_iterator
- find(const _K2& __k) const {return __tree_.find(__k);}
+ template <typename _K2, enable_if_t<__is_transparent<_Compare, _K2>::value, int> = 0>
+ _LIBCPP_HIDE_FROM_ABI iterator find(const _K2& __k) {
+ return __tree_.find(__k);
+ }
+ template <typename _K2, enable_if_t<__is_transparent<_Compare, _K2>::value, int> = 0>
+ _LIBCPP_HIDE_FROM_ABI const_iterator find(const _K2& __k) const {
+ return __tree_.find(__k);
+ }
#endif
- _LIBCPP_HIDE_FROM_ABI
- size_type count(const key_type& __k) const
- {return __tree_.__count_multi(__k);}
+ _LIBCPP_HIDE_FROM_ABI size_type count(const key_type& __k) const { return __tree_.__count_multi(__k); }
#if _LIBCPP_STD_VER >= 14
- template <typename _K2, enable_if_t<__is_transparent<_Compare, _K2>::value, int> = 0>
- _LIBCPP_HIDE_FROM_ABI
- size_type
- count(const _K2& __k) const {return __tree_.__count_multi(__k);}
+ template <typename _K2, enable_if_t<__is_transparent<_Compare, _K2>::value, int> = 0>
+ _LIBCPP_HIDE_FROM_ABI size_type count(const _K2& __k) const {
+ return __tree_.__count_multi(__k);
+ }
#endif
#if _LIBCPP_STD_VER >= 20
- _LIBCPP_HIDE_FROM_ABI
- bool contains(const key_type& __k) const {return find(__k) != end();}
- template <typename _K2, enable_if_t<__is_transparent<_Compare, _K2>::value, int> = 0>
- _LIBCPP_HIDE_FROM_ABI
- bool
- contains(const _K2& __k) const { return find(__k) != end(); }
+ _LIBCPP_HIDE_FROM_ABI bool contains(const key_type& __k) const { return find(__k) != end(); }
+ template <typename _K2, enable_if_t<__is_transparent<_Compare, _K2>::value, int> = 0>
+ _LIBCPP_HIDE_FROM_ABI bool contains(const _K2& __k) const {
+ return find(__k) != end();
+ }
#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(__k); }
+ _LIBCPP_HIDE_FROM_ABI const_iterator lower_bound(const key_type& __k) const { return __tree_.lower_bound(__k); }
#if _LIBCPP_STD_VER >= 14
- template <typename _K2, enable_if_t<__is_transparent<_Compare, _K2>::value, int> = 0>
- _LIBCPP_HIDE_FROM_ABI
- iterator
- lower_bound(const _K2& __k) {return __tree_.lower_bound(__k);}
-
- template <typename _K2, enable_if_t<__is_transparent<_Compare, _K2>::value, int> = 0>
- _LIBCPP_HIDE_FROM_ABI
- const_iterator
- lower_bound(const _K2& __k) const {return __tree_.lower_bound(__k);}
+ template <typename _K2, enable_if_t<__is_transparent<_Compare, _K2>::value, int> = 0>
+ _LIBCPP_HIDE_FROM_ABI iterator lower_bound(const _K2& __k) {
+ return __tree_.lower_bound(__k);
+ }
+
+ template <typename _K2, enable_if_t<__is_transparent<_Compare, _K2>::value, int> = 0>
+ _LIBCPP_HIDE_FROM_ABI const_iterator lower_bound(const _K2& __k) const {
+ return __tree_.lower_bound(__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(__k); }
+ _LIBCPP_HIDE_FROM_ABI const_iterator upper_bound(const key_type& __k) const { return __tree_.upper_bound(__k); }
#if _LIBCPP_STD_VER >= 14
- template <typename _K2, enable_if_t<__is_transparent<_Compare, _K2>::value, int> = 0>
- _LIBCPP_HIDE_FROM_ABI
- iterator
- upper_bound(const _K2& __k) {return __tree_.upper_bound(__k);}
- template <typename _K2, enable_if_t<__is_transparent<_Compare, _K2>::value, int> = 0>
- _LIBCPP_HIDE_FROM_ABI
- const_iterator
- upper_bound(const _K2& __k) const {return __tree_.upper_bound(__k);}
+ template <typename _K2, enable_if_t<__is_transparent<_Compare, _K2>::value, int> = 0>
+ _LIBCPP_HIDE_FROM_ABI iterator upper_bound(const _K2& __k) {
+ return __tree_.upper_bound(__k);
+ }
+ template <typename _K2, enable_if_t<__is_transparent<_Compare, _K2>::value, int> = 0>
+ _LIBCPP_HIDE_FROM_ABI const_iterator upper_bound(const _K2& __k) const {
+ return __tree_.upper_bound(__k);
+ }
#endif
- _LIBCPP_HIDE_FROM_ABI
- pair<iterator,iterator> equal_range(const key_type& __k)
- {return __tree_.__equal_range_multi(__k);}
- _LIBCPP_HIDE_FROM_ABI
- pair<const_iterator,const_iterator> equal_range(const key_type& __k) const
- {return __tree_.__equal_range_multi(__k);}
+ _LIBCPP_HIDE_FROM_ABI pair<iterator, iterator> equal_range(const key_type& __k) {
+ return __tree_.__equal_range_multi(__k);
+ }
+ _LIBCPP_HIDE_FROM_ABI pair<const_iterator, const_iterator> equal_range(const key_type& __k) const {
+ return __tree_.__equal_range_multi(__k);
+ }
#if _LIBCPP_STD_VER >= 14
- template <typename _K2, enable_if_t<__is_transparent<_Compare, _K2>::value, int> = 0>
- _LIBCPP_HIDE_FROM_ABI
- pair<iterator,iterator>
- equal_range(const _K2& __k) {return __tree_.__equal_range_multi(__k);}
- template <typename _K2, enable_if_t<__is_transparent<_Compare, _K2>::value, int> = 0>
- _LIBCPP_HIDE_FROM_ABI
- pair<const_iterator,const_iterator>
- equal_range(const _K2& __k) const {return __tree_.__equal_range_multi(__k);}
+ template <typename _K2, enable_if_t<__is_transparent<_Compare, _K2>::value, int> = 0>
+ _LIBCPP_HIDE_FROM_ABI pair<iterator, iterator> equal_range(const _K2& __k) {
+ return __tree_.__equal_range_multi(__k);
+ }
+ template <typename _K2, enable_if_t<__is_transparent<_Compare, _K2>::value, int> = 0>
+ _LIBCPP_HIDE_FROM_ABI pair<const_iterator, const_iterator> equal_range(const _K2& __k) const {
+ return __tree_.__equal_range_multi(__k);
+ }
#endif
private:
- typedef typename __base::__node __node;
- typedef typename __base::__node_allocator __node_allocator;
- typedef typename __base::__node_pointer __node_pointer;
+ typedef typename __base::__node __node;
+ typedef typename __base::__node_allocator __node_allocator;
+ typedef typename __base::__node_pointer __node_pointer;
- typedef __map_node_destructor<__node_allocator> _Dp;
- typedef unique_ptr<__node, _Dp> __node_holder;
+ typedef __map_node_destructor<__node_allocator> _Dp;
+ typedef unique_ptr<__node, _Dp> __node_holder;
};
#if _LIBCPP_STD_VER >= 17
-template<class _InputIterator, class _Compare = less<__iter_key_type<_InputIterator>>,
- class _Allocator = allocator<__iter_to_alloc_type<_InputIterator>>,
- class = enable_if_t<__has_input_iterator_category<_InputIterator>::value, void>,
- class = enable_if_t<!__is_allocator<_Compare>::value, void>,
- class = enable_if_t<__is_allocator<_Allocator>::value, void>>
+template <class _InputIterator,
+ class _Compare = less<__iter_key_type<_InputIterator>>,
+ class _Allocator = allocator<__iter_to_alloc_type<_InputIterator>>,
+ class = enable_if_t<__has_input_iterator_category<_InputIterator>::value, void>,
+ class = enable_if_t<!__is_allocator<_Compare>::value, void>,
+ class = enable_if_t<__is_allocator<_Allocator>::value, void>>
multimap(_InputIterator, _InputIterator, _Compare = _Compare(), _Allocator = _Allocator())
- -> multimap<__iter_key_type<_InputIterator>, __iter_mapped_type<_InputIterator>, _Compare, _Allocator>;
+ -> multimap<__iter_key_type<_InputIterator>, __iter_mapped_type<_InputIterator>, _Compare, _Allocator>;
-#if _LIBCPP_STD_VER >= 23
-template <ranges::input_range _Range, class _Compare = less<__range_key_type<_Range>>,
+# if _LIBCPP_STD_VER >= 23
+template <ranges::input_range _Range,
+ class _Compare = less<__range_key_type<_Range>>,
class _Allocator = allocator<__range_to_alloc_type<_Range>>,
- class = enable_if_t<!__is_allocator<_Compare>::value, void>,
- class = enable_if_t<__is_allocator<_Allocator>::value, void>>
+ class = enable_if_t<!__is_allocator<_Compare>::value, void>,
+ class = enable_if_t<__is_allocator<_Allocator>::value, void>>
multimap(from_range_t, _Range&&, _Compare = _Compare(), _Allocator = _Allocator())
- -> multimap<__range_key_type<_Range>, __range_mapped_type<_Range>, _Compare, _Allocator>;
-#endif
-
-template<class _Key, class _Tp, class _Compare = less<remove_const_t<_Key>>,
- class _Allocator = allocator<pair<const _Key, _Tp>>,
- class = enable_if_t<!__is_allocator<_Compare>::value, void>,
- class = enable_if_t<__is_allocator<_Allocator>::value, void>>
+ -> multimap<__range_key_type<_Range>, __range_mapped_type<_Range>, _Compare, _Allocator>;
+# endif
+
+template <class _Key,
+ class _Tp,
+ class _Compare = less<remove_const_t<_Key>>,
+ class _Allocator = allocator<pair<const _Key, _Tp>>,
+ class = enable_if_t<!__is_allocator<_Compare>::value, void>,
+ class = enable_if_t<__is_allocator<_Allocator>::value, void>>
multimap(initializer_list<pair<_Key, _Tp>>, _Compare = _Compare(), _Allocator = _Allocator())
- -> multimap<remove_const_t<_Key>, _Tp, _Compare, _Allocator>;
+ -> multimap<remove_const_t<_Key>, _Tp, _Compare, _Allocator>;
-template<class _InputIterator, class _Allocator,
- class = enable_if_t<__has_input_iterator_category<_InputIterator>::value, void>,
- class = enable_if_t<__is_allocator<_Allocator>::value, void>>
+template <class _InputIterator,
+ class _Allocator,
+ class = enable_if_t<__has_input_iterator_category<_InputIterator>::value, void>,
+ class = enable_if_t<__is_allocator<_Allocator>::value, void>>
multimap(_InputIterator, _InputIterator, _Allocator)
- -> multimap<__iter_key_type<_InputIterator>, __iter_mapped_type<_InputIterator>,
- less<__iter_key_type<_InputIterator>>, _Allocator>;
+ -> multimap<__iter_key_type<_InputIterator>,
+ __iter_mapped_type<_InputIterator>,
+ less<__iter_key_type<_InputIterator>>,
+ _Allocator>;
-#if _LIBCPP_STD_VER >= 23
-template <ranges::input_range _Range, class _Allocator,
- class = enable_if_t<__is_allocator<_Allocator>::value, void>>
+# if _LIBCPP_STD_VER >= 23
+template <ranges::input_range _Range, class _Allocator, class = enable_if_t<__is_allocator<_Allocator>::value, void>>
multimap(from_range_t, _Range&&, _Allocator)
- -> multimap<__range_key_type<_Range>, __range_mapped_type<_Range>, less<__range_key_type<_Range>>, _Allocator>;
-#endif
+ -> multimap<__range_key_type<_Range>, __range_mapped_type<_Range>, less<__range_key_type<_Range>>, _Allocator>;
+# endif
-template<class _Key, class _Tp, class _Allocator,
- class = enable_if_t<__is_allocator<_Allocator>::value, void>>
+template <class _Key, class _Tp, class _Allocator, class = enable_if_t<__is_allocator<_Allocator>::value, void>>
multimap(initializer_list<pair<_Key, _Tp>>, _Allocator)
- -> multimap<remove_const_t<_Key>, _Tp, less<remove_const_t<_Key>>, _Allocator>;
+ -> multimap<remove_const_t<_Key>, _Tp, less<remove_const_t<_Key>>, _Allocator>;
#endif
#ifndef _LIBCPP_CXX03_LANG
template <class _Key, class _Tp, class _Compare, class _Allocator>
multimap<_Key, _Tp, _Compare, _Allocator>::multimap(multimap&& __m, const allocator_type& __a)
- : __tree_(std::move(__m.__tree_), typename __base::allocator_type(__a))
-{
- if (__a != __m.get_allocator())
- {
- const_iterator __e = cend();
- while (!__m.empty())
- __tree_.__insert_multi(__e.__i_,
- std::move(__m.__tree_.remove(__m.begin().__i_)->__value_.__move()));
- }
+ : __tree_(std::move(__m.__tree_), typename __base::allocator_type(__a)) {
+ if (__a != __m.get_allocator()) {
+ const_iterator __e = cend();
+ while (!__m.empty())
+ __tree_.__insert_multi(__e.__i_, std::move(__m.__tree_.remove(__m.begin().__i_)->__value_.__move()));
+ }
}
#endif
template <class _Key, class _Tp, class _Compare, class _Allocator>
-inline _LIBCPP_HIDE_FROM_ABI
-bool
-operator==(const multimap<_Key, _Tp, _Compare, _Allocator>& __x,
- const multimap<_Key, _Tp, _Compare, _Allocator>& __y)
-{
- return __x.size() == __y.size() && std::equal(__x.begin(), __x.end(), __y.begin());
+inline _LIBCPP_HIDE_FROM_ABI bool
+operator==(const multimap<_Key, _Tp, _Compare, _Allocator>& __x, const multimap<_Key, _Tp, _Compare, _Allocator>& __y) {
+ return __x.size() == __y.size() && std::equal(__x.begin(), __x.end(), __y.begin());
}
#if _LIBCPP_STD_VER <= 17
template <class _Key, class _Tp, class _Compare, class _Allocator>
-inline _LIBCPP_HIDE_FROM_ABI
-bool
-operator< (const multimap<_Key, _Tp, _Compare, _Allocator>& __x,
- const multimap<_Key, _Tp, _Compare, _Allocator>& __y)
-{
- return std::lexicographical_compare(__x.begin(), __x.end(), __y.begin(), __y.end());
+inline _LIBCPP_HIDE_FROM_ABI bool
+operator<(const multimap<_Key, _Tp, _Compare, _Allocator>& __x, const multimap<_Key, _Tp, _Compare, _Allocator>& __y) {
+ return std::lexicographical_compare(__x.begin(), __x.end(), __y.begin(), __y.end());
}
template <class _Key, class _Tp, class _Compare, class _Allocator>
-inline _LIBCPP_HIDE_FROM_ABI
-bool
-operator!=(const multimap<_Key, _Tp, _Compare, _Allocator>& __x,
- const multimap<_Key, _Tp, _Compare, _Allocator>& __y)
-{
- return !(__x == __y);
+inline _LIBCPP_HIDE_FROM_ABI bool
+operator!=(const multimap<_Key, _Tp, _Compare, _Allocator>& __x, const multimap<_Key, _Tp, _Compare, _Allocator>& __y) {
+ return !(__x == __y);
}
template <class _Key, class _Tp, class _Compare, class _Allocator>
-inline _LIBCPP_HIDE_FROM_ABI
-bool
-operator> (const multimap<_Key, _Tp, _Compare, _Allocator>& __x,
- const multimap<_Key, _Tp, _Compare, _Allocator>& __y)
-{
- return __y < __x;
+inline _LIBCPP_HIDE_FROM_ABI bool
+operator>(const multimap<_Key, _Tp, _Compare, _Allocator>& __x, const multimap<_Key, _Tp, _Compare, _Allocator>& __y) {
+ return __y < __x;
}
template <class _Key, class _Tp, class _Compare, class _Allocator>
-inline _LIBCPP_HIDE_FROM_ABI
-bool
-operator>=(const multimap<_Key, _Tp, _Compare, _Allocator>& __x,
- const multimap<_Key, _Tp, _Compare, _Allocator>& __y)
-{
- return !(__x < __y);
+inline _LIBCPP_HIDE_FROM_ABI bool
+operator>=(const multimap<_Key, _Tp, _Compare, _Allocator>& __x, const multimap<_Key, _Tp, _Compare, _Allocator>& __y) {
+ return !(__x < __y);
}
template <class _Key, class _Tp, class _Compare, class _Allocator>
-inline _LIBCPP_HIDE_FROM_ABI
-bool
-operator<=(const multimap<_Key, _Tp, _Compare, _Allocator>& __x,
- const multimap<_Key, _Tp, _Compare, _Allocator>& __y)
-{
- return !(__y < __x);
+inline _LIBCPP_HIDE_FROM_ABI bool
+operator<=(const multimap<_Key, _Tp, _Compare, _Allocator>& __x, const multimap<_Key, _Tp, _Compare, _Allocator>& __y) {
+ return !(__y < __x);
}
#else // #if _LIBCPP_STD_VER <= 17
@@ -2481,33 +2141,27 @@ template <class _Key, class _Tp, class _Compare, class _Allocator>
_LIBCPP_HIDE_FROM_ABI __synth_three_way_result<pair<const _Key, _Tp>>
operator<=>(const multimap<_Key, _Tp, _Compare, _Allocator>& __x,
const multimap<_Key, _Tp, _Compare, _Allocator>& __y) {
- return std::lexicographical_compare_three_way(
- __x.begin(),
- __x.end(),
- __y.begin(),
- __y.end(),
- std::__synth_three_way<pair<const _Key, _Tp>, pair<const _Key, _Tp>>);
+ return std::lexicographical_compare_three_way(
+ __x.begin(),
+ __x.end(),
+ __y.begin(),
+ __y.end(),
+ std::__synth_three_way<pair<const _Key, _Tp>, pair<const _Key, _Tp>>);
}
#endif // #if _LIBCPP_STD_VER <= 17
template <class _Key, class _Tp, class _Compare, class _Allocator>
-inline _LIBCPP_HIDE_FROM_ABI
-void
-swap(multimap<_Key, _Tp, _Compare, _Allocator>& __x,
- multimap<_Key, _Tp, _Compare, _Allocator>& __y)
- _NOEXCEPT_(_NOEXCEPT_(__x.swap(__y)))
-{
- __x.swap(__y);
+inline _LIBCPP_HIDE_FROM_ABI void
+swap(multimap<_Key, _Tp, _Compare, _Allocator>& __x, multimap<_Key, _Tp, _Compare, _Allocator>& __y)
+ _NOEXCEPT_(_NOEXCEPT_(__x.swap(__y))) {
+ __x.swap(__y);
}
#if _LIBCPP_STD_VER >= 20
-template <class _Key, class _Tp, class _Compare, class _Allocator,
- class _Predicate>
-inline _LIBCPP_HIDE_FROM_ABI
- typename multimap<_Key, _Tp, _Compare, _Allocator>::size_type
- erase_if(multimap<_Key, _Tp, _Compare, _Allocator>& __c,
- _Predicate __pred) {
+template <class _Key, class _Tp, class _Compare, class _Allocator, class _Predicate>
+inline _LIBCPP_HIDE_FROM_ABI typename multimap<_Key, _Tp, _Compare, _Allocator>::size_type
+erase_if(multimap<_Key, _Tp, _Compare, _Allocator>& __c, _Predicate __pred) {
return std::__libcpp_erase_if_container(__c, __pred);
}
#endif
@@ -2518,10 +2172,12 @@ _LIBCPP_END_NAMESPACE_STD
_LIBCPP_BEGIN_NAMESPACE_STD
namespace pmr {
template <class _KeyT, class _ValueT, class _CompareT = std::less<_KeyT>>
-using map _LIBCPP_AVAILABILITY_PMR = std::map<_KeyT, _ValueT, _CompareT, polymorphic_allocator<std::pair<const _KeyT, _ValueT>>>;
+using map _LIBCPP_AVAILABILITY_PMR =
+ std::map<_KeyT, _ValueT, _CompareT, polymorphic_allocator<std::pair<const _KeyT, _ValueT>>>;
template <class _KeyT, class _ValueT, class _CompareT = std::less<_KeyT>>
-using multimap _LIBCPP_AVAILABILITY_PMR = std::multimap<_KeyT, _ValueT, _CompareT, polymorphic_allocator<std::pair<const _KeyT, _ValueT>>>;
+using multimap _LIBCPP_AVAILABILITY_PMR =
+ std::multimap<_KeyT, _ValueT, _CompareT, polymorphic_allocator<std::pair<const _KeyT, _ValueT>>>;
} // namespace pmr
_LIBCPP_END_NAMESPACE_STD
#endif