QTextStream: use new QString::resize(int, QChar) for padding
Change-Id: I17c90ea32614c45f038f5f3386749dfa74bad438 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
This commit is contained in:
parent
8f166ccf40
commit
17504a7b32
@ -859,6 +859,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
|
\internal
|
||||||
*/
|
*/
|
||||||
@ -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
|
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!
|
int left = 0, right = 0;
|
||||||
|
|
||||||
PaddingResult result;
|
|
||||||
|
|
||||||
const int padSize = params.fieldWidth - len;
|
const int padSize = params.fieldWidth - len;
|
||||||
|
|
||||||
result.padding.resize(padSize);
|
|
||||||
std::fill_n(result.padding.begin(), padSize, params.padChar);
|
|
||||||
|
|
||||||
switch (params.fieldAlignment) {
|
switch (params.fieldAlignment) {
|
||||||
case QTextStream::AlignLeft:
|
case QTextStream::AlignLeft:
|
||||||
result.left = 0;
|
right = padSize;
|
||||||
result.right = padSize;
|
|
||||||
break;
|
break;
|
||||||
case QTextStream::AlignRight:
|
case QTextStream::AlignRight:
|
||||||
case QTextStream::AlignAccountingStyle:
|
case QTextStream::AlignAccountingStyle:
|
||||||
result.left = padSize;
|
left = padSize;
|
||||||
result.right = 0;
|
|
||||||
break;
|
break;
|
||||||
case QTextStream::AlignCenter:
|
case QTextStream::AlignCenter:
|
||||||
result.left = padSize/2;
|
left = padSize/2;
|
||||||
result.right = padSize - padSize/2;
|
right = padSize - padSize/2;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
const PaddingResult result = { left, right };
|
||||||
return result;
|
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(data, len);
|
||||||
write(pad.padding.constData(), pad.right);
|
writePadding(pad.right);
|
||||||
} else {
|
} else {
|
||||||
write(data, len);
|
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(data);
|
||||||
write(pad.padding.constData(), pad.right);
|
writePadding(pad.right);
|
||||||
} else {
|
} else {
|
||||||
write(data);
|
write(data);
|
||||||
}
|
}
|
||||||
|
@ -169,6 +169,7 @@ public:
|
|||||||
inline void write(QChar ch);
|
inline void write(QChar ch);
|
||||||
void write(const QChar *data, int len);
|
void write(const QChar *data, int len);
|
||||||
void write(QLatin1String data);
|
void write(QLatin1String data);
|
||||||
|
void writePadding(int len);
|
||||||
inline void putString(const QString &ch, bool number = false) { putString(ch.constData(), ch.length(), number); }
|
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(const QChar *data, int len, bool number = false);
|
||||||
void putString(QLatin1String data, bool number = false);
|
void putString(QLatin1String data, bool number = false);
|
||||||
@ -176,10 +177,7 @@ public:
|
|||||||
void putNumber(qulonglong number, bool negative);
|
void putNumber(qulonglong number, bool negative);
|
||||||
|
|
||||||
struct PaddingResult {
|
struct PaddingResult {
|
||||||
enum { PreallocatedPadding = 80 }; // typical line length
|
|
||||||
|
|
||||||
int left, right;
|
int left, right;
|
||||||
QVarLengthArray<QChar, PreallocatedPadding> padding;
|
|
||||||
};
|
};
|
||||||
PaddingResult padding(int len) const;
|
PaddingResult padding(int len) const;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user