summaryrefslogtreecommitdiffstats
path: root/src/corelib
diff options
context:
space:
mode:
authorThiago Macieira <thiago@kde.org>2011-07-07 18:48:47 +0200
committerQt by Nokia <qt-info@nokia.com>2011-10-22 00:16:33 +0200
commitc2ca2d7fb35a866d634b8707596cae0ab6205448 (patch)
treec0df2cb4da636032192dda597df0e0167bbf4cd7 /src/corelib
parent5e0c7ebdf10ba4513671ad92ddf64e6989e58a1f (diff)
Add Q_DECL_CONSTEXPR to a QChar, QLatin1Char and QLatin1String constructors
These types now technically are trivially-constructible and standard-layout in C++0x. Change-Id: I455bd905fd6e237a1dff517b86dcbe59d571266f Reviewed-by: Olivier Goffart <ogoffart@kde.org>
Diffstat (limited to 'src/corelib')
-rw-r--r--src/corelib/tools/qchar.h41
-rw-r--r--src/corelib/tools/qstring.h4
2 files changed, 19 insertions, 26 deletions
diff --git a/src/corelib/tools/qchar.h b/src/corelib/tools/qchar.h
index 697b506ca3..65b914cbfc 100644
--- a/src/corelib/tools/qchar.h
+++ b/src/corelib/tools/qchar.h
@@ -55,9 +55,9 @@ class QString;
struct QLatin1Char
{
public:
- inline explicit QLatin1Char(char c) : ch(c) {}
- inline char toLatin1() const { return ch; }
- inline ushort unicode() const { return ushort(uchar(ch)); }
+ Q_DECL_CONSTEXPR inline explicit QLatin1Char(char c) : ch(c) {}
+ Q_DECL_CONSTEXPR inline char toLatin1() const { return ch; }
+ Q_DECL_CONSTEXPR inline ushort unicode() const { return ushort(uchar(ch)); }
private:
char ch;
@@ -66,17 +66,6 @@ private:
class Q_CORE_EXPORT QChar {
public:
- QChar();
-#ifndef QT_NO_CAST_FROM_ASCII
- QT_ASCII_CAST_WARN_CONSTRUCTOR QChar(char c);
- QT_ASCII_CAST_WARN_CONSTRUCTOR QChar(uchar c);
-#endif
- QChar(QLatin1Char ch);
- QChar(uchar c, uchar r);
- inline QChar(ushort rc) : ucs(rc){}
- QChar(short rc);
- QChar(uint rc);
- QChar(int rc);
enum SpecialCharacter {
Null = 0x0000,
Nbsp = 0x00a0,
@@ -87,8 +76,21 @@ public:
ParagraphSeparator = 0x2029,
LineSeparator = 0x2028
};
- QChar(SpecialCharacter sc);
+ Q_DECL_CONSTEXPR QChar() : ucs(0) {}
+ Q_DECL_CONSTEXPR QChar(ushort rc) : ucs(rc){} // implicit
+ Q_DECL_CONSTEXPR QChar(uchar c, uchar r) : ucs(ushort((r << 8) | c)){}
+ Q_DECL_CONSTEXPR QChar(short rc) : ucs(ushort(rc)){} // implicit
+ Q_DECL_CONSTEXPR QChar(uint rc) : ucs(ushort(rc & 0xffff)){}
+ Q_DECL_CONSTEXPR QChar(int rc) : ucs(ushort(rc & 0xffff)){}
+ Q_DECL_CONSTEXPR QChar(SpecialCharacter s) : ucs(ushort(s)) {} // implicit
+ Q_DECL_CONSTEXPR QChar(QLatin1Char ch) : ucs(ch.unicode()) {} // implicit
+
+#ifndef QT_NO_CAST_FROM_ASCII
+ // these two constructors are NOT inline const_expr!
+ QT_ASCII_CAST_WARN_CONSTRUCTOR explicit QChar(char c);
+ QT_ASCII_CAST_WARN_CONSTRUCTOR explicit QChar(uchar c);
+#endif
// Unicode information
enum Category
@@ -343,18 +345,9 @@ private:
Q_DECLARE_TYPEINFO(QChar, Q_MOVABLE_TYPE);
-inline QChar::QChar() : ucs(0) {}
-
inline char QChar::toLatin1() const { return ucs > 0xff ? '\0' : char(ucs); }
inline QChar QChar::fromLatin1(char c) { return QChar(ushort(uchar(c))); }
-inline QChar::QChar(uchar c, uchar r) : ucs(ushort((r << 8) | c)){}
-inline QChar::QChar(short rc) : ucs(ushort(rc)){}
-inline QChar::QChar(uint rc) : ucs(ushort(rc & 0xffff)){}
-inline QChar::QChar(int rc) : ucs(ushort(rc & 0xffff)){}
-inline QChar::QChar(SpecialCharacter s) : ucs(ushort(s)) {}
-inline QChar::QChar(QLatin1Char ch) : ucs(ch.unicode()) {}
-
inline void QChar::setCell(uchar acell)
{ ucs = ushort((ucs & 0xff00) + acell); }
inline void QChar::setRow(uchar arow)
diff --git a/src/corelib/tools/qstring.h b/src/corelib/tools/qstring.h
index 313b4769e7..5013e27826 100644
--- a/src/corelib/tools/qstring.h
+++ b/src/corelib/tools/qstring.h
@@ -639,10 +639,10 @@ public:
};
-class Q_CORE_EXPORT QLatin1String
+class QLatin1String
{
public:
- inline explicit QLatin1String(const char *s) : m_size(s ? int(strlen(s)) : 0), m_data(s) {}
+ Q_DECL_CONSTEXPR inline explicit QLatin1String(const char *s) : m_size(s ? int(strlen(s)) : 0), m_data(s) {}
inline const char *latin1() const { return m_data; }
inline int size() const { return m_size; }