mirror of
https://github.com/boostorg/move.git
synced 2025-08-01 05:14:27 +02:00
Fix issue #81 from Interprocess, self-moving range was corrupting range merging
This commit is contained in:
@@ -853,15 +853,26 @@ template<typename BidirectionalIterator1, typename BidirectionalIterator2,
|
|||||||
{
|
{
|
||||||
if (len1 > len2 && len2 <= buffer_size)
|
if (len1 > len2 && len2 <= buffer_size)
|
||||||
{
|
{
|
||||||
BidirectionalIterator2 buffer_end = boost::move(middle, last, buffer);
|
if(len2) //Protect against self-move ranges
|
||||||
boost::move_backward(first, middle, last);
|
{
|
||||||
return boost::move(buffer, buffer_end, first);
|
BidirectionalIterator2 buffer_end = boost::move(middle, last, buffer);
|
||||||
|
boost::move_backward(first, middle, last);
|
||||||
|
return boost::move(buffer, buffer_end, first);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return first;
|
||||||
}
|
}
|
||||||
else if (len1 <= buffer_size)
|
else if (len1 <= buffer_size)
|
||||||
{
|
{
|
||||||
BidirectionalIterator2 buffer_end = boost::move(first, middle, buffer);
|
if(len1) //Protect against self-move ranges
|
||||||
boost::move(middle, last, first);
|
{
|
||||||
return boost::move_backward(buffer, buffer_end, last);
|
BidirectionalIterator2 buffer_end = boost::move(first, middle, buffer);
|
||||||
|
BidirectionalIterator1 ret = boost::move(middle, last, first);
|
||||||
|
boost::move(buffer, buffer_end, ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return last;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return rotate_gcd(first, middle, last);
|
return rotate_gcd(first, middle, last);
|
||||||
|
Reference in New Issue
Block a user