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