Commit e9c54233 by François Dumont

stl_bvector.h (operator==(const _Bit_iterator_base&, const…

stl_bvector.h (operator==(const _Bit_iterator_base&, const _Bit_iterator_base&)): Make hidden friend.

2019-05-11  François Dumont  <fdumont@gcc.gnu.org>

	* include/bits/stl_bvector.h
	(operator==(const _Bit_iterator_base&, const _Bit_iterator_base&)):
	Make hidden friend.
	(operator<(const _Bit_iterator_base&, const _Bit_iterator_base&)):
	Likewise.
	(operator!=(const _Bit_iterator_base&, const _Bit_iterator_base&)):
	Likewise.
	(operator>(const _Bit_iterator_base&, const _Bit_iterator_base&)):
	Likewise.
	(operator<=(const _Bit_iterator_base&, const _Bit_iterator_base&)):
	Likewise.
	(operator>=(const _Bit_iterator_base&, const _Bit_iterator_base&)):
	Likewise.
	(operator-(const _Bit_iterator_base&, const _Bit_iterator_base&)):
	Likewise.
	(_Bit_iterator::operator+(difference_type)): Likewise and allow NRVO
	copy elision.
	(_Bit_iterator::operator-(difference_type)): Likewise.
	(operator+(ptrdiff_t, const _Bit_iterator&)): Make hidden friend.
	(_Bit_const_iterator::operator+(difference_type)): Likewise and allow
	NRVO copy elision.
	(_Bit_const_iterator::operator-(difference_type)): Likewise.
	(operator+(ptrdiff_t, const _Bit_const_iterator&)): Make hidden friend.

From-SVN: r271096
parent b5b9147d
2019-05-11 François Dumont <fdumont@gcc.gnu.org>
* include/bits/stl_bvector.h
(operator==(const _Bit_iterator_base&, const _Bit_iterator_base&)):
Make hidden friend.
(operator<(const _Bit_iterator_base&, const _Bit_iterator_base&)):
Likewise.
(operator!=(const _Bit_iterator_base&, const _Bit_iterator_base&)):
Likewise.
(operator>(const _Bit_iterator_base&, const _Bit_iterator_base&)):
Likewise.
(operator<=(const _Bit_iterator_base&, const _Bit_iterator_base&)):
Likewise.
(operator>=(const _Bit_iterator_base&, const _Bit_iterator_base&)):
Likewise.
(operator-(const _Bit_iterator_base&, const _Bit_iterator_base&)):
Likewise.
(_Bit_iterator::operator+(difference_type)): Likewise and allow NRVO
copy elision.
(_Bit_iterator::operator-(difference_type)): Likewise.
(operator+(ptrdiff_t, const _Bit_iterator&)): Make hidden friend.
(_Bit_const_iterator::operator+(difference_type)): Likewise and allow
NRVO copy elision.
(_Bit_const_iterator::operator-(difference_type)): Likewise.
(operator+(ptrdiff_t, const _Bit_const_iterator&)): Make hidden friend.
2019-05-10 Jonathan Wakely <jwakely@redhat.com> 2019-05-10 Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/81266 PR libstdc++/81266
......
...@@ -182,40 +182,40 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER ...@@ -182,40 +182,40 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
_M_offset = static_cast<unsigned int>(__n); _M_offset = static_cast<unsigned int>(__n);
} }
bool friend bool
operator==(const _Bit_iterator_base& __i) const operator==(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y)
{ return _M_p == __i._M_p && _M_offset == __i._M_offset; } { return __x._M_p == __y._M_p && __x._M_offset == __y._M_offset; }
bool friend bool
operator<(const _Bit_iterator_base& __i) const operator<(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y)
{ {
return _M_p < __i._M_p return __x._M_p < __y._M_p
|| (_M_p == __i._M_p && _M_offset < __i._M_offset); || (__x._M_p == __y._M_p && __x._M_offset < __y._M_offset);
} }
bool friend bool
operator!=(const _Bit_iterator_base& __i) const operator!=(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y)
{ return !(*this == __i); } { return !(__x == __y); }
bool friend bool
operator>(const _Bit_iterator_base& __i) const operator>(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y)
{ return __i < *this; } { return __y < __x; }
bool friend bool
operator<=(const _Bit_iterator_base& __i) const operator<=(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y)
{ return !(__i < *this); } { return !(__y < __x); }
bool friend bool
operator>=(const _Bit_iterator_base& __i) const operator>=(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y)
{ return !(*this < __i); } { return !(__x < __y); }
};
inline ptrdiff_t friend ptrdiff_t
operator-(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) operator-(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y)
{ {
return (int(_S_word_bit) * (__x._M_p - __y._M_p) return (int(_S_word_bit) * (__x._M_p - __y._M_p)
+ __x._M_offset - __y._M_offset); + __x._M_offset - __y._M_offset);
} }
};
struct _Bit_iterator : public _Bit_iterator_base struct _Bit_iterator : public _Bit_iterator_base
{ {
...@@ -280,29 +280,31 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER ...@@ -280,29 +280,31 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
return *this; return *this;
} }
iterator reference
operator+(difference_type __i) const operator[](difference_type __i) const
{ return *(*this + __i); }
friend iterator
operator+(const iterator& __x, difference_type __n)
{ {
iterator __tmp = *this; iterator __tmp = __x;
return __tmp += __i; __tmp += __n;
return __tmp;
} }
iterator friend iterator
operator-(difference_type __i) const operator+(difference_type __n, const iterator& __x)
{ return __x + __n; }
friend iterator
operator-(const iterator& __x, difference_type __n)
{ {
iterator __tmp = *this; iterator __tmp = __x;
return __tmp -= __i; __tmp -= __n;
return __tmp;
} }
reference
operator[](difference_type __i) const
{ return *(*this + __i); }
}; };
inline _Bit_iterator
operator+(ptrdiff_t __n, const _Bit_iterator& __x)
{ return __x + __n; }
struct _Bit_const_iterator : public _Bit_iterator_base struct _Bit_const_iterator : public _Bit_iterator_base
{ {
typedef bool reference; typedef bool reference;
...@@ -370,28 +372,30 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER ...@@ -370,28 +372,30 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
return *this; return *this;
} }
const_iterator const_reference
operator+(difference_type __i) const operator[](difference_type __i) const
{ return *(*this + __i); }
friend const_iterator
operator+(const const_iterator& __x, difference_type __n)
{ {
const_iterator __tmp = *this; const_iterator __tmp = __x;
return __tmp += __i; __tmp += __n;
return __tmp;
} }
const_iterator friend const_iterator
operator-(difference_type __i) const operator-(const const_iterator& __x, difference_type __n)
{ {
const_iterator __tmp = *this; const_iterator __tmp = __x;
return __tmp -= __i; __tmp -= __n;
return __tmp;
} }
const_reference friend const_iterator
operator[](difference_type __i) const operator+(difference_type __n, const const_iterator& __x)
{ return *(*this + __i); }
};
inline _Bit_const_iterator
operator+(ptrdiff_t __n, const _Bit_const_iterator& __x)
{ return __x + __n; } { return __x + __n; }
};
inline void inline void
__fill_bvector(_Bit_type * __v, __fill_bvector(_Bit_type * __v,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment