Skip to content

Commit 0f24d45

Browse files
committed
move out
1 parent 461defb commit 0f24d45

2 files changed

Lines changed: 52 additions & 37 deletions

File tree

stl/inc/algorithm

Lines changed: 10 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -4063,6 +4063,14 @@ _CONSTEXPR20 void iter_swap(_FwdIt1 _Left, _FwdIt2 _Right) { // swap *_Left and
40634063
swap(*_Left, *_Right); // intentional ADL
40644064
}
40654065

4066+
template <class _VbIt, class _OutIt, class _Mapped_fn>
4067+
_CONSTEXPR20 _OutIt _Transform_vbool_aligned(
4068+
const _VbIt _First, const _VbIt _Last, _OutIt _Dest, const _Mapped_fn _Mapped_func);
4069+
4070+
template <class _VbIt, class _OutIt, class _Mapped_fn>
4071+
_CONSTEXPR20 _OutIt _Transform_vbool_aligned(
4072+
const _VbIt _First1, const _VbIt _Last1, const _VbIt _First2, _OutIt _Dest, const _Mapped_fn _Mapped_func);
4073+
40664074
_EXPORT_STD template <class _InIt, class _OutIt, class _Fn>
40674075
_CONSTEXPR20 _OutIt transform(const _InIt _First, const _InIt _Last, _OutIt _Dest, _Fn _Func) {
40684076
// transform [_First, _Last) with _Func
@@ -4073,24 +4081,7 @@ _CONSTEXPR20 _OutIt transform(const _InIt _First, const _InIt _Last, _OutIt _Des
40734081

40744082
if constexpr (_Is_vb_iterator<_InIt> && _Is_vb_iterator<_OutIt, true> && !is_same_v<_Map_vb_functor_t<_Fn>, void>) {
40754083
if (_UFirst._Myoff == 0 && _UDest._Myoff == 0) {
4076-
using _Vbase_ = decay_t<decltype(*_UDest._Myptr)>;
4077-
4078-
const _Map_vb_functor_t<_Fn> _Mapped_fn{};
4079-
auto _First_ptr = _UFirst._Myptr;
4080-
const auto _Last_ptr = _ULast._Myptr;
4081-
auto _Dest_ptr = const_cast<_Vbase_*>(_UDest._Myptr);
4082-
4083-
for (; _First_ptr != _Last_ptr; ++_First_ptr, ++_Dest_ptr) {
4084-
*_Dest_ptr = _Mapped_fn(*_First_ptr);
4085-
}
4086-
4087-
if (_ULast._Myoff != 0) {
4088-
const _Vbase_ _Mask = (_Vbase_{1} << _ULast._Myoff) - 1;
4089-
*_Dest_ptr = (*_Dest_ptr & ~_Mask) | (_Mapped_fn(*_First_ptr) & _Mask);
4090-
_UDest._Myoff = _ULast._Myoff;
4091-
}
4092-
4093-
_UDest._Myptr = _Dest_ptr;
4084+
_UDest = _Transform_vbool_aligned(_UFirst, _ULast, _UDest, _Map_vb_functor_t<_Fn>{});
40944085
_STD _Seek_wrapped(_Dest, _UDest);
40954086
return _Dest;
40964087
}
@@ -4123,25 +4114,7 @@ _CONSTEXPR20 _OutIt transform(
41234114
if constexpr (_Is_vb_iterator<_InIt1> && _Is_vb_iterator<_InIt2> && _Is_vb_iterator<_OutIt, true>
41244115
&& !is_same_v<_Map_vb_functor_t<_Fn>, void>) {
41254116
if (_UFirst1._Myoff == 0 && _UFirst2._Myoff == 0 && _UDest._Myoff == 0) {
4126-
using _Vbase_ = decay_t<decltype(*_UDest._Myptr)>;
4127-
4128-
const _Map_vb_functor_t<_Fn> _Mapped_fn{};
4129-
auto _First1_ptr = _UFirst1._Myptr;
4130-
auto _First2_ptr = _UFirst2._Myptr;
4131-
const auto _Last1_ptr = _ULast1._Myptr;
4132-
auto _Dest_ptr = const_cast<_Vbase_*>(_UDest._Myptr);
4133-
4134-
for (; _First1_ptr != _Last1_ptr; ++_First1_ptr, ++_First2_ptr, ++_Dest_ptr) {
4135-
*_Dest_ptr = _Mapped_fn(*_First1_ptr, *_First2_ptr);
4136-
}
4137-
4138-
if (_ULast1._Myoff != 0) {
4139-
const _Vbase_ _Mask = (_Vbase_{1} << _ULast1._Myoff) - 1;
4140-
*_Dest_ptr = (*_Dest_ptr & ~_Mask) | (_Mapped_fn(*_First1_ptr, *_First2_ptr) & _Mask);
4141-
_UDest._Myoff = _ULast1._Myoff;
4142-
}
4143-
4144-
_UDest._Myptr = _Dest_ptr;
4117+
_UDest = _Transform_vbool_aligned(_UFirst1, _ULast1, _UFirst2, _UDest, _Map_vb_functor_t<_Fn>{});
41454118
_STD _Seek_wrapped(_Dest, _UDest);
41464119
return _Dest;
41474120
}

stl/inc/vector

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4004,6 +4004,48 @@ _CONSTEXPR20 _OutIt _Copy_vbool(_VbIt _First, _VbIt _Last, _OutIt _Dest) {
40044004
return _DestEnd;
40054005
}
40064006

4007+
template <class _VbIt, class _OutIt, class _Mapped_fn>
4008+
_CONSTEXPR20 _OutIt _Transform_vbool_aligned(
4009+
const _VbIt _First, const _VbIt _Last, _OutIt _Dest, const _Mapped_fn _Mapped_func) {
4010+
auto _First_ptr = _First._Myptr;
4011+
const auto _Last_ptr = _Last._Myptr;
4012+
auto _Dest_ptr = const_cast<_Vbase*>(_Dest._Myptr);
4013+
4014+
for (; _First_ptr != _Last_ptr; ++_First_ptr, ++_Dest_ptr) {
4015+
*_Dest_ptr = _Mapped_func(*_First_ptr);
4016+
}
4017+
4018+
if (_Last._Myoff != 0) {
4019+
const _Vbase _Mask = (_Vbase{1} << _Last._Myoff) - 1;
4020+
*_Dest_ptr = (*_Dest_ptr & ~_Mask) | (_Mapped_func(*_First_ptr) & _Mask);
4021+
_Dest._Myoff = _Last._Myoff;
4022+
}
4023+
4024+
return _Dest;
4025+
}
4026+
4027+
template <class _VbIt, class _OutIt, class _Mapped_fn>
4028+
_CONSTEXPR20 _OutIt _Transform_vbool_aligned(
4029+
const _VbIt _First1, const _VbIt _Last1, const _VbIt _First2, _OutIt _Dest, const _Mapped_fn _Mapped_func) {
4030+
auto _First1_ptr = _First1._Myptr;
4031+
auto _First2_ptr = _First2._Myptr;
4032+
const auto _Last1_ptr = _Last1._Myptr;
4033+
auto _Dest_ptr = const_cast<_Vbase*>(_Dest._Myptr);
4034+
4035+
for (; _First1_ptr != _Last1_ptr; ++_First1_ptr, ++_First2_ptr, ++_Dest_ptr) {
4036+
*_Dest_ptr = _Mapped_func(*_First1_ptr, *_First2_ptr);
4037+
}
4038+
4039+
if (_Last1._Myoff != 0) {
4040+
const _Vbase _Mask = (_Vbase{1} << _Last1._Myoff) - 1;
4041+
*_Dest_ptr = (*_Dest_ptr & ~_Mask) | (_Mapped_func(*_First1_ptr, *_First2_ptr) & _Mask);
4042+
_Dest._Myoff = _Last1._Myoff;
4043+
}
4044+
4045+
_Dest._Myptr = _Dest_ptr;
4046+
return _Dest;
4047+
}
4048+
40074049
#undef _ASAN_VECTOR_MODIFY
40084050
#undef _ASAN_VECTOR_REMOVE
40094051
#undef _ASAN_VECTOR_CREATE

0 commit comments

Comments
 (0)