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
Thorbjørn Lindeijer 2011-04-27 15:53:28 +02:00 committed by Olivier Goffart
parent b9f6b156c6
commit e8ac3549c5
2 changed files with 43 additions and 0 deletions

View File

@ -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

View File

@ -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(); }