Rex Dieter adf30a
From da5751c7b1589d2ea5800a3cf96dfc93b23b9783 Mon Sep 17 00:00:00 2001
Rex Dieter adf30a
From: Milian Wolff <mail@milianw.de>
Rex Dieter adf30a
Date: Tue, 9 Dec 2014 14:35:04 +0100
Rex Dieter adf30a
Subject: [PATCH 28/30] Extend imapparser benchmark and keep static data
Rex Dieter adf30a
 around.
Rex Dieter adf30a
Rex Dieter adf30a
This gets rid of some temporary allocations and thus speeds up
Rex Dieter adf30a
the whole process a bit.
Rex Dieter adf30a
Rex Dieter adf30a
REVIEW: 121406
Rex Dieter adf30a
---
Rex Dieter adf30a
 libs/imapparser.cpp                |  5 +++--
Rex Dieter adf30a
 libs/tests/imapparserbenchmark.cpp | 22 ++++++++++++++++++++++
Rex Dieter adf30a
 2 files changed, 25 insertions(+), 2 deletions(-)
Rex Dieter adf30a
Rex Dieter adf30a
diff --git a/libs/imapparser.cpp b/libs/imapparser.cpp
Rex Dieter adf30a
index 9b437e2..6f9f592 100644
Rex Dieter adf30a
--- a/libs/imapparser.cpp
Rex Dieter adf30a
+++ b/libs/imapparser.cpp
Rex Dieter adf30a
@@ -364,7 +364,8 @@ int ImapParser::parseNumber( const QByteArray &data, qint64 &result, bool *ok, i
Rex Dieter adf30a
 QByteArray ImapParser::quote( const QByteArray &data )
Rex Dieter adf30a
 {
Rex Dieter adf30a
   if ( data.isEmpty() ) {
Rex Dieter adf30a
-    return QByteArray( "\"\"" );
Rex Dieter adf30a
+    static const QByteArray empty( "\"\"" );
Rex Dieter adf30a
+    return empty;
Rex Dieter adf30a
   }
Rex Dieter adf30a
 
Rex Dieter adf30a
   const int inputLength = data.length();
Rex Dieter adf30a
@@ -499,7 +500,7 @@ int ImapParser::parseDateTime( const QByteArray &data, QDateTime &dateTime, int
Rex Dieter adf30a
   }
Rex Dieter adf30a
 
Rex Dieter adf30a
   pos += 3;
Rex Dieter adf30a
-  const QByteArray shortMonthNames( "janfebmaraprmayjunjulaugsepoctnovdec" );
Rex Dieter adf30a
+  static const QByteArray shortMonthNames( "janfebmaraprmayjunjulaugsepoctnovdec" );
Rex Dieter adf30a
   int month = shortMonthNames.indexOf( data.mid( pos, 3 ).toLower() );
Rex Dieter adf30a
   if ( month == -1 ) {
Rex Dieter adf30a
     return start;
Rex Dieter adf30a
diff --git a/libs/tests/imapparserbenchmark.cpp b/libs/tests/imapparserbenchmark.cpp
Rex Dieter adf30a
index 17dac66..fd4335c 100644
Rex Dieter adf30a
--- a/libs/tests/imapparserbenchmark.cpp
Rex Dieter adf30a
+++ b/libs/tests/imapparserbenchmark.cpp
Rex Dieter adf30a
@@ -94,6 +94,28 @@ class ImapParserBenchmark : public QObject
Rex Dieter adf30a
         ImapParser::parseParenthesizedList( data, result, 0 );
Rex Dieter adf30a
       }
Rex Dieter adf30a
     }
Rex Dieter adf30a
+
Rex Dieter adf30a
+    void parseNumber()
Rex Dieter adf30a
+    {
Rex Dieter adf30a
+      QByteArray data( "123456" );
Rex Dieter adf30a
+      qint64 result;
Rex Dieter adf30a
+      bool ok = false;
Rex Dieter adf30a
+      QBENCHMARK {
Rex Dieter adf30a
+        ImapParser::parseNumber( data, result, &ok );
Rex Dieter adf30a
+      }
Rex Dieter adf30a
+      QVERIFY(ok);
Rex Dieter adf30a
+      QCOMPARE(result, qint64(123456));
Rex Dieter adf30a
+    }
Rex Dieter adf30a
+
Rex Dieter adf30a
+    void parseDateTime()
Rex Dieter adf30a
+    {
Rex Dieter adf30a
+      QByteArray data( "28-May-2006 01:03:35 +0000" );
Rex Dieter adf30a
+      QDateTime result;
Rex Dieter adf30a
+      QBENCHMARK {
Rex Dieter adf30a
+        ImapParser::parseDateTime( data, result );
Rex Dieter adf30a
+      }
Rex Dieter adf30a
+      QCOMPARE(result.toString( QString::fromUtf8( "dd-MMM-yyyy hh:mm:ss +0000" ) ), QString::fromUtf8( data ));
Rex Dieter adf30a
+    }
Rex Dieter adf30a
 };
Rex Dieter adf30a
 
Rex Dieter adf30a
 #include "imapparserbenchmark.moc"
Rex Dieter adf30a
-- 
Rex Dieter adf30a
2.1.0
Rex Dieter adf30a