66-vector-iterator-pointer.patch 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. diff --git a/include/vector b/include/vector
  2. index 8d5b846..b989a3c 100644
  3. --- a/include/vector
  4. +++ b/include/vector
  5. @@ -401,9 +401,14 @@ public:
  6. typedef typename __alloc_traits::difference_type difference_type;
  7. typedef typename __alloc_traits::pointer pointer;
  8. typedef typename __alloc_traits::const_pointer const_pointer;
  9. +#if _YNDX_LIBCPP_MAKE_VECTOR_ITERATOR_POINTERS == 1
  10. + typedef pointer iterator;
  11. + typedef const_pointer const_iterator;
  12. +#else
  13. // TODO: Implement iterator bounds checking without requiring the global database.
  14. typedef __wrap_iter<pointer> iterator;
  15. typedef __wrap_iter<const_pointer> const_iterator;
  16. +#endif
  17. typedef std::reverse_iterator<iterator> reverse_iterator;
  18. typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
  19. @@ -807,12 +812,8 @@ private:
  20. void __append_uninitialized(size_type __n);
  21. _LIBCPP_CONSTEXPR_SINCE_CXX20 _LIBCPP_HIDE_FROM_ABI void __append(size_type __n);
  22. _LIBCPP_CONSTEXPR_SINCE_CXX20 _LIBCPP_HIDE_FROM_ABI void __append(size_type __n, const_reference __x);
  23. - _LIBCPP_CONSTEXPR_SINCE_CXX20 _LIBCPP_HIDE_FROM_ABI iterator __make_iter(pointer __p) _NOEXCEPT {
  24. - return iterator(__p);
  25. - }
  26. - _LIBCPP_CONSTEXPR_SINCE_CXX20 _LIBCPP_HIDE_FROM_ABI const_iterator __make_iter(const_pointer __p) const _NOEXCEPT {
  27. - return const_iterator(__p);
  28. - }
  29. + _LIBCPP_CONSTEXPR_SINCE_CXX20 _LIBCPP_HIDE_FROM_ABI iterator __make_iter(pointer __p) _NOEXCEPT;
  30. + _LIBCPP_CONSTEXPR_SINCE_CXX20 _LIBCPP_HIDE_FROM_ABI const_iterator __make_iter(const_pointer __p) const _NOEXCEPT;
  31. _LIBCPP_CONSTEXPR_SINCE_CXX20 _LIBCPP_HIDE_FROM_ABI void
  32. __swap_out_circular_buffer(__split_buffer<value_type, allocator_type&>& __v);
  33. _LIBCPP_CONSTEXPR_SINCE_CXX20 _LIBCPP_HIDE_FROM_ABI pointer
  34. @@ -1389,6 +1390,28 @@ vector<_Tp, _Allocator>::__assign_with_size(_ForwardIterator __first, _Sentinel
  35. }
  36. }
  37. +// We need to save the make_iter function and replace all constructor calls with it
  38. +// Made to support pointer iterators
  39. +template <class _Tp, class _Allocator>
  40. +_LIBCPP_CONSTEXPR_SINCE_CXX20 inline _LIBCPP_HIDE_FROM_ABI typename vector<_Tp, _Allocator>::iterator
  41. +vector<_Tp, _Allocator>::__make_iter(pointer __p) _NOEXCEPT {
  42. +#if _YNDX_LIBCPP_MAKE_STRING_ITERATOR_POINTERS == 1
  43. + return iterator(__p);
  44. +#else
  45. + return iterator(this, __p);
  46. +#endif
  47. +}
  48. +
  49. +template <class _Tp, class _Allocator>
  50. +_LIBCPP_CONSTEXPR_SINCE_CXX20 inline _LIBCPP_HIDE_FROM_ABI typename vector<_Tp, _Allocator>::const_iterator
  51. +vector<_Tp, _Allocator>::__make_iter(const_pointer __p) const _NOEXCEPT {
  52. +#if _YNDX_LIBCPP_MAKE_STRING_ITERATOR_POINTERS == 1
  53. + return const_iterator(__p);
  54. +#else
  55. + return const_iterator(this, __p);
  56. +#endif
  57. +}
  58. +
  59. template <class _Tp, class _Allocator>
  60. _LIBCPP_CONSTEXPR_SINCE_CXX20 void vector<_Tp, _Allocator>::assign(size_type __n, const_reference __u) {
  61. if (__n <= capacity()) {