OSDN Git Service

QByteArray::toLower() and QByteArray::toUpper() optimization
authorIvailo Monev <xakepa10@gmail.com>
Fri, 10 Jun 2022 21:52:17 +0000 (00:52 +0300)
committerIvailo Monev <xakepa10@gmail.com>
Fri, 10 Jun 2022 21:52:17 +0000 (00:52 +0300)
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
src/core/tools/qbytearray.cpp
src/core/tools/qlocale_tools_p.h

index 8f3720e..772f2c6 100644 (file)
@@ -2510,9 +2510,9 @@ QByteArray QByteArray::mid(int pos, int len) const
 QByteArray QByteArray::toLower() const
 {
     QByteArray s(*this);
-    uchar *p = reinterpret_cast<uchar *>(s.data());
+    char *p = s.data();
     while (*p) {
-        *p = QChar::toLower((ushort)*p);
+        *p = qToLower(*p);
         p++;
     }
     return s;
@@ -2531,9 +2531,9 @@ QByteArray QByteArray::toLower() const
 QByteArray QByteArray::toUpper() const
 {
     QByteArray s(*this);
-    uchar *p = reinterpret_cast<uchar *>(s.data());
+    char *p = s.data();
     while (*p) {
-        *p = QChar::toUpper((ushort)*p);
+        *p = qToUpper(*p);
         p++;
     }
     return s;
index 105b011..8364f84 100644 (file)
@@ -75,14 +75,16 @@ static inline bool qIsDigit(char ch)
     return (ch >= '0' && ch <= '9');
 }
 
-static inline char qToLower(char ch)
+template <class T>
+inline T qToLower(const T ch)
 {
     if (ch >= 'A' && ch <= 'Z')
         return (ch + 32);
     return ch;
 }
 
-static inline char qToUpper(char ch)
+template <class T>
+inline T qToUpper(const T ch)
 {
     if (ch >= 'a' && ch <= 'z')
         return (ch - 32);