Fix some invalid iterator usage in Python when deleting/inserting slices from/into containers

This commit is contained in:
William S Fulton 2013-03-25 19:26:12 +00:00
commit 38b2b95c30

View file

@ -339,7 +339,7 @@ namespace swig {
std::advance(it,ii); std::advance(it,ii);
for (size_t rc=0; rc<replacecount; ++rc) { for (size_t rc=0; rc<replacecount; ++rc) {
*it++ = *isit++; *it++ = *isit++;
for (Py_ssize_t c=0; c<(step-1); ++c) for (Py_ssize_t c=0; c<(step-1) && it != self->end(); ++c)
it++; it++;
} }
} }
@ -357,7 +357,7 @@ namespace swig {
std::advance(it,size-ii-1); std::advance(it,size-ii-1);
for (size_t rc=0; rc<replacecount; ++rc) { for (size_t rc=0; rc<replacecount; ++rc) {
*it++ = *isit++; *it++ = *isit++;
for (Py_ssize_t c=0; c<(-step-1); ++c) for (Py_ssize_t c=0; c<(-step-1) && it != self->rend(); ++c)
it++; it++;
} }
} }
@ -383,9 +383,7 @@ namespace swig {
size_t delcount = (jj - ii + step - 1) / step; size_t delcount = (jj - ii + step - 1) / step;
while (delcount) { while (delcount) {
it = self->erase(it); it = self->erase(it);
if (it==self->end()) for (Py_ssize_t c=0; c<(step-1) && it != self->end(); ++c)
break;
for (Py_ssize_t c=0; c<(step-1); ++c)
it++; it++;
delcount--; delcount--;
} }
@ -399,9 +397,7 @@ namespace swig {
size_t delcount = (ii - jj - step - 1) / -step; size_t delcount = (ii - jj - step - 1) / -step;
while (delcount) { while (delcount) {
it = typename Sequence::reverse_iterator(self->erase((++it).base())); it = typename Sequence::reverse_iterator(self->erase((++it).base()));
if (it==self->rend()) for (Py_ssize_t c=0; c<(-step-1) && it != self->rend(); ++c)
break;
for (Py_ssize_t c=0; c<(-step-1); ++c)
it++; it++;
delcount--; delcount--;
} }