summaryrefslogtreecommitdiffstats
path: root/src/corelib/tools/qchar.h
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@kdab.com>2014-10-15 23:02:43 +0200
committerMarc Mutz <marc.mutz@kdab.com>2014-12-10 01:26:51 +0100
commitcb93117d06dc1f32a39a8fe9608c7a68566d6781 (patch)
tree2e49fc7742bf73ea49f2fbe3ab3f7774fe8f2429 /src/corelib/tools/qchar.h
parentc9db6e52bc9bd9731159fcb4e95fca5cba01bc9c (diff)
QChar: prepare relational operators for constexpr'ification
Make sure the relational operators are in a constexpr'able form by removing the use of the const/non-const-overloaded unicode() function, which in the relational operators is resolved to the non-const version, which isn't constexpr'able. Replaced with direct member access for op== and op< (required making them friends) and reformulating the other operators in terms of these two. Since I managed to introduce a bug while doing this change, add a simple test for QChar operators, too. Change-Id: I69f3da849e71abc2a17152f797694950914adebc Reviewed-by: Alex Trotsenko <alex1973tr@gmail.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/tools/qchar.h')
-rw-r--r--src/corelib/tools/qchar.h16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/corelib/tools/qchar.h b/src/corelib/tools/qchar.h
index dcbe3fb0c2..6854a7ac87 100644
--- a/src/corelib/tools/qchar.h
+++ b/src/corelib/tools/qchar.h
@@ -493,6 +493,9 @@ private:
QChar(char c);
QChar(uchar c);
#endif
+
+ friend bool operator==(QChar, QChar);
+ friend bool operator< (QChar, QChar);
ushort ucs;
};
@@ -534,12 +537,13 @@ inline bool QChar::isUpper(uint ucs4)
inline bool QChar::isTitleCase(uint ucs4)
{ return ucs4 > 127 && QChar::category(ucs4) == Letter_Titlecase; }
-inline bool operator==(QChar c1, QChar c2) { return c1.unicode() == c2.unicode(); }
-inline bool operator!=(QChar c1, QChar c2) { return c1.unicode() != c2.unicode(); }
-inline bool operator<=(QChar c1, QChar c2) { return c1.unicode() <= c2.unicode(); }
-inline bool operator>=(QChar c1, QChar c2) { return c1.unicode() >= c2.unicode(); }
-inline bool operator<(QChar c1, QChar c2) { return c1.unicode() < c2.unicode(); }
-inline bool operator>(QChar c1, QChar c2) { return c1.unicode() > c2.unicode(); }
+inline bool operator==(QChar c1, QChar c2) { return c1.ucs == c2.ucs; }
+inline bool operator< (QChar c1, QChar c2) { return c1.ucs < c2.ucs; }
+
+inline bool operator!=(QChar c1, QChar c2) { return !operator==(c1, c2); }
+inline bool operator>=(QChar c1, QChar c2) { return !operator< (c1, c2); }
+inline bool operator> (QChar c1, QChar c2) { return operator< (c2, c1); }
+inline bool operator<=(QChar c1, QChar c2) { return !operator< (c2, c1); }
#ifndef QT_NO_DATASTREAM
Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, QChar);