summaryrefslogtreecommitdiffstats
path: root/src/corelib/text/qstring.h
diff options
context:
space:
mode:
authorAndrei Golubev <andrei.golubev@qt.io>2020-08-27 22:10:53 +0200
committerAndrei Golubev <andrei.golubev@qt.io>2020-09-10 17:31:23 +0200
commitec7e680c5007345c34542a57bd2ac344fb112063 (patch)
treed246b9bb323acaf844a650dae6929d27fa68f386 /src/corelib/text/qstring.h
parent04d78df344c341b6a13d4cbe0162ed20e828c88a (diff)
Remove '\0' space reservation logic in QString
Changed QString to use implicit element reserved by QArrayData Task-number: QTBUG-84320 Change-Id: If517500b3f0e71bb8d2989c64815a634aa8dd554 Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src/corelib/text/qstring.h')
-rw-r--r--src/corelib/text/qstring.h25
1 files changed, 12 insertions, 13 deletions
diff --git a/src/corelib/text/qstring.h b/src/corelib/text/qstring.h
index d86d659e75..62826d67e2 100644
--- a/src/corelib/text/qstring.h
+++ b/src/corelib/text/qstring.h
@@ -1094,15 +1094,14 @@ inline QChar *QString::data()
inline const QChar *QString::constData() const
{ return data(); }
inline void QString::detach()
-{ if (d->needsDetach()) reallocData(d.size + 1u, d->detachFlags()); }
+{ if (d->needsDetach()) reallocData(d.size, d->detachFlags()); }
inline bool QString::isDetached() const
{ return !d->isShared(); }
inline void QString::clear()
{ if (!isNull()) *this = QString(); }
inline QString::QString(const QString &other) noexcept : d(other.d)
{ }
-inline qsizetype QString::capacity() const
-{ const auto realCapacity = d->constAllocatedCapacity(); return realCapacity ? int(realCapacity) - 1 : 0; }
+inline qsizetype QString::capacity() const { return qsizetype(d->constAllocatedCapacity()); }
inline QString &QString::setNum(short n, int base)
{ return setNum(qlonglong(n), base); }
inline QString &QString::setNum(ushort n, int base)
@@ -1167,22 +1166,22 @@ inline QString::~QString() {}
inline void QString::reserve(qsizetype asize)
{
- if (d->needsDetach() || asize >= capacity() - d.freeSpaceAtBegin())
- reallocData(uint(qMax(asize, size())) + 1u, d->detachFlags());
-
- // we're not shared anymore, for sure
- d->setFlag(Data::CapacityReserved);
+ if (d->needsDetach() || asize >= capacity() - d.freeSpaceAtBegin()) {
+ reallocData(size_t(qMax(asize, size())), d->detachFlags() | Data::CapacityReserved);
+ } else {
+ d->setFlag(Data::CapacityReserved);
+ }
}
inline void QString::squeeze()
{
if ((d->flags() & Data::CapacityReserved) == 0)
return;
- if (d->needsDetach() || int(d.size) < capacity())
- reallocData(uint(d.size) + 1u, d->detachFlags());
-
- // we're not shared anymore, for sure
- d->clearFlag(Data::CapacityReserved);
+ if (d->needsDetach() || int(d.size) < capacity()) {
+ reallocData(size_t(d.size), d->detachFlags() & ~Data::CapacityReserved);
+ } else {
+ d->clearFlag(Data::CapacityReserved);
+ }
}
inline QString &QString::setUtf16(const ushort *autf16, qsizetype asize)