prevector::swap: fix (unreached) data corruption

swap was using an incorrect condition to determine when to apply an optimization
(not swapping the full direct[] when swapping two indirect prevectors).

Rather than correct the optimization I'm removing it for simplicity. Removing
this optimization minutely improves performance in the typical (currently only)
usage of member swap(), which is swapping with a freshly value-initialized
object.

(cherry picked from commit a7af72a697a8decab364792230153f114be3919c)
This commit is contained in:
Kaz Wesley 2016-04-14 09:26:32 -07:00 committed by Kris Nuttycombe
parent 6e582e2792
commit 7fb3a610f1
1 changed files with 1 additions and 6 deletions

View File

@ -418,12 +418,7 @@ public:
} }
void swap(prevector<N, T, Size, Diff>& other) { void swap(prevector<N, T, Size, Diff>& other) {
if (_size & other._size & 1) { std::swap(_union, other._union);
std::swap(_union.capacity, other._union.capacity);
std::swap(_union.indirect, other._union.indirect);
} else {
std::swap(_union, other._union);
}
std::swap(_size, other._size); std::swap(_size, other._size);
} }