summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@kdab.com>2015-10-21 22:21:03 +0200
committerMarc Mutz <marc.mutz@kdab.com>2015-12-28 09:15:31 +0000
commit17504a7b32a71e91ceae37cd8023ae0557b45cb6 (patch)
tree3b584ebfe9410ca7e94226a2034d8beaf24d80bb
parent8f166ccf4081e624a8d23b21f236151c9dc38f28 (diff)
QTextStream: use new QString::resize(int, QChar) for padding
Change-Id: I17c90ea32614c45f038f5f3386749dfa74bad438 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
-rw-r--r--src/corelib/io/qtextstream.cpp42
-rw-r--r--src/corelib/io/qtextstream_p.h4
2 files changed, 26 insertions, 20 deletions
diff --git a/src/corelib/io/qtextstream.cpp b/src/corelib/io/qtextstream.cpp
index adf9e1aa55..9f0a8c08ed 100644
--- a/src/corelib/io/qtextstream.cpp
+++ b/src/corelib/io/qtextstream.cpp
@@ -862,6 +862,21 @@ void QTextStreamPrivate::write(QLatin1String data)
/*!
\internal
*/
+void QTextStreamPrivate::writePadding(int len)
+{
+ if (string) {
+ // ### What about seek()??
+ string->resize(string->size() + len, params.padChar);
+ } else {
+ writeBuffer.resize(writeBuffer.size() + len, params.padChar);
+ if (writeBuffer.size() > QTEXTSTREAM_BUFFERSIZE)
+ flushWriteBuffer();
+ }
+}
+
+/*!
+ \internal
+*/
inline bool QTextStreamPrivate::getChar(QChar *ch)
{
if ((string && stringOffset == string->size())
@@ -916,31 +931,24 @@ QTextStreamPrivate::PaddingResult QTextStreamPrivate::padding(int len) const
{
Q_ASSERT(params.fieldWidth > len); // calling padding() when no padding is needed is an error
- // Do NOT break NRVO in this function or kittens will die!
-
- PaddingResult result;
+ int left = 0, right = 0;
const int padSize = params.fieldWidth - len;
- result.padding.resize(padSize);
- std::fill_n(result.padding.begin(), padSize, params.padChar);
-
switch (params.fieldAlignment) {
case QTextStream::AlignLeft:
- result.left = 0;
- result.right = padSize;
+ right = padSize;
break;
case QTextStream::AlignRight:
case QTextStream::AlignAccountingStyle:
- result.left = padSize;
- result.right = 0;
+ left = padSize;
break;
case QTextStream::AlignCenter:
- result.left = padSize/2;
- result.right = padSize - padSize/2;
+ left = padSize/2;
+ right = padSize - padSize/2;
break;
}
-
+ const PaddingResult result = { left, right };
return result;
}
@@ -965,9 +973,9 @@ void QTextStreamPrivate::putString(const QChar *data, int len, bool number)
}
}
- write(pad.padding.constData(), pad.left);
+ writePadding(pad.left);
write(data, len);
- write(pad.padding.constData(), pad.right);
+ writePadding(pad.right);
} else {
write(data, len);
}
@@ -993,9 +1001,9 @@ void QTextStreamPrivate::putString(QLatin1String data, bool number)
}
}
- write(pad.padding.constData(), pad.left);
+ writePadding(pad.left);
write(data);
- write(pad.padding.constData(), pad.right);
+ writePadding(pad.right);
} else {
write(data);
}
diff --git a/src/corelib/io/qtextstream_p.h b/src/corelib/io/qtextstream_p.h
index 115408a6dd..6c6cbe1e6e 100644
--- a/src/corelib/io/qtextstream_p.h
+++ b/src/corelib/io/qtextstream_p.h
@@ -169,6 +169,7 @@ public:
inline void write(QChar ch);
void write(const QChar *data, int len);
void write(QLatin1String data);
+ void writePadding(int len);
inline void putString(const QString &ch, bool number = false) { putString(ch.constData(), ch.length(), number); }
void putString(const QChar *data, int len, bool number = false);
void putString(QLatin1String data, bool number = false);
@@ -176,10 +177,7 @@ public:
void putNumber(qulonglong number, bool negative);
struct PaddingResult {
- enum { PreallocatedPadding = 80 }; // typical line length
-
int left, right;
- QVarLengthArray<QChar, PreallocatedPadding> padding;
};
PaddingResult padding(int len) const;