diff options
Diffstat (limited to 'libcxx/include')
| -rw-r--r-- | libcxx/include/__split_buffer | 4 | ||||
| -rw-r--r-- | libcxx/include/functional | 24 | ||||
| -rw-r--r-- | libcxx/include/string | 9 | ||||
| -rw-r--r-- | libcxx/include/vector | 6 |
4 files changed, 35 insertions, 8 deletions
diff --git a/libcxx/include/__split_buffer b/libcxx/include/__split_buffer index e0aa13b8988..d498b21eb1d 100644 --- a/libcxx/include/__split_buffer +++ b/libcxx/include/__split_buffer @@ -290,7 +290,7 @@ void __split_buffer<_Tp, _Allocator>::__destruct_at_begin(pointer __new_begin, false_type) { while (__begin_ != __new_begin) - __alloc_traits::destroy(__alloc(), __begin_++); + __alloc_traits::destroy(__alloc(), _VSTD::__to_raw_pointer(__begin_++)); } template <class _Tp, class _Allocator> @@ -307,7 +307,7 @@ void __split_buffer<_Tp, _Allocator>::__destruct_at_end(pointer __new_last, false_type) _NOEXCEPT { while (__new_last != __end_) - __alloc_traits::destroy(__alloc(), --__end_); + __alloc_traits::destroy(__alloc(), _VSTD::__to_raw_pointer(--__end_)); } template <class _Tp, class _Allocator> diff --git a/libcxx/include/functional b/libcxx/include/functional index 3bee1ed1a0a..9837a18e203 100644 --- a/libcxx/include/functional +++ b/libcxx/include/functional @@ -465,6 +465,10 @@ POLICY: For non-variadic implementations, the number of arguments is limited #include <memory> #include <tuple> +#if __OBJC__ +# include <Foundation/NSObject.h> +#endif + #include <__functional_base> #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) @@ -2020,6 +2024,26 @@ struct _LIBCPP_VISIBLE hash<long double> } }; +#if __OBJC__ + +template <> +struct _LIBCPP_VISIBLE hash<id> + : public unary_function<id, size_t> +{ + _LIBCPP_INLINE_VISIBILITY + size_t operator()(id __v) const _NOEXCEPT {return [__v hash];} +}; + +template <> +struct _LIBCPP_VISIBLE equal_to<id> + : public binary_function<id, id, bool> +{ + _LIBCPP_INLINE_VISIBILITY bool operator()(id __x, id __y) const + {return __x == __y || [__x isEqual: __y];} +}; + +#endif // __OBJC__ + // struct hash<T*> in <memory> _LIBCPP_END_NAMESPACE_STD diff --git a/libcxx/include/string b/libcxx/include/string index 1a70467940c..c99eaeaebe3 100644 --- a/libcxx/include/string +++ b/libcxx/include/string @@ -2067,10 +2067,13 @@ basic_string<_CharT, _Traits, _Allocator>::__grow_by(size_type __old_cap, size_t pointer __p = __alloc_traits::allocate(__alloc(), __cap+1); __invalidate_all_iterators(); if (__n_copy != 0) - traits_type::copy(__p, __old_p, __n_copy); + traits_type::copy(_VSTD::__to_raw_pointer(__p), + _VSTD::__to_raw_pointer(__old_p), __n_copy); size_type __sec_cp_sz = __old_sz - __n_del - __n_copy; if (__sec_cp_sz != 0) - traits_type::copy(__p + __n_copy + __n_add, __old_p + __n_copy + __n_del, __sec_cp_sz); + traits_type::copy(_VSTD::__to_raw_pointer(__p + __n_copy + __n_add), + _VSTD::__to_raw_pointer(__old_p + __n_copy + __n_del), + __sec_cp_sz); if (__old_cap+1 != __min_cap) __alloc_traits::deallocate(__alloc(), __old_p, __old_cap+1); __set_long_pointer(__p); @@ -2303,7 +2306,7 @@ basic_string<_CharT, _Traits, _Allocator>::append(size_type __n, value_type __c) if (__cap - __sz < __n) __grow_by(__cap, __sz + __n - __cap, __sz, __sz, 0); pointer __p = __get_pointer(); - traits_type::assign(__p + __sz, __n, __c); + traits_type::assign(_VSTD::__to_raw_pointer(__p + __sz), __n, __c); __sz += __n; __set_size(__sz); traits_type::assign(__p[__sz], value_type()); diff --git a/libcxx/include/vector b/libcxx/include/vector index 876b7e5676b..f4a41d697ed 100644 --- a/libcxx/include/vector +++ b/libcxx/include/vector @@ -440,7 +440,7 @@ void __vector_base<_Tp, _Allocator>::__destruct_at_end(const_pointer __new_last, false_type) _NOEXCEPT { while (__new_last != __end_) - __alloc_traits::destroy(__alloc(), const_cast<pointer>(--__end_)); + __alloc_traits::destroy(__alloc(), _VSTD::__to_raw_pointer(--__end_)); } template <class _Tp, class _Allocator> @@ -448,7 +448,7 @@ _LIBCPP_INLINE_VISIBILITY inline void __vector_base<_Tp, _Allocator>::__destruct_at_end(const_pointer __new_last, true_type) _NOEXCEPT { - __end_ = const_cast<pointer>(__new_last); + __end_ = static_cast<pointer>(__new_last); } template <class _Tp, class _Allocator> @@ -1550,7 +1550,7 @@ vector<_Tp, _Allocator>::erase(const_iterator __position) "vector::erase(iterator) called with an iterator not" " referring to this vector"); #endif - pointer __p = const_cast<pointer>(&*__position); + pointer __p = this->__begin_ + (__position - cbegin()); iterator __r = __make_iter(__p); this->__destruct_at_end(_VSTD::move(__p + 1, this->__end_, __p)); return __r; |

