Fixed a segfault happening because default-constructed iterators aren't null pointers on MacOS

This commit is contained in:
Matthias 2020-06-20 13:47:44 -07:00
parent 41dcb43a99
commit ae2152eeda
1 changed files with 5 additions and 11 deletions

View File

@ -2790,26 +2790,20 @@ void align (Iter i1, Iter i2, Iter j1, Iter j2, Distance distance)
vj.push_back (j);
}
while (vi.size () < vj.size ()) {
vi.push_back (Iter ());
}
size_t sz = std::max (vi.size (), vj.size ());
while (vj.size () < vi.size ()) {
vj.push_back (Iter ());
}
if (vi.size () <= 1) {
if (sz <= 1) {
return;
}
// Caution: this is an O(2) algorithm ...
bool any_swapped = true;
for (size_t n = 0; n < vi.size () - 1 && any_swapped; ++n) {
for (size_t n = 0; n < sz - 1 && any_swapped; ++n) {
any_swapped = false;
for (size_t m = n + 1; m < vj.size (); ++m) {
if (vi [n] == Iter () || vi [m] == Iter () || vj [n] == Iter () || vj [m] == Iter ()) {
for (size_t m = n + 1; m < sz; ++m) {
if (n >= vi.size () || m >= vi.size () || n >= vj.size () || m >= vj.size ()) {
continue;
} else if (distance (*vi [n], *vj [m]) + distance (*vi [m], *vj [n]) < distance (*vi [n], *vj [n]) + distance (*vi [m], *vj [m])) {
// this will reduce the overall distance: