diff options
-rw-r--r-- | libcxx/include/scoped_allocator | 56 | ||||
-rw-r--r-- | libcxx/include/set | 136 |
2 files changed, 168 insertions, 24 deletions
diff --git a/libcxx/include/scoped_allocator b/libcxx/include/scoped_allocator index c9544b81f08..ec09ddbecbd 100644 --- a/libcxx/include/scoped_allocator +++ b/libcxx/include/scoped_allocator @@ -181,12 +181,14 @@ private: protected: + _LIBCPP_INLINE_VISIBILITY __scoped_allocator_storage() {} template <class _OuterA2, class = typename enable_if< is_constructible<outer_allocator_type, _OuterA2>::value >::type> + _LIBCPP_INLINE_VISIBILITY __scoped_allocator_storage(_OuterA2&& __outerAlloc, const _InnerAllocs& ...__innerAllocs) : outer_allocator_type(_STD::forward<_OuterA2>(__outerAlloc)), @@ -196,6 +198,7 @@ protected: class = typename enable_if< is_constructible<outer_allocator_type, const _OuterA2&>::value >::type> + _LIBCPP_INLINE_VISIBILITY __scoped_allocator_storage( const __scoped_allocator_storage<_OuterA2, _InnerAllocs...>& __other) : outer_allocator_type(__other.outer_allocator()), @@ -205,6 +208,7 @@ protected: class = typename enable_if< is_constructible<outer_allocator_type, _OuterA2>::value >::type> + _LIBCPP_INLINE_VISIBILITY __scoped_allocator_storage( __scoped_allocator_storage<_OuterA2, _InnerAllocs...>&& __other) : outer_allocator_type(_STD::move(__other.outer_allocator())), @@ -214,22 +218,28 @@ protected: class = typename enable_if< is_constructible<outer_allocator_type, _OuterA2>::value >::type> - __scoped_allocator_storage(_OuterA2&& __o, - const inner_allocator_type& __i) - : outer_allocator_type(_STD::forward<_OuterA2>(__o)), - __inner_(__i) - { - } + _LIBCPP_INLINE_VISIBILITY + __scoped_allocator_storage(_OuterA2&& __o, + const inner_allocator_type& __i) + : outer_allocator_type(_STD::forward<_OuterA2>(__o)), + __inner_(__i) + { + } + _LIBCPP_INLINE_VISIBILITY inner_allocator_type& inner_allocator() {return __inner_;} + _LIBCPP_INLINE_VISIBILITY const inner_allocator_type& inner_allocator() const {return __inner_;} + _LIBCPP_INLINE_VISIBILITY outer_allocator_type& outer_allocator() {return static_cast<outer_allocator_type&>(*this);} + _LIBCPP_INLINE_VISIBILITY const outer_allocator_type& outer_allocator() const {return static_cast<const outer_allocator_type&>(*this);} scoped_allocator_adaptor<outer_allocator_type, _InnerAllocs...> + _LIBCPP_INLINE_VISIBILITY select_on_container_copy_construction() const { return scoped_allocator_adaptor<outer_allocator_type, _InnerAllocs...> @@ -252,12 +262,14 @@ class __scoped_allocator_storage<_OuterAlloc> protected: typedef scoped_allocator_adaptor<_OuterAlloc> inner_allocator_type; + _LIBCPP_INLINE_VISIBILITY __scoped_allocator_storage() {} template <class _OuterA2, class = typename enable_if< is_constructible<outer_allocator_type, _OuterA2>::value >::type> + _LIBCPP_INLINE_VISIBILITY __scoped_allocator_storage(_OuterA2&& __outerAlloc) : outer_allocator_type(_STD::forward<_OuterA2>(__outerAlloc)) {} @@ -265,6 +277,7 @@ protected: class = typename enable_if< is_constructible<outer_allocator_type, const _OuterA2&>::value >::type> + _LIBCPP_INLINE_VISIBILITY __scoped_allocator_storage( const __scoped_allocator_storage<_OuterA2>& __other) : outer_allocator_type(__other.outer_allocator()) {} @@ -273,20 +286,26 @@ protected: class = typename enable_if< is_constructible<outer_allocator_type, _OuterA2>::value >::type> + _LIBCPP_INLINE_VISIBILITY __scoped_allocator_storage( __scoped_allocator_storage<_OuterA2>&& __other) : outer_allocator_type(_STD::move(__other.outer_allocator())) {} + _LIBCPP_INLINE_VISIBILITY inner_allocator_type& inner_allocator() {return static_cast<inner_allocator_type&>(*this);} + _LIBCPP_INLINE_VISIBILITY const inner_allocator_type& inner_allocator() const {return static_cast<const inner_allocator_type&>(*this);} + _LIBCPP_INLINE_VISIBILITY outer_allocator_type& outer_allocator() {return static_cast<outer_allocator_type&>(*this);} + _LIBCPP_INLINE_VISIBILITY const outer_allocator_type& outer_allocator() const {return static_cast<const outer_allocator_type&>(*this);} + _LIBCPP_INLINE_VISIBILITY scoped_allocator_adaptor<outer_allocator_type> select_on_container_copy_construction() const {return scoped_allocator_adaptor<outer_allocator_type>( @@ -323,6 +342,7 @@ template <class _Alloc, bool = __has_outer_allocator<_Alloc>::value> struct __outermost { typedef _Alloc type; + _LIBCPP_INLINE_VISIBILITY type& operator()(type& __a) const {return __a;} }; @@ -334,12 +354,13 @@ struct __outermost<_Alloc, true> decltype(_STD::declval<_Alloc>().outer_allocator()) >::type _OuterAlloc; typedef typename __outermost<_OuterAlloc>::type type; + _LIBCPP_INLINE_VISIBILITY type& operator()(_Alloc& __a) const {return __outermost<_OuterAlloc>()(__a.outer_allocator());} }; template <class _OuterAlloc, class... _InnerAllocs> -class scoped_allocator_adaptor<_OuterAlloc, _InnerAllocs...> +class _LIBCPP_VISIBLE scoped_allocator_adaptor<_OuterAlloc, _InnerAllocs...> : public __scoped_allocator_storage<_OuterAlloc, _InnerAllocs...> { typedef __scoped_allocator_storage<_OuterAlloc, _InnerAllocs...> base; @@ -381,11 +402,13 @@ public: > other; }; + _LIBCPP_INLINE_VISIBILITY scoped_allocator_adaptor() {} template <class _OuterA2, class = typename enable_if< is_constructible<outer_allocator_type, _OuterA2>::value >::type> + _LIBCPP_INLINE_VISIBILITY scoped_allocator_adaptor(_OuterA2&& __outerAlloc, const _InnerAllocs& ...__innerAllocs) : base(_STD::forward<_OuterA2>(__outerAlloc), __innerAllocs...) {} @@ -394,6 +417,7 @@ public: class = typename enable_if< is_constructible<outer_allocator_type, const _OuterA2&>::value >::type> + _LIBCPP_INLINE_VISIBILITY scoped_allocator_adaptor( const scoped_allocator_adaptor<_OuterA2, _InnerAllocs...>& __other) : base(__other) {} @@ -401,41 +425,52 @@ public: class = typename enable_if< is_constructible<outer_allocator_type, _OuterA2>::value >::type> + _LIBCPP_INLINE_VISIBILITY scoped_allocator_adaptor( scoped_allocator_adaptor<_OuterA2, _InnerAllocs...>&& __other) : base(_STD::move(__other)) {} // ~scoped_allocator_adaptor() = default; + _LIBCPP_INLINE_VISIBILITY inner_allocator_type& inner_allocator() {return base::inner_allocator();} + _LIBCPP_INLINE_VISIBILITY const inner_allocator_type& inner_allocator() const {return base::inner_allocator();} + _LIBCPP_INLINE_VISIBILITY outer_allocator_type& outer_allocator() {return base::outer_allocator();} + _LIBCPP_INLINE_VISIBILITY const outer_allocator_type& outer_allocator() const {return base::outer_allocator();} + _LIBCPP_INLINE_VISIBILITY pointer allocate(size_type __n) {return allocator_traits<outer_allocator_type>:: allocate(outer_allocator(), __n);} + _LIBCPP_INLINE_VISIBILITY pointer allocate(size_type __n, const_void_pointer __hint) {return allocator_traits<outer_allocator_type>:: allocate(outer_allocator(), __n, __hint);} + _LIBCPP_INLINE_VISIBILITY void deallocate(pointer __p, size_type __n) {allocator_traits<outer_allocator_type>:: deallocate(outer_allocator(), __p, __n);} + _LIBCPP_INLINE_VISIBILITY size_type max_size() const - {allocator_traits<outer_allocator_type>::max_size(outer_allocator());} + {return allocator_traits<outer_allocator_type>::max_size(outer_allocator());} template <class _Tp, class... _Args> + _LIBCPP_INLINE_VISIBILITY void construct(_Tp* __p, _Args&& ...__args) {__construct(__uses_alloc_ctor<_Tp, inner_allocator_type, _Args...>(), __p, _STD::forward<_Args>(__args)...);} template <class _Tp> + _LIBCPP_INLINE_VISIBILITY void destroy(_Tp* __p) { typedef __outermost<outer_allocator_type> _OM; @@ -443,6 +478,7 @@ public: destroy(_OM()(outer_allocator()), __p); } + _LIBCPP_INLINE_VISIBILITY scoped_allocator_adaptor select_on_container_copy_construction() const {return base::select_on_container_copy_construction();} @@ -452,11 +488,13 @@ private: class = typename enable_if< is_constructible<outer_allocator_type, _OuterA2>::value >::type> + _LIBCPP_INLINE_VISIBILITY scoped_allocator_adaptor(_OuterA2&& __o, const inner_allocator_type& __i) : base(_STD::forward<_OuterA2>(__o), __i) {} template <class _Tp, class... _Args> + _LIBCPP_INLINE_VISIBILITY void __construct(integral_constant<int, 0>, _Tp* __p, _Args&& ...__args) { typedef __outermost<outer_allocator_type> _OM; @@ -469,6 +507,7 @@ private: } template <class _Tp, class... _Args> + _LIBCPP_INLINE_VISIBILITY void __construct(integral_constant<int, 1>, _Tp* __p, _Args&& ...__args) { typedef __outermost<outer_allocator_type> _OM; @@ -483,6 +522,7 @@ private: } template <class _Tp, class... _Args> + _LIBCPP_INLINE_VISIBILITY void __construct(integral_constant<int, 2>, _Tp* __p, _Args&& ...__args) { typedef __outermost<outer_allocator_type> _OM; diff --git a/libcxx/include/set b/libcxx/include/set index 110f599f62f..753121448b4 100644 --- a/libcxx/include/set +++ b/libcxx/include/set @@ -310,7 +310,7 @@ _LIBCPP_BEGIN_NAMESPACE_STD template <class _Key, class _Compare = less<_Key>, class _Allocator = allocator<_Key> > -class set +class _LIBCPP_VISIBLE set { public: // types: @@ -339,11 +339,14 @@ public: typedef _STD::reverse_iterator<iterator> reverse_iterator; typedef _STD::reverse_iterator<const_iterator> const_reverse_iterator; + _LIBCPP_INLINE_VISIBILITY explicit set(const value_compare& __comp = value_compare()) : __tree_(__comp) {} + _LIBCPP_INLINE_VISIBILITY set(const value_compare& __comp, const allocator_type& __a) : __tree_(__comp, __a) {} template <class _InputIterator> + _LIBCPP_INLINE_VISIBILITY set(_InputIterator __f, _InputIterator __l, const value_compare& __comp = value_compare()) : __tree_(__comp) @@ -352,6 +355,7 @@ public: } template <class _InputIterator> + _LIBCPP_INLINE_VISIBILITY set(_InputIterator __f, _InputIterator __l, const value_compare& __comp, const allocator_type& __a) : __tree_(__comp, __a) @@ -359,6 +363,7 @@ public: insert(__f, __l); } + _LIBCPP_INLINE_VISIBILITY set(const set& __s) : __tree_(__s.__tree_) { @@ -366,13 +371,16 @@ public: } #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES + _LIBCPP_INLINE_VISIBILITY set(set&& __s) : __tree_(_STD::move(__s.__tree_)) {} #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES + _LIBCPP_INLINE_VISIBILITY explicit set(const allocator_type& __a) : __tree_(__a) {} + _LIBCPP_INLINE_VISIBILITY set(const set& __s, const allocator_type& __a) : __tree_(__s.__tree_.value_comp(), __a) { @@ -383,12 +391,14 @@ public: set(set&& __s, const allocator_type& __a); #endif + _LIBCPP_INLINE_VISIBILITY set(initializer_list<value_type> __il, const value_compare& __comp = value_compare()) : __tree_(__comp) { insert(__il.begin(), __il.end()); } + _LIBCPP_INLINE_VISIBILITY set(initializer_list<value_type> __il, const value_compare& __comp, const allocator_type& __a) : __tree_(__comp, __a) @@ -396,6 +406,7 @@ public: insert(__il.begin(), __il.end()); } + _LIBCPP_INLINE_VISIBILITY set& operator=(initializer_list<value_type> __il) { __tree_.__assign_unique(__il.begin(), __il.end()); @@ -403,6 +414,7 @@ public: } #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES + _LIBCPP_INLINE_VISIBILITY set& operator=(set&& __s) { __tree_ = _STD::move(__s.__tree_); @@ -410,84 +422,124 @@ public: } #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES + _LIBCPP_INLINE_VISIBILITY iterator begin() {return __tree_.begin();} + _LIBCPP_INLINE_VISIBILITY const_iterator begin() const {return __tree_.begin();} + _LIBCPP_INLINE_VISIBILITY iterator end() {return __tree_.end();} + _LIBCPP_INLINE_VISIBILITY const_iterator end() const {return __tree_.end();} + _LIBCPP_INLINE_VISIBILITY reverse_iterator rbegin() {return reverse_iterator(end());} + _LIBCPP_INLINE_VISIBILITY const_reverse_iterator rbegin() const {return const_reverse_iterator(end());} + _LIBCPP_INLINE_VISIBILITY reverse_iterator rend() {return reverse_iterator(begin());} + _LIBCPP_INLINE_VISIBILITY const_reverse_iterator rend() const {return const_reverse_iterator(begin());} + _LIBCPP_INLINE_VISIBILITY const_iterator cbegin() const {return begin();} + _LIBCPP_INLINE_VISIBILITY const_iterator cend() const {return end();} + _LIBCPP_INLINE_VISIBILITY const_reverse_iterator crbegin() const {return rbegin();} + _LIBCPP_INLINE_VISIBILITY const_reverse_iterator crend() const {return rend();} + _LIBCPP_INLINE_VISIBILITY bool empty() const {return __tree_.size() == 0;} + _LIBCPP_INLINE_VISIBILITY size_type size() const {return __tree_.size();} + _LIBCPP_INLINE_VISIBILITY size_type max_size() const {return __tree_.max_size();} // modifiers: #if !defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) && !defined(_LIBCPP_HAS_NO_VARIADICS) template <class... _Args> + _LIBCPP_INLINE_VISIBILITY pair<iterator, bool> emplace(_Args&&... __args) {return __tree_.__emplace_unique(_STD::forward<_Args>(__args)...);} template <class... _Args> + _LIBCPP_INLINE_VISIBILITY iterator emplace_hint(const_iterator __p, _Args&&... __args) {return __tree_.__emplace_hint_unique(__p, _STD::forward<_Args>(__args)...);} #endif // !defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) && !defined(_LIBCPP_HAS_NO_VARIADICS) + _LIBCPP_INLINE_VISIBILITY pair<iterator,bool> insert(const value_type& __v) {return __tree_.__insert_unique(__v);} #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES + _LIBCPP_INLINE_VISIBILITY pair<iterator,bool> insert(value_type&& __v) {return __tree_.__insert_unique(_STD::move(__v));} #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES + _LIBCPP_INLINE_VISIBILITY iterator insert(const_iterator __p, const value_type& __v) {return __tree_.__insert_unique(__p, __v);} #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES + _LIBCPP_INLINE_VISIBILITY iterator insert(const_iterator __p, value_type&& __v) {return __tree_.__insert_unique(__p, _STD::move(__v));} #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES template <class _InputIterator> + _LIBCPP_INLINE_VISIBILITY void insert(_InputIterator __f, _InputIterator __l) { for (const_iterator __e = cend(); __f != __l; ++__f) __tree_.__insert_unique(__e, *__f); } + _LIBCPP_INLINE_VISIBILITY void insert(initializer_list<value_type> __il) {insert(__il.begin(), __il.end());} + _LIBCPP_INLINE_VISIBILITY iterator erase(const_iterator __p) {return __tree_.erase(__p);} + _LIBCPP_INLINE_VISIBILITY size_type erase(const key_type& __k) {return __tree_.__erase_unique(__k);} + _LIBCPP_INLINE_VISIBILITY iterator erase(const_iterator __f, const_iterator __l) {return __tree_.erase(__f, __l);} + _LIBCPP_INLINE_VISIBILITY void clear() {__tree_.clear();} + _LIBCPP_INLINE_VISIBILITY void swap(set& __s) {__tree_.swap(__s.__tree_);} + _LIBCPP_INLINE_VISIBILITY allocator_type get_allocator() const {return __tree_.__alloc();} + _LIBCPP_INLINE_VISIBILITY key_compare key_comp() const {return __tree_.value_comp();} + _LIBCPP_INLINE_VISIBILITY value_compare value_comp() const {return __tree_.value_comp();} // set operations: + _LIBCPP_INLINE_VISIBILITY iterator find(const key_type& __k) {return __tree_.find(__k);} + _LIBCPP_INLINE_VISIBILITY const_iterator find(const key_type& __k) const {return __tree_.find(__k);} + _LIBCPP_INLINE_VISIBILITY size_type count(const key_type& __k) const {return __tree_.__count_unique(__k);} + _LIBCPP_INLINE_VISIBILITY iterator lower_bound(const key_type& __k) {return __tree_.lower_bound(__k);} + _LIBCPP_INLINE_VISIBILITY const_iterator lower_bound(const key_type& __k) const {return __tree_.lower_bound(__k);} + _LIBCPP_INLINE_VISIBILITY iterator upper_bound(const key_type& __k) {return __tree_.upper_bound(__k);} + _LIBCPP_INLINE_VISIBILITY const_iterator upper_bound(const key_type& __k) const {return __tree_.upper_bound(__k);} + _LIBCPP_INLINE_VISIBILITY pair<iterator,iterator> equal_range(const key_type& __k) {return __tree_.__equal_range_unique(__k);} + _LIBCPP_INLINE_VISIBILITY pair<const_iterator,const_iterator> equal_range(const key_type& __k) const {return __tree_.__equal_range_unique(__k);} }; @@ -509,7 +561,7 @@ set<_Key, _Compare, _Allocator>::set(set&& __s, const allocator_type& __a) #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES template <class _Key, class _Compare, class _Allocator> -inline +inline _LIBCPP_INLINE_VISIBILITY bool operator==(const set<_Key, _Compare, _Allocator>& __x, const set<_Key, _Compare, _Allocator>& __y) @@ -518,7 +570,7 @@ operator==(const set<_Key, _Compare, _Allocator>& __x, } template <class _Key, class _Compare, class _Allocator> -inline +inline _LIBCPP_INLINE_VISIBILITY bool operator< (const set<_Key, _Compare, _Allocator>& __x, const set<_Key, _Compare, _Allocator>& __y) @@ -527,7 +579,7 @@ operator< (const set<_Key, _Compare, _Allocator>& __x, } template <class _Key, class _Compare, class _Allocator> -inline +inline _LIBCPP_INLINE_VISIBILITY bool operator!=(const set<_Key, _Compare, _Allocator>& __x, const set<_Key, _Compare, _Allocator>& __y) @@ -536,7 +588,7 @@ operator!=(const set<_Key, _Compare, _Allocator>& __x, } template <class _Key, class _Compare, class _Allocator> -inline +inline _LIBCPP_INLINE_VISIBILITY bool operator> (const set<_Key, _Compare, _Allocator>& __x, const set<_Key, _Compare, _Allocator>& __y) @@ -545,7 +597,7 @@ operator> (const set<_Key, _Compare, _Allocator>& __x, } template <class _Key, class _Compare, class _Allocator> -inline +inline _LIBCPP_INLINE_VISIBILITY bool operator>=(const set<_Key, _Compare, _Allocator>& __x, const set<_Key, _Compare, _Allocator>& __y) @@ -554,7 +606,7 @@ operator>=(const set<_Key, _Compare, _Allocator>& __x, } template <class _Key, class _Compare, class _Allocator> -inline +inline _LIBCPP_INLINE_VISIBILITY bool operator<=(const set<_Key, _Compare, _Allocator>& __x, const set<_Key, _Compare, _Allocator>& __y) @@ -564,7 +616,7 @@ operator<=(const set<_Key, _Compare, _Allocator>& __x, // specialized algorithms: template <class _Key, class _Compare, class _Allocator> -inline +inline _LIBCPP_INLINE_VISIBILITY void swap(set<_Key, _Compare, _Allocator>& __x, set<_Key, _Compare, _Allocator>& __y) @@ -574,7 +626,7 @@ swap(set<_Key, _Compare, _Allocator>& __x, template <class _Key, class _Compare = less<_Key>, class _Allocator = allocator<_Key> > -class multiset +class _LIBCPP_VISIBLE multiset { public: // types: @@ -604,11 +656,14 @@ public: typedef _STD::reverse_iterator<const_iterator> const_reverse_iterator; // construct/copy/destroy: + _LIBCPP_INLINE_VISIBILITY explicit multiset(const value_compare& __comp = value_compare()) : __tree_(__comp) {} + _LIBCPP_INLINE_VISIBILITY multiset(const value_compare& __comp, const allocator_type& __a) : __tree_(__comp, __a) {} template <class _InputIterator> + _LIBCPP_INLINE_VISIBILITY multiset(_InputIterator __f, _InputIterator __l, const value_compare& __comp = value_compare()) : __tree_(__comp) @@ -617,6 +672,7 @@ public: } template <class _InputIterator> + _LIBCPP_INLINE_VISIBILITY multiset(_InputIterator __f, _InputIterator __l, const value_compare& __comp, const allocator_type& __a) : __tree_(__comp, __a) @@ -624,6 +680,7 @@ public: insert(__f, __l); } + _LIBCPP_INLINE_VISIBILITY multiset(const multiset& __s) : __tree_(__s.__tree_.value_comp(), __alloc_traits::select_on_container_copy_construction(__s.__tree_.__alloc())) @@ -632,11 +689,14 @@ public: } #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES + _LIBCPP_INLINE_VISIBILITY multiset(multiset&& __s) : __tree_(_STD::move(__s.__tree_)) {} #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES + _LIBCPP_INLINE_VISIBILITY explicit multiset(const allocator_type& __a) : __tree_(__a) {} + _LIBCPP_INLINE_VISIBILITY multiset(const multiset& __s, const allocator_type& __a) : __tree_(__s.__tree_.value_comp(), __a) { @@ -646,12 +706,14 @@ public: multiset(multiset&& __s, const allocator_type& __a); #endif + _LIBCPP_INLINE_VISIBILITY multiset(initializer_list<value_type> __il, const value_compare& __comp = value_compare()) : __tree_(__comp) { insert(__il.begin(), __il.end()); } + _LIBCPP_INLINE_VISIBILITY multiset(initializer_list<value_type> __il, const value_compare& __comp, const allocator_type& __a) : __tree_(__comp, __a) @@ -659,6 +721,7 @@ public: insert(__il.begin(), __il.end()); } + _LIBCPP_INLINE_VISIBILITY multiset& operator=(initializer_list<value_type> __il) { __tree_.__assign_multi(__il.begin(), __il.end()); @@ -666,6 +729,7 @@ public: } #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES + _LIBCPP_INLINE_VISIBILITY multiset& operator=(multiset&& __s) { __tree_ = _STD::move(__s.__tree_); @@ -673,83 +737,123 @@ public: } #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES + _LIBCPP_INLINE_VISIBILITY iterator begin() {return __tree_.begin();} + _LIBCPP_INLINE_VISIBILITY const_iterator begin() const {return __tree_.begin();} + _LIBCPP_INLINE_VISIBILITY iterator end() {return __tree_.end();} + _LIBCPP_INLINE_VISIBILITY const_iterator end() const {return __tree_.end();} + _LIBCPP_INLINE_VISIBILITY reverse_iterator rbegin() {return reverse_iterator(end());} + _LIBCPP_INLINE_VISIBILITY const_reverse_iterator rbegin() const {return const_reverse_iterator(end());} + _LIBCPP_INLINE_VISIBILITY reverse_iterator rend() {return reverse_iterator(begin());} + _LIBCPP_INLINE_VISIBILITY const_reverse_iterator rend() const {return const_reverse_iterator(begin());} + _LIBCPP_INLINE_VISIBILITY const_iterator cbegin() const {return begin();} + _LIBCPP_INLINE_VISIBILITY const_iterator cend() const {return end();} + _LIBCPP_INLINE_VISIBILITY const_reverse_iterator crbegin() const {return rbegin();} + _LIBCPP_INLINE_VISIBILITY const_reverse_iterator crend() const {return rend();} + _LIBCPP_INLINE_VISIBILITY bool empty() const {return __tree_.size() == 0;} + _LIBCPP_INLINE_VISIBILITY size_type size() const {return __tree_.size();} + _LIBCPP_INLINE_VISIBILITY size_type max_size() const {return __tree_.max_size();} // modifiers: #if !defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) && !defined(_LIBCPP_HAS_NO_VARIADICS) template <class... _Args> + _LIBCPP_INLINE_VISIBILITY iterator emplace(_Args&&... __args) {return __tree_.__emplace_multi(_STD::forward<_Args>(__args)...);} template <class... _Args> + _LIBCPP_INLINE_VISIBILITY iterator emplace_hint(const_iterator __p, _Args&&... __args) {return __tree_.__emplace_hint_multi(__p, _STD::forward<_Args>(__args)...);} #endif // !defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) && !defined(_LIBCPP_HAS_NO_VARIADICS) + _LIBCPP_INLINE_VISIBILITY iterator insert(const value_type& __v) {return __tree_.__insert_multi(__v);} #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES + _LIBCPP_INLINE_VISIBILITY iterator insert(value_type&& __v) {return __tree_.__insert_multi(_STD::move(__v));} #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES + _LIBCPP_INLINE_VISIBILITY iterator insert(const_iterator __p, const value_type& __v) {return __tree_.__insert_multi(__p, __v);} #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES + _LIBCPP_INLINE_VISIBILITY iterator insert(const_iterator __p, value_type&& __v) {return __tree_.__insert_multi(_STD::move(__v));} #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES template <class _InputIterator> + _LIBCPP_INLINE_VISIBILITY void insert(_InputIterator __f, _InputIterator __l) { for (const_iterator __e = cend(); __f != __l; ++__f) __tree_.__insert_multi(__e, *__f); } + _LIBCPP_INLINE_VISIBILITY void insert(initializer_list<value_type> __il) {insert(__il.begin(), __il.end());} + _LIBCPP_INLINE_VISIBILITY iterator erase(const_iterator __p) {return __tree_.erase(__p);} + _LIBCPP_INLINE_VISIBILITY size_type erase(const key_type& __k) {return __tree_.__erase_multi(__k);} + _LIBCPP_INLINE_VISIBILITY iterator erase(const_iterator __f, const_iterator __l) {return __tree_.erase(__f, __l);} + _LIBCPP_INLINE_VISIBILITY void clear() {__tree_.clear();} + _LIBCPP_INLINE_VISIBILITY void swap(multiset& __s) {__tree_.swap(__s.__tree_);} + _LIBCPP_INLINE_VISIBILITY allocator_type get_allocator() const {return __tree_.__alloc();} + _LIBCPP_INLINE_VISIBILITY key_compare key_comp() const {return __tree_.value_comp();} + _LIBCPP_INLINE_VISIBILITY value_compare value_comp() const {return __tree_.value_comp();} // set operations: + _LIBCPP_INLINE_VISIBILITY iterator find(const key_type& __k) {return __tree_.find(__k);} + _LIBCPP_INLINE_VISIBILITY const_iterator find(const key_type& __k) const {return __tree_.find(__k);} + _LIBCPP_INLINE_VISIBILITY size_type count(const key_type& __k) const {return __tree_.__count_multi(__k);} + _LIBCPP_INLINE_VISIBILITY iterator lower_bound(const key_type& __k) {return __tree_.lower_bound(__k);} + _LIBCPP_INLINE_VISIBILITY const_iterator lower_bound(const key_type& __k) const {return __tree_.lower_bound(__k);} + _LIBCPP_INLINE_VISIBILITY iterator upper_bound(const key_type& __k) {return __tree_.upper_bound(__k);} + _LIBCPP_INLINE_VISIBILITY const_iterator upper_bound(const key_type& __k) const {return __tree_.upper_bound(__k);} + _LIBCPP_INLINE_VISIBILITY pair<iterator,iterator> equal_range(const key_type& __k) {return __tree_.__equal_range_multi(__k);} + _LIBCPP_INLINE_VISIBILITY pair<const_iterator,const_iterator> equal_range(const key_type& __k) const {return __tree_.__equal_range_multi(__k);} }; @@ -771,7 +875,7 @@ multiset<_Key, _Compare, _Allocator>::multiset(multiset&& __s, const allocator_t #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES template <class _Key, class _Compare, class _Allocator> -inline +inline _LIBCPP_INLINE_VISIBILITY bool operator==(const multiset<_Key, _Compare, _Allocator>& __x, const multiset<_Key, _Compare, _Allocator>& __y) @@ -780,7 +884,7 @@ operator==(const multiset<_Key, _Compare, _Allocator>& __x, } template <class _Key, class _Compare, class _Allocator> -inline +inline _LIBCPP_INLINE_VISIBILITY bool operator< (const multiset<_Key, _Compare, _Allocator>& __x, const multiset<_Key, _Compare, _Allocator>& __y) @@ -789,7 +893,7 @@ operator< (const multiset<_Key, _Compare, _Allocator>& __x, } template <class _Key, class _Compare, class _Allocator> -inline +inline _LIBCPP_INLINE_VISIBILITY bool operator!=(const multiset<_Key, _Compare, _Allocator>& __x, const multiset<_Key, _Compare, _Allocator>& __y) @@ -798,7 +902,7 @@ operator!=(const multiset<_Key, _Compare, _Allocator>& __x, } template <class _Key, class _Compare, class _Allocator> -inline +inline _LIBCPP_INLINE_VISIBILITY bool operator> (const multiset<_Key, _Compare, _Allocator>& __x, const multiset<_Key, _Compare, _Allocator>& __y) @@ -807,7 +911,7 @@ operator> (const multiset<_Key, _Compare, _Allocator>& __x, } template <class _Key, class _Compare, class _Allocator> -inline +inline _LIBCPP_INLINE_VISIBILITY bool operator>=(const multiset<_Key, _Compare, _Allocator>& __x, const multiset<_Key, _Compare, _Allocator>& __y) @@ -816,7 +920,7 @@ operator>=(const multiset<_Key, _Compare, _Allocator>& __x, } template <class _Key, class _Compare, class _Allocator> -inline +inline _LIBCPP_INLINE_VISIBILITY bool operator<=(const multiset<_Key, _Compare, _Allocator>& __x, const multiset<_Key, _Compare, _Allocator>& __y) @@ -825,7 +929,7 @@ operator<=(const multiset<_Key, _Compare, _Allocator>& __x, } template <class _Key, class _Compare, class _Allocator> -inline +inline _LIBCPP_INLINE_VISIBILITY void swap(multiset<_Key, _Compare, _Allocator>& __x, multiset<_Key, _Compare, _Allocator>& __y) |