Added QStringRef::toLatin1 and QStringRef::toUtf8
These helper functions make it convenient to avoid making an unnecessary
copy of the string before converting it to a QByteArray. The current
most obvious way to do this would be:
// QStringRef text
QByteArray latin1 = text.toString().toLatin1();
Though the copy can also be avoided by doing:
const QString textData =
QString::fromRawData(text.unicode(), text.size());
QByteArray latin1 = textData.toLatin1();
Now the faster method can be achieved using the new obvious way:
QByteArray latin1 = text.toLatin1();
Reviewed-by: Thiago Macieira
Reviewed-by: Robin Burchell
(cherry picked from commit feabda665de62a0f6a82d831b45926697f30b45b)
bb10
parent
b9f6b156c6
commit
e8ac3549c5
|
|
@ -8014,6 +8014,47 @@ QString QStringRef::toString() const {
|
|||
return QString(m_string->unicode() + m_position, m_size);
|
||||
}
|
||||
|
||||
/*!
|
||||
Returns a Latin-1 representation of the string reference as a QByteArray.
|
||||
|
||||
The returned byte array is undefined if the string reference contains
|
||||
non-Latin1 characters. Those characters may be suppressed or replaced with a
|
||||
question mark.
|
||||
|
||||
\sa QString::toLatin1(), toUtf8()
|
||||
\since 4.8
|
||||
*/
|
||||
QByteArray QStringRef::toLatin1() const
|
||||
{
|
||||
if (!m_string)
|
||||
return QByteArray();
|
||||
return toLatin1_helper(m_string->unicode() + m_position, m_size);
|
||||
}
|
||||
|
||||
/*!
|
||||
Returns a UTF-8 representation of the string reference as a QByteArray.
|
||||
|
||||
UTF-8 is a Unicode codec and can represent all characters in a Unicode
|
||||
string like QString.
|
||||
|
||||
However, in the Unicode range, there are certain codepoints that are not
|
||||
considered characters. The Unicode standard reserves the last two
|
||||
codepoints in each Unicode Plane (U+FFFE, U+FFFF, U+1FFFE, U+1FFFF,
|
||||
U+2FFFE, etc.), as well as 16 codepoints in the range U+FDD0..U+FDDF,
|
||||
inclusive, as non-characters. If any of those appear in the string, they
|
||||
may be discarded and will not appear in the UTF-8 representation, or they
|
||||
may be replaced by one or more replacement characters.
|
||||
|
||||
\sa QString::toUtf8(), toLatin1(), QTextCodec
|
||||
\since 4.8
|
||||
*/
|
||||
QByteArray QStringRef::toUtf8() const
|
||||
{
|
||||
if (isNull())
|
||||
return QByteArray();
|
||||
return QUtf8::convertFromUnicode(m_string->unicode() + m_position, m_size, 0);
|
||||
}
|
||||
|
||||
|
||||
/*! \relates QStringRef
|
||||
|
||||
|
|
|
|||
|
|
@ -1167,6 +1167,8 @@ public:
|
|||
|
||||
inline void clear() { m_string = 0; m_position = m_size = 0; }
|
||||
QString toString() const;
|
||||
QByteArray toLatin1() const;
|
||||
QByteArray toUtf8() const;
|
||||
inline bool isEmpty() const { return m_size == 0; }
|
||||
inline bool isNull() const { return m_string == 0 || m_string->isNull(); }
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue