Fix signature of QArrayDataOps::erase()
Bring it in line with the other methods that also take a pointer and a size. Also use truncate() in removeAll() as that's more efficient for the use case. Change-Id: Ib1073b7c048ceb96fb6391b308ef8feb77896866 Reviewed-by: Andrei Golubev <andrei.golubev@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
c0e1a38f69
commit
996255baae
@ -2044,7 +2044,9 @@ QByteArray &QByteArray::remove(qsizetype pos, qsizetype len)
|
|||||||
if (len <= 0 || pos < 0 || size_t(pos) >= size_t(size()))
|
if (len <= 0 || pos < 0 || size_t(pos) >= size_t(size()))
|
||||||
return *this;
|
return *this;
|
||||||
detach();
|
detach();
|
||||||
d->erase(d.begin() + pos, d.begin() + qMin(pos + len, size()));
|
if (pos + len > d->size)
|
||||||
|
len = d->size - pos;
|
||||||
|
d->erase(d.begin() + pos, len);
|
||||||
d.data()[d.size] = '\0';
|
d.data()[d.size] = '\0';
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
@ -2985,7 +2985,7 @@ QString &QString::remove(qsizetype pos, qsizetype len)
|
|||||||
resize(pos); // truncate
|
resize(pos); // truncate
|
||||||
} else if (len > 0) {
|
} else if (len > 0) {
|
||||||
detach();
|
detach();
|
||||||
d->erase(d.begin() + pos, d.begin() + pos + len);
|
d->erase(d.begin() + pos, len);
|
||||||
d.data()[d.size] = u'\0';
|
d.data()[d.size] = u'\0';
|
||||||
}
|
}
|
||||||
return *this;
|
return *this;
|
||||||
|
@ -216,8 +216,9 @@ public:
|
|||||||
new (where) T(std::move(tmp));
|
new (where) T(std::move(tmp));
|
||||||
}
|
}
|
||||||
|
|
||||||
void erase(T *b, T *e)
|
void erase(T *b, qsizetype n)
|
||||||
{
|
{
|
||||||
|
T *e = b + n;
|
||||||
Q_ASSERT(this->isMutable());
|
Q_ASSERT(this->isMutable());
|
||||||
Q_ASSERT(b < e);
|
Q_ASSERT(b < e);
|
||||||
Q_ASSERT(b >= this->begin() && b < this->end());
|
Q_ASSERT(b >= this->begin() && b < this->end());
|
||||||
@ -231,7 +232,7 @@ public:
|
|||||||
this->ptr = e;
|
this->ptr = e;
|
||||||
else if (e != this->end())
|
else if (e != this->end())
|
||||||
::memmove(static_cast<void *>(b), static_cast<void *>(e), (static_cast<T *>(this->end()) - e) * sizeof(T));
|
::memmove(static_cast<void *>(b), static_cast<void *>(e), (static_cast<T *>(this->end()) - e) * sizeof(T));
|
||||||
this->size -= (e - b);
|
this->size -= n;
|
||||||
}
|
}
|
||||||
|
|
||||||
void eraseFirst() noexcept
|
void eraseFirst() noexcept
|
||||||
@ -592,8 +593,9 @@ public:
|
|||||||
Inserter(this, pos).insertOne(i, std::move(tmp));
|
Inserter(this, pos).insertOne(i, std::move(tmp));
|
||||||
}
|
}
|
||||||
|
|
||||||
void erase(T *b, T *e)
|
void erase(T *b, qsizetype n)
|
||||||
{
|
{
|
||||||
|
T *e = b + n;
|
||||||
Q_ASSERT(this->isMutable());
|
Q_ASSERT(this->isMutable());
|
||||||
Q_ASSERT(b < e);
|
Q_ASSERT(b < e);
|
||||||
Q_ASSERT(b >= this->begin() && b < this->end());
|
Q_ASSERT(b >= this->begin() && b < this->end());
|
||||||
@ -616,7 +618,7 @@ public:
|
|||||||
++e;
|
++e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this->size -= (e - b);
|
this->size -= n;
|
||||||
std::destroy(b, e);
|
std::destroy(b, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -818,8 +820,10 @@ public:
|
|||||||
Inserter(this, pos).insertOne(i, std::move(tmp));
|
Inserter(this, pos).insertOne(i, std::move(tmp));
|
||||||
}
|
}
|
||||||
|
|
||||||
void erase(T *b, T *e)
|
void erase(T *b, qsizetype n)
|
||||||
{
|
{
|
||||||
|
T *e = b + n;
|
||||||
|
|
||||||
Q_ASSERT(this->isMutable());
|
Q_ASSERT(this->isMutable());
|
||||||
Q_ASSERT(b < e);
|
Q_ASSERT(b < e);
|
||||||
Q_ASSERT(b >= this->begin() && b < this->end());
|
Q_ASSERT(b >= this->begin() && b < this->end());
|
||||||
@ -836,7 +840,7 @@ public:
|
|||||||
} else if (e != this->end()) {
|
} else if (e != this->end()) {
|
||||||
memmove(static_cast<void *>(b), static_cast<const void *>(e), (static_cast<const T *>(this->end()) - e)*sizeof(T));
|
memmove(static_cast<void *>(b), static_cast<const void *>(e), (static_cast<const T *>(this->end()) - e)*sizeof(T));
|
||||||
}
|
}
|
||||||
this->size -= (e - b);
|
this->size -= n;
|
||||||
}
|
}
|
||||||
|
|
||||||
void reallocate(qsizetype alloc, QArrayData::AllocationOption option)
|
void reallocate(qsizetype alloc, QArrayData::AllocationOption option)
|
||||||
|
@ -341,7 +341,7 @@ public:
|
|||||||
inline reference emplaceFront(Args&&... args);
|
inline reference emplaceFront(Args&&... args);
|
||||||
|
|
||||||
iterator insert(qsizetype i, parameter_type t)
|
iterator insert(qsizetype i, parameter_type t)
|
||||||
{ return insert(i, 1, t); }
|
{ return emplace(i, t); }
|
||||||
iterator insert(qsizetype i, qsizetype n, parameter_type t);
|
iterator insert(qsizetype i, qsizetype n, parameter_type t);
|
||||||
iterator insert(const_iterator before, parameter_type t)
|
iterator insert(const_iterator before, parameter_type t)
|
||||||
{
|
{
|
||||||
@ -448,7 +448,7 @@ public:
|
|||||||
const AT &tCopy = CopyProxy(t);
|
const AT &tCopy = CopyProxy(t);
|
||||||
const iterator e = end(), it = std::remove(begin() + index, e, tCopy);
|
const iterator e = end(), it = std::remove(begin() + index, e, tCopy);
|
||||||
const qsizetype result = std::distance(it, e);
|
const qsizetype result = std::distance(it, e);
|
||||||
d->erase(it, e);
|
d->truncate(d->size - result);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
template <typename AT = T>
|
template <typename AT = T>
|
||||||
@ -661,7 +661,7 @@ inline void QList<T>::remove(qsizetype i, qsizetype n)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
d.detach();
|
d.detach();
|
||||||
d->erase(d->begin() + i, d->begin() + i + n);
|
d->erase(d->begin() + i, n);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
@ -274,7 +274,7 @@ public:
|
|||||||
if (last == end)
|
if (last == end)
|
||||||
d->truncate(end - first);
|
d->truncate(end - first);
|
||||||
else
|
else
|
||||||
d->erase(first, last);
|
d->erase(first, last - first);
|
||||||
}
|
}
|
||||||
|
|
||||||
void swap(SimpleVector &other)
|
void swap(SimpleVector &other)
|
||||||
|
@ -1666,7 +1666,7 @@ void tst_QArrayData::arrayOpsExtra()
|
|||||||
const size_t pos = std::distance(dataPointer.begin(), first);
|
const size_t pos = std::distance(dataPointer.begin(), first);
|
||||||
auto copy = cloneArrayDataPointer(dataPointer, dataPointer.size);
|
auto copy = cloneArrayDataPointer(dataPointer, dataPointer.size);
|
||||||
|
|
||||||
dataPointer->erase(first, last);
|
dataPointer->erase(first, last - first);
|
||||||
QCOMPARE(size_t(dataPointer.size), originalSize - distance);
|
QCOMPARE(size_t(dataPointer.size), originalSize - distance);
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
for (; i < pos; ++i)
|
for (; i < pos; ++i)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user