summaryrefslogtreecommitdiffstats
path: root/src/corelib/tools/qchar.h
diff options
context:
space:
mode:
authorKent Hansen <kent.hansen@nokia.com>2011-09-14 14:11:17 +0200
committerQt by Nokia <qt-info@nokia.com>2011-09-15 20:39:28 +0200
commit8e67ef47942f7d7034ccf2166411d2bf1668c1e2 (patch)
treebba421abc399c8cc658b0ae234f784eab2b0a417 /src/corelib/tools/qchar.h
parent08d1ca10537b2005fa0ff93534272e277b3ae821 (diff)
Boost performance of QChar::isSpace
Make it inline; add fast checks for typical spaces; add fallback function that uses the fastcall calling convention. On ia32, this change makes isSpace ~340x faster for ascii spaces, ~170x faster for non-space ascii characters, and ~1.3x faster for non-ascii characters. Note that this change is NOT binary compatible. Also add an autotest with expected results from before the optimization, to ensure that the behavior is the same. Change-Id: I9438d0ad3c9ba2e80560c4bee7eed05115265798 Reviewed-on: http://codereview.qt-project.org/4905 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
Diffstat (limited to 'src/corelib/tools/qchar.h')
-rw-r--r--src/corelib/tools/qchar.h6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/corelib/tools/qchar.h b/src/corelib/tools/qchar.h
index 36e185ebce..b82addb4c5 100644
--- a/src/corelib/tools/qchar.h
+++ b/src/corelib/tools/qchar.h
@@ -232,7 +232,10 @@ public:
inline bool isNull() const { return ucs == 0; }
bool isPrint() const;
bool isPunct() const;
- bool isSpace() const;
+ inline bool isSpace() const {
+ return ucs == 0x20 || (ucs <= 0x0D && ucs >= 0x09)
+ || (ucs > 127 && isSpace(ucs));
+ }
bool isMark() const;
inline bool isLetter() const {
return (ucs >= 'a' && ucs <= 'z')
@@ -329,6 +332,7 @@ private:
static bool QT_FASTCALL isDigit(ushort ucs2);
static bool QT_FASTCALL isLetter(ushort ucs2);
static bool QT_FASTCALL isLetterOrNumber(ushort ucs2);
+ static bool QT_FASTCALL isSpace(ushort ucs2);
#ifdef QT_NO_CAST_FROM_ASCII
QChar(char c);