summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/corelib/kernel/qmetaobject.cpp2
-rw-r--r--src/corelib/text/qbytearray.cpp26
-rw-r--r--src/corelib/text/qbytearray.h6
-rw-r--r--src/corelib/text/qstring.cpp16
-rw-r--r--src/corelib/text/qstring.h12
-rw-r--r--src/corelib/tools/qarraydata.h14
-rw-r--r--src/corelib/tools/qarraydataops.h18
-rw-r--r--src/corelib/tools/qvector.h53
8 files changed, 79 insertions, 68 deletions
diff --git a/src/corelib/kernel/qmetaobject.cpp b/src/corelib/kernel/qmetaobject.cpp
index b51bb616b2..d9feb76d04 100644
--- a/src/corelib/kernel/qmetaobject.cpp
+++ b/src/corelib/kernel/qmetaobject.cpp
@@ -159,7 +159,7 @@ static inline const QByteArray stringData(const QMetaObject *mo, int index)
Q_ASSERT(priv(mo->d.data)->revision >= 7);
const QByteArrayDataPtr data = { const_cast<QByteArrayData*>(&mo->d.stringdata[index]) };
Q_ASSERT(data.ptr->ref.isStatic());
- Q_ASSERT(data.ptr->alloc == 0);
+ Q_ASSERT(data.ptr->allocatedCapacity() == 0);
Q_ASSERT(data.ptr->size >= 0);
return data;
}
diff --git a/src/corelib/text/qbytearray.cpp b/src/corelib/text/qbytearray.cpp
index 380730775d..d70977b841 100644
--- a/src/corelib/text/qbytearray.cpp
+++ b/src/corelib/text/qbytearray.cpp
@@ -1207,9 +1207,9 @@ QByteArray &QByteArray::operator=(const char *str)
x = Data::allocate(0);
} else {
const int len = int(strlen(str));
- const uint fullLen = len + 1;
- if (d->ref.isShared() || fullLen > d->alloc
- || (len < d->size && fullLen < uint(d->alloc >> 1)))
+ const int fullLen = len + 1;
+ if (d->ref.isShared() || fullLen > int(d->allocatedCapacity())
+ || (len < d->size && fullLen < int(d->allocatedCapacity() >> 1)))
reallocData(fullLen, d->detachFlags());
x = d;
memcpy(x->data(), str, fullLen); // include null terminator
@@ -1775,9 +1775,9 @@ void QByteArray::resize(int size)
x->data()[size] = '\0';
d = x;
} else {
- if (d->ref.isShared() || uint(size) + 1u > d->alloc)
+ if (d->ref.isShared() || size > capacity())
reallocData(uint(size) + 1u, d->detachFlags() | Data::GrowsForward);
- if (d->alloc) {
+ if (d->allocatedCapacity()) {
d->size = size;
d->data()[size] = '\0';
}
@@ -1900,7 +1900,7 @@ QByteArray &QByteArray::prepend(const char *str)
QByteArray &QByteArray::prepend(const char *str, int len)
{
if (str) {
- if (d->ref.isShared() || uint(d->size + len) + 1u > d->alloc)
+ if (d->ref.isShared() || d->size + len > capacity())
reallocData(uint(d->size + len) + 1u, d->detachFlags() | Data::GrowsForward);
memmove(d->data()+len, d->data(), d->size);
memcpy(d->data(), str, len);
@@ -1926,7 +1926,7 @@ QByteArray &QByteArray::prepend(const char *str, int len)
QByteArray &QByteArray::prepend(char ch)
{
- if (d->ref.isShared() || uint(d->size) + 2u > d->alloc)
+ if (d->ref.isShared() || d->size + 1 > capacity())
reallocData(uint(d->size) + 2u, d->detachFlags() | Data::GrowsForward);
memmove(d->data()+1, d->data(), d->size);
d->data()[0] = ch;
@@ -1964,7 +1964,7 @@ QByteArray &QByteArray::append(const QByteArray &ba)
if (d->size == 0 && d->ref.isStatic() && !IS_RAW_DATA(ba.d)) {
*this = ba;
} else if (ba.d->size != 0) {
- if (d->ref.isShared() || uint(d->size + ba.d->size) + 1u > d->alloc)
+ if (d->ref.isShared() || d->size + ba.d->size > capacity())
reallocData(uint(d->size + ba.d->size) + 1u, d->detachFlags() | Data::GrowsForward);
memcpy(d->data() + d->size, ba.d->data(), ba.d->size);
d->size += ba.d->size;
@@ -1996,7 +1996,7 @@ QByteArray& QByteArray::append(const char *str)
{
if (str) {
const int len = int(strlen(str));
- if (d->ref.isShared() || uint(d->size + len) + 1u > d->alloc)
+ if (d->ref.isShared() || d->size + len > capacity())
reallocData(uint(d->size + len) + 1u, d->detachFlags() | Data::GrowsForward);
memcpy(d->data() + d->size, str, len + 1); // include null terminator
d->size += len;
@@ -2021,7 +2021,7 @@ QByteArray &QByteArray::append(const char *str, int len)
if (len < 0)
len = qstrlen(str);
if (str && len) {
- if (d->ref.isShared() || uint(d->size + len) + 1u > d->alloc)
+ if (d->ref.isShared() || d->size + len > capacity())
reallocData(uint(d->size + len) + 1u, d->detachFlags() | Data::GrowsForward);
memcpy(d->data() + d->size, str, len); // include null terminator
d->size += len;
@@ -2049,7 +2049,7 @@ QByteArray &QByteArray::append(const char *str, int len)
QByteArray& QByteArray::append(char ch)
{
- if (d->ref.isShared() || uint(d->size) + 2u > d->alloc)
+ if (d->ref.isShared() || d->size + 1 > capacity())
reallocData(uint(d->size) + 2u, d->detachFlags() | Data::GrowsForward);
d->data()[d->size++] = ch;
d->data()[d->size] = '\0';
@@ -2576,7 +2576,7 @@ QByteArray QByteArray::repeated(int times) const
QByteArray result;
result.reserve(resultSize);
- if (result.d->alloc != uint(resultSize) + 1u)
+ if (result.capacity() != resultSize)
return QByteArray(); // not enough memory
memcpy(result.d->data(), d->data(), d->size);
@@ -4469,7 +4469,7 @@ QByteArray QByteArray::fromRawData(const char *data, int size)
*/
QByteArray &QByteArray::setRawData(const char *data, uint size)
{
- if (d->ref.isShared() || d->alloc) {
+ if (d->ref.isShared() || d->allocatedCapacity()) {
*this = fromRawData(data, size);
} else {
if (data) {
diff --git a/src/corelib/text/qbytearray.h b/src/corelib/text/qbytearray.h
index 2808494407..c161e92743 100644
--- a/src/corelib/text/qbytearray.h
+++ b/src/corelib/text/qbytearray.h
@@ -502,11 +502,11 @@ inline QByteArray::QByteArray(const QByteArray &a) noexcept : d(a.d)
{ d->ref.ref(); }
inline int QByteArray::capacity() const
-{ return d->alloc ? d->alloc - 1 : 0; }
+{ int realCapacity = d->constAllocatedCapacity(); return realCapacity ? realCapacity - 1 : 0; }
inline void QByteArray::reserve(int asize)
{
- if (d->ref.isShared() || uint(asize) + 1u > d->alloc) {
+ if (d->ref.isShared() || asize > capacity()) {
reallocData(qMax(uint(size()), uint(asize)) + 1u, d->detachFlags() | Data::CapacityReserved);
} else {
d->flags |= Data::CapacityReserved;
@@ -515,7 +515,7 @@ inline void QByteArray::reserve(int asize)
inline void QByteArray::squeeze()
{
- if (d->ref.isShared() || uint(d->size) + 1u < d->alloc) {
+ if (d->ref.isShared() || d->size < capacity()) {
reallocData(uint(d->size) + 1u, d->detachFlags() & ~Data::CapacityReserved);
} else {
d->flags &= ~Data::CapacityReserved;
diff --git a/src/corelib/text/qstring.cpp b/src/corelib/text/qstring.cpp
index 5f5b0acd15..e00f2998b0 100644
--- a/src/corelib/text/qstring.cpp
+++ b/src/corelib/text/qstring.cpp
@@ -2270,7 +2270,7 @@ void QString::resize(int size)
return;
}
- if (d->ref.isShared() || uint(size) + 1u > d->alloc)
+ if (d->ref.isShared() || uint(size) + 1u > d->allocatedCapacity())
reallocData(uint(size) + 1u, true);
if (d->alloc) {
d->size = size;
@@ -2592,7 +2592,7 @@ QString& QString::insert(int i, const QChar *unicode, int size)
return *this;
const ushort *s = (const ushort *)unicode;
- if (s >= d->data() && s < d->data() + d->alloc) {
+ if (s >= d->data() && s < d->data() + d->size) {
// Part of me - take a copy
ushort *tmp = static_cast<ushort *>(::malloc(size * sizeof(QChar)));
Q_CHECK_PTR(tmp);
@@ -2658,7 +2658,7 @@ QString &QString::append(const QString &str)
if (d == Data::sharedNull()) {
operator=(str);
} else {
- if (d->ref.isShared() || uint(d->size + str.d->size) + 1u > d->alloc)
+ if (d->ref.isShared() || d->size + str.d->size > capacity())
reallocData(uint(d->size + str.d->size) + 1u, true);
memcpy(d->data() + d->size, str.d->data(), str.d->size * sizeof(QChar));
d->size += str.d->size;
@@ -2677,7 +2677,7 @@ QString &QString::append(const QString &str)
QString &QString::append(const QChar *str, int len)
{
if (str && len > 0) {
- if (d->ref.isShared() || uint(d->size + len) + 1u > d->alloc)
+ if (d->ref.isShared() || uint(d->size + len) + 1u > d->allocatedCapacity())
reallocData(uint(d->size + len) + 1u, true);
memcpy(d->data() + d->size, str, len * sizeof(QChar));
d->size += len;
@@ -2696,7 +2696,7 @@ QString &QString::append(QLatin1String str)
const char *s = str.latin1();
if (s) {
int len = str.size();
- if (d->ref.isShared() || uint(d->size + len) + 1u > d->alloc)
+ if (d->ref.isShared() || d->size + len > capacity())
reallocData(uint(d->size + len) + 1u, true);
ushort *i = d->data() + d->size;
qt_from_latin1(i, s, uint(len));
@@ -2743,7 +2743,7 @@ QString &QString::append(QLatin1String str)
*/
QString &QString::append(QChar ch)
{
- if (d->ref.isShared() || uint(d->size) + 2u > d->alloc)
+ if (d->ref.isShared() || d->size + 1 > capacity())
reallocData(uint(d->size) + 2u, true);
d->data()[d->size++] = ch.unicode();
d->data()[d->size] = '\0';
@@ -7954,7 +7954,7 @@ QString QString::repeated(int times) const
QString result;
result.reserve(resultSize);
- if (result.d->alloc != uint(resultSize) + 1u)
+ if (result.capacity() != resultSize)
return QString(); // not enough memory
memcpy(result.d->data(), d->data(), d->size * sizeof(ushort));
@@ -9149,7 +9149,7 @@ QString QString::fromRawData(const QChar *unicode, int size)
*/
QString &QString::setRawData(const QChar *unicode, int size)
{
- if (d->ref.isShared() || d->alloc) {
+ if (d->ref.isShared() || d->allocatedCapacity()) {
*this = fromRawData(unicode, size);
} else {
if (unicode) {
diff --git a/src/corelib/text/qstring.h b/src/corelib/text/qstring.h
index 630a33c4ae..4d853bfc72 100644
--- a/src/corelib/text/qstring.h
+++ b/src/corelib/text/qstring.h
@@ -274,7 +274,7 @@ public:
void truncate(int pos);
void chop(int n);
- int capacity() const;
+ inline int capacity() const;
inline void reserve(int size);
inline void squeeze();
@@ -542,7 +542,7 @@ public:
inline QString &prepend(QLatin1String s) { return insert(0, s); }
inline QString &operator+=(QChar c) {
- if (d->ref.isShared() || uint(d->size) + 2u > d->alloc)
+ if (d->ref.isShared() || d->size + 1 > capacity())
reallocData(uint(d->size) + 2u, true);
d->data()[d->size++] = c.unicode();
d->data()[d->size] = '\0';
@@ -1049,7 +1049,7 @@ inline void QString::clear()
inline QString::QString(const QString &other) noexcept : d(other.d)
{ Q_ASSERT(&other != this); d->ref.ref(); }
inline int QString::capacity() const
-{ return d->alloc ? d->alloc - 1 : 0; }
+{ int realCapacity = d->constAllocatedCapacity(); return realCapacity ? realCapacity - 1 : 0; }
inline QString &QString::setNum(short n, int base)
{ return setNum(qlonglong(n), base); }
inline QString &QString::setNum(ushort n, int base)
@@ -1263,8 +1263,8 @@ inline QString::~QString() { if (!d->ref.deref()) Data::deallocate(d); }
inline void QString::reserve(int asize)
{
- if (d->ref.isShared() || uint(asize) >= d->alloc)
- reallocData(qMax(asize, d->size) + 1u);
+ if (d->ref.isShared() || asize >= capacity())
+ reallocData(qMax(asize, size()) + 1u);
// we're not shared anymore, for sure
d->flags |= Data::CapacityReserved;
@@ -1272,7 +1272,7 @@ inline void QString::reserve(int asize)
inline void QString::squeeze()
{
- if (d->ref.isShared() || uint(d->size) + 1u < d->alloc)
+ if (d->ref.isShared() || d->size < capacity())
reallocData(uint(d->size) + 1u);
// we're not shared anymore, for sure
diff --git a/src/corelib/tools/qarraydata.h b/src/corelib/tools/qarraydata.h
index 9a3b53338c..feee557131 100644
--- a/src/corelib/tools/qarraydata.h
+++ b/src/corelib/tools/qarraydata.h
@@ -55,6 +55,16 @@ struct Q_CORE_EXPORT QArrayData
qptrdiff offset; // in bytes from beginning of header
+ inline size_t allocatedCapacity()
+ {
+ return alloc;
+ }
+
+ inline size_t constAllocatedCapacity() const
+ {
+ return alloc;
+ }
+
void *data()
{
Q_ASSERT(size == 0
@@ -90,8 +100,8 @@ struct Q_CORE_EXPORT QArrayData
size_t detachCapacity(size_t newSize) const
{
- if (flags & CapacityReserved && newSize < alloc)
- return alloc;
+ if (flags & CapacityReserved && newSize < constAllocatedCapacity())
+ return constAllocatedCapacity();
return newSize;
}
diff --git a/src/corelib/tools/qarraydataops.h b/src/corelib/tools/qarraydataops.h
index 8e19525f07..7724049be8 100644
--- a/src/corelib/tools/qarraydataops.h
+++ b/src/corelib/tools/qarraydataops.h
@@ -63,7 +63,7 @@ struct QPodArrayOps
Q_ASSERT(this->isMutable());
Q_ASSERT(!this->ref.isShared());
Q_ASSERT(newSize > uint(this->size));
- Q_ASSERT(newSize <= this->alloc);
+ Q_ASSERT(newSize <= this->allocatedCapacity());
::memset(static_cast<void *>(this->end()), 0, (newSize - this->size) * sizeof(T));
this->size = int(newSize);
@@ -74,7 +74,7 @@ struct QPodArrayOps
Q_ASSERT(this->isMutable());
Q_ASSERT(!this->ref.isShared());
Q_ASSERT(b < e);
- Q_ASSERT(size_t(e - b) <= this->alloc - uint(this->size));
+ Q_ASSERT(e - b <= this->allocatedCapacity() - this->size);
::memcpy(static_cast<void *>(this->end()), static_cast<const void *>(b),
(e - b) * sizeof(T));
@@ -85,7 +85,7 @@ struct QPodArrayOps
{
Q_ASSERT(this->isMutable());
Q_ASSERT(!this->ref.isShared());
- Q_ASSERT(n <= this->alloc - uint(this->size));
+ Q_ASSERT(n <= uint(this->allocatedCapacity() - this->size));
T *iter = this->end();
const T *const end = iter + n;
@@ -119,7 +119,7 @@ struct QPodArrayOps
Q_ASSERT(where >= this->begin() && where < this->end()); // Use copyAppend at end
Q_ASSERT(b < e);
Q_ASSERT(e <= where || b > this->end()); // No overlap
- Q_ASSERT(size_t(e - b) <= this->alloc - uint(this->size));
+ Q_ASSERT(e - b <= this->allocatedCapacity() - this->size);
::memmove(static_cast<void *>(where + (e - b)), static_cast<void *>(where),
(static_cast<const T*>(this->end()) - where) * sizeof(T));
@@ -150,7 +150,7 @@ struct QGenericArrayOps
Q_ASSERT(this->isMutable());
Q_ASSERT(!this->ref.isShared());
Q_ASSERT(newSize > uint(this->size));
- Q_ASSERT(newSize <= this->alloc);
+ Q_ASSERT(newSize <= this->allocatedCapacity());
T *const begin = this->begin();
do {
@@ -163,7 +163,7 @@ struct QGenericArrayOps
Q_ASSERT(this->isMutable());
Q_ASSERT(!this->ref.isShared());
Q_ASSERT(b < e);
- Q_ASSERT(size_t(e - b) <= this->alloc - uint(this->size));
+ Q_ASSERT(e - b <= this->allocatedCapacity() - this->size);
T *iter = this->end();
for (; b != e; ++iter, ++b) {
@@ -176,7 +176,7 @@ struct QGenericArrayOps
{
Q_ASSERT(this->isMutable());
Q_ASSERT(!this->ref.isShared());
- Q_ASSERT(n <= this->alloc - uint(this->size));
+ Q_ASSERT(n <= size_t(this->allocatedCapacity() - this->size));
T *iter = this->end();
const T *const end = iter + n;
@@ -220,7 +220,7 @@ struct QGenericArrayOps
Q_ASSERT(where >= this->begin() && where < this->end()); // Use copyAppend at end
Q_ASSERT(b < e);
Q_ASSERT(e <= where || b > this->end()); // No overlap
- Q_ASSERT(size_t(e - b) <= this->alloc - uint(this->size));
+ Q_ASSERT(e - b <= this->allocatedCapacity() - this->size);
// Array may be truncated at where in case of exceptions
@@ -316,7 +316,7 @@ struct QMovableArrayOps
Q_ASSERT(where >= this->begin() && where < this->end()); // Use copyAppend at end
Q_ASSERT(b < e);
Q_ASSERT(e <= where || b > this->end()); // No overlap
- Q_ASSERT(size_t(e - b) <= this->alloc - uint(this->size));
+ Q_ASSERT(e - b <= this->allocatedCapacity() - this->size);
// Provides strong exception safety guarantee,
// provided T::~T() nothrow
diff --git a/src/corelib/tools/qvector.h b/src/corelib/tools/qvector.h
index d64673cc16..2be7fa01e0 100644
--- a/src/corelib/tools/qvector.h
+++ b/src/corelib/tools/qvector.h
@@ -110,7 +110,7 @@ public:
void resize(int size);
- inline int capacity() const { return int(d->alloc); }
+ inline int capacity() const { return d->constAllocatedCapacity(); }
void reserve(int size);
inline void squeeze()
{
@@ -303,7 +303,7 @@ public:
private:
// ### Qt6: remove methods, they are unused
void reallocData(const int size, const int alloc, QArrayData::ArrayOptions options = QArrayData::DefaultAllocationFlags);
- void reallocData(const int sz) { reallocData(sz, d->alloc); }
+ void reallocData(const int sz) { reallocData(sz, d->allocatedCapacity()); }
void realloc(int alloc, QArrayData::ArrayOptions options = QArrayData::DefaultAllocationFlags);
void freeData(Data *d);
void defaultConstruct(T *from, T *to);
@@ -372,14 +372,14 @@ inline QVector<T>::QVector(const QVector<T> &v)
d = v.d;
} else {
if (v.d->flags & Data::CapacityReserved) {
- d = Data::allocate(v.d->alloc);
+ d = Data::allocate(v.d->allocatedCapacity());
Q_CHECK_PTR(d);
d->flags |= Data::CapacityReserved;
} else {
d = Data::allocate(v.d->size);
Q_CHECK_PTR(d);
}
- if (d->alloc) {
+ if (v.d->size) {
copyConstruct(v.d->begin(), v.d->end(), d->begin());
d->size = v.d->size;
}
@@ -397,18 +397,18 @@ void QVector<T>::detach()
return;
if (!isDetached())
- realloc(int(d->alloc));
+ realloc(d->allocatedCapacity());
Q_ASSERT(isDetached());
}
template <typename T>
void QVector<T>::reserve(int asize)
{
- if (asize > int(d->alloc))
- realloc(asize);
- if (isDetached())
+ if (asize > int(d->allocatedCapacity()))
+ realloc(asize, typename Data::ArrayOptions(d->flags | Data::CapacityReserved));
+ else if (isDetached())
d->flags |= Data::CapacityReserved;
- Q_ASSERT(capacity() >= asize);
+ Q_ASSERT(int(d->allocatedCapacity()) >= asize);
}
template <typename T>
@@ -416,9 +416,10 @@ void QVector<T>::resize(int asize)
{
if (asize == d->size)
return detach();
- if (asize > int(d->alloc) || !isDetached()) { // there is not enough space
- QArrayData::ArrayOptions opt = asize > int(d->alloc) ? QArrayData::GrowsForward : QArrayData::DefaultAllocationFlags;
- realloc(qMax(int(d->alloc), asize), opt);
+ int oldAlloc = d->allocatedCapacity();
+ if (asize > oldAlloc || !isDetached()) { // there is not enough space
+ QArrayData::ArrayOptions opt = asize > oldAlloc ? QArrayData::GrowsForward : QArrayData::DefaultAllocationFlags;
+ realloc(qMax(oldAlloc, asize), opt);
}
if (asize < d->size)
destruct(begin() + asize, end());
@@ -583,7 +584,7 @@ void QVector<T>::reallocData(const int asize, const int aalloc, QArrayData::Arra
const bool isShared = d->ref.isShared();
if (aalloc != 0) {
- if (aalloc != int(d->alloc) || isShared) {
+ if (aalloc != int(d->allocatedCapacity()) || isShared) {
QT_TRY {
// allocate memory
x = Data::allocate(aalloc, options);
@@ -640,7 +641,7 @@ void QVector<T>::reallocData(const int asize, const int aalloc, QArrayData::Arra
QT_RETHROW;
}
} else {
- Q_ASSERT(int(d->alloc) == aalloc); // resize, without changing allocation size
+ Q_ASSERT(int(d->allocatedCapacity()) == aalloc); // resize, without changing allocation size
Q_ASSERT(isDetached()); // can be done only on detached d
Q_ASSERT(x == d); // in this case we do not need to allocate anything
if (asize <= d->size) {
@@ -667,9 +668,9 @@ void QVector<T>::reallocData(const int asize, const int aalloc, QArrayData::Arra
}
Q_ASSERT(d->data());
- Q_ASSERT(uint(d->size) <= d->alloc);
+ Q_ASSERT(d->size <= int(d->allocatedCapacity()));
Q_ASSERT(aalloc ? d != Data::sharedNull() : d == Data::sharedNull());
- Q_ASSERT(d->alloc >= uint(aalloc));
+ Q_ASSERT(int(d->allocatedCapacity()) >= aalloc);
Q_ASSERT(d->size == asize);
}
@@ -757,11 +758,11 @@ Q_OUTOFLINE_TEMPLATE T QVector<T>::value(int i, const T &defaultValue) const
template <typename T>
void QVector<T>::append(const T &t)
{
- const bool isTooSmall = uint(d->size + 1) > d->alloc;
+ const bool isTooSmall = d->size >= int(d->allocatedCapacity());
if (!isDetached() || isTooSmall) {
T copy(t);
QArrayData::ArrayOptions opt(isTooSmall ? QArrayData::GrowsForward : QArrayData::DefaultAllocationFlags);
- realloc(isTooSmall ? d->size + 1 : d->alloc, opt);
+ realloc(isTooSmall ? d->size + 1 : d->allocatedCapacity(), opt);
if (QTypeInfo<T>::isComplex)
new (d->end()) T(std::move(copy));
@@ -780,10 +781,10 @@ void QVector<T>::append(const T &t)
template <typename T>
void QVector<T>::append(T &&t)
{
- const bool isTooSmall = uint(d->size + 1) > d->alloc;
+ const bool isTooSmall = uint(d->size + 1) > d->allocatedCapacity();
if (!isDetached() || isTooSmall) {
QArrayData::ArrayOptions opt(isTooSmall ? QArrayData::GrowsForward : QArrayData::DefaultAllocationFlags);
- realloc(isTooSmall ? d->size + 1 : d->alloc, opt);
+ realloc(isTooSmall ? d->size + 1 : d->allocatedCapacity(), opt);
}
new (d->end()) T(std::move(t));
@@ -795,7 +796,7 @@ template <typename T>
void QVector<T>::removeLast()
{
Q_ASSERT(!isEmpty());
- Q_ASSERT(d->alloc);
+ Q_ASSERT(d->allocatedCapacity());
if (d->ref.isShared())
detach();
@@ -812,7 +813,7 @@ typename QVector<T>::iterator QVector<T>::insert(iterator before, size_type n, c
const auto offset = std::distance(d->begin(), before);
if (n != 0) {
const T copy(t);
- if (!isDetached() || d->size + n > int(d->alloc))
+ if (!isDetached() || d->size + n > int(d->allocatedCapacity()))
realloc(d->size + n, QArrayData::GrowsForward);
if (!QTypeInfoQuery<T>::isRelocatable) {
T *b = d->end();
@@ -889,7 +890,7 @@ typename QVector<T>::iterator QVector<T>::erase(iterator abegin, iterator aend)
// FIXME we could do a proper realloc, which copy constructs only needed data.
// FIXME we are about to delete data - maybe it is good time to shrink?
// FIXME the shrink is also an issue in removeLast, that is just a copy + reduce of this.
- if (d->alloc) {
+ if (d->allocatedCapacity()) {
detach();
abegin = d->begin() + itemsUntouched;
aend = abegin + itemsToErase;
@@ -952,13 +953,13 @@ QVector<T> &QVector<T>::operator+=(const QVector &l)
*this = l;
} else {
uint newSize = d->size + l.d->size;
- const bool isTooSmall = newSize > d->alloc;
+ const bool isTooSmall = newSize > d->allocatedCapacity();
if (!isDetached() || isTooSmall) {
QArrayData::ArrayOptions opt(isTooSmall ? QArrayData::GrowsForward : QArrayData::DefaultAllocationFlags);
- realloc(isTooSmall ? newSize : d->alloc, opt);
+ realloc(isTooSmall ? newSize : d->allocatedCapacity(), opt);
}
- if (d->alloc) {
+ if (l.d->size) {
T *w = d->begin() + newSize;
T *i = l.d->end();
T *b = l.d->begin();