|
16 | 16 | #include <__algorithm/copy_n.h> |
17 | 17 | #include <__algorithm/equal.h> |
18 | 18 | #include <__algorithm/min.h> |
| 19 | +#include <__algorithm/rotate.h> |
19 | 20 | #include <__algorithm/swap_ranges.h> |
20 | 21 | #include <__assert> |
21 | 22 | #include <__bit/countr.h> |
@@ -216,8 +217,6 @@ private: |
216 | 217 | __mask_(__m) {} |
217 | 218 | }; |
218 | 219 |
|
219 | | -// rotate |
220 | | - |
221 | 220 | template <class _Cp> |
222 | 221 | struct __bit_array { |
223 | 222 | using difference_type _LIBCPP_NODEBUG = typename __size_difference_type_traits<_Cp>::difference_type; |
@@ -249,45 +248,6 @@ struct __bit_array { |
249 | 248 | } |
250 | 249 | }; |
251 | 250 |
|
252 | | -template <class _Cp> |
253 | | -_LIBCPP_CONSTEXPR_SINCE_CXX20 _LIBCPP_HIDE_FROM_ABI __bit_iterator<_Cp, false> |
254 | | -rotate(__bit_iterator<_Cp, false> __first, __bit_iterator<_Cp, false> __middle, __bit_iterator<_Cp, false> __last) { |
255 | | - using _I1 = __bit_iterator<_Cp, false>; |
256 | | - using difference_type = typename _I1::difference_type; |
257 | | - |
258 | | - difference_type __d1 = __middle - __first; |
259 | | - difference_type __d2 = __last - __middle; |
260 | | - _I1 __r = __first + __d2; |
261 | | - while (__d1 != 0 && __d2 != 0) { |
262 | | - if (__d1 <= __d2) { |
263 | | - if (__d1 <= __bit_array<_Cp>::capacity()) { |
264 | | - __bit_array<_Cp> __b(__d1); |
265 | | - std::copy(__first, __middle, __b.begin()); |
266 | | - std::copy(__b.begin(), __b.end(), std::copy(__middle, __last, __first)); |
267 | | - break; |
268 | | - } else { |
269 | | - __bit_iterator<_Cp, false> __mp = std::swap_ranges(__first, __middle, __middle); |
270 | | - __first = __middle; |
271 | | - __middle = __mp; |
272 | | - __d2 -= __d1; |
273 | | - } |
274 | | - } else { |
275 | | - if (__d2 <= __bit_array<_Cp>::capacity()) { |
276 | | - __bit_array<_Cp> __b(__d2); |
277 | | - std::copy(__middle, __last, __b.begin()); |
278 | | - std::copy_backward(__b.begin(), __b.end(), std::copy_backward(__first, __middle, __last)); |
279 | | - break; |
280 | | - } else { |
281 | | - __bit_iterator<_Cp, false> __mp = __first + __d2; |
282 | | - std::swap_ranges(__first, __mp, __middle); |
283 | | - __first = __mp; |
284 | | - __d1 -= __d2; |
285 | | - } |
286 | | - } |
287 | | - } |
288 | | - return __r; |
289 | | -} |
290 | | - |
291 | 251 | template <class _Cp, bool _IsConst, typename _Cp::__storage_type> |
292 | 252 | class __bit_iterator { |
293 | 253 | public: |
@@ -507,9 +467,9 @@ private: |
507 | 467 | template <class, class _Cl, class _Cr> |
508 | 468 | _LIBCPP_CONSTEXPR_SINCE_CXX20 friend pair<__bit_iterator<_Cl, false>, __bit_iterator<_Cr, false> > |
509 | 469 | __swap_ranges(__bit_iterator<_Cl, false>, __bit_iterator<_Cl, false>, __bit_iterator<_Cr, false>); |
510 | | - template <class _Dp> |
511 | | - _LIBCPP_CONSTEXPR_SINCE_CXX20 friend __bit_iterator<_Dp, false> |
512 | | - rotate(__bit_iterator<_Dp, false>, __bit_iterator<_Dp, false>, __bit_iterator<_Dp, false>); |
| 470 | + template <class, class _Dp> |
| 471 | + _LIBCPP_CONSTEXPR_SINCE_CXX20 friend pair<__bit_iterator<_Dp, false>, __bit_iterator<_Dp, false> > |
| 472 | + __rotate(__bit_iterator<_Dp, false>, __bit_iterator<_Dp, false>, __bit_iterator<_Dp, false>); |
513 | 473 | template <class _Dp, bool _IsConst1, bool _IsConst2> |
514 | 474 | _LIBCPP_CONSTEXPR_SINCE_CXX20 friend bool |
515 | 475 | __equal_aligned(__bit_iterator<_Dp, _IsConst1>, __bit_iterator<_Dp, _IsConst1>, __bit_iterator<_Dp, _IsConst2>); |
|
0 commit comments