summaryrefslogtreecommitdiffstats
path: root/src/corelib
diff options
context:
space:
mode:
authorThorbjørn Lindeijer <thorbjorn.lindeijer@nokia.com>2011-04-27 15:53:28 +0200
committerOlivier Goffart <olivier.goffart@nokia.com>2011-05-10 12:54:50 +0200
commite8ac3549c5000777f9dc15ce06f57e690547d155 (patch)
tree8852112c77431df808d6670be52d1d1e15d5399f /src/corelib
parentb9f6b156c65d4ab0066d9d78fe7d499f1c5c4c49 (diff)
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)
Diffstat (limited to 'src/corelib')
-rw-r--r--src/corelib/tools/qstring.cpp41
-rw-r--r--src/corelib/tools/qstring.h2
2 files changed, 43 insertions, 0 deletions
diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp
index 5493ba915b..75695558ba 100644
--- a/src/corelib/tools/qstring.cpp
+++ b/src/corelib/tools/qstring.cpp
@@ -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
diff --git a/src/corelib/tools/qstring.h b/src/corelib/tools/qstring.h
index 66cfa744df..2b3026cd31 100644
--- a/src/corelib/tools/qstring.h
+++ b/src/corelib/tools/qstring.h
@@ -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(); }